Kaynağa Gözat

导入模板校验 供应商部门名称非空校验 月度报表未下单参与生成账单

zxf 2 hafta önce
ebeveyn
işleme
882472464e
13 değiştirilmiş dosya ile 216 ekleme ve 6 silme
  1. 36 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/constant/ImportTemplateConstants.java
  2. 20 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/BizAddressBookController.java
  3. 28 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/BizWaybillOrderController.java
  4. 2 1
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/RptFinancialMonthSummaryController.java
  5. 1 1
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/dto/JDOrderDTO.java
  6. 2 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/RptFinancialMonthSummaryMapper.java
  7. 2 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/IRptFinancialMonthSummaryService.java
  8. 15 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/RptFinancialMonthSummaryServiceImpl.java
  9. 45 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/util/ExcelImportValidato.java
  10. 24 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java
  11. 20 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
  12. 10 3
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
  13. 11 1
      jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/RptFinancialMonthSummaryMapper.xml

+ 36 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/constant/ImportTemplateConstants.java

@@ -0,0 +1,36 @@
+package com.ruoyi.logistics.constant;
+
+public class ImportTemplateConstants {
+    private ImportTemplateConstants() {}
+
+    // ==================== 用户导入模板 ====================
+    public static final String[] USER_TEMPLATE_HEAD = {
+            "*手机号", "*姓名", "*工号", "用户角色", "*组织名称", "*组织编码", "邮箱"
+    };
+    // ==================== 供应商导入模板 ====================
+    public static final String[] DEPT_TEMPLATE_HEAD = {
+            "*组织名称", "*组织编码", "*父组织名称", "*父组织编码",
+            "负责人手机号", "负责人姓名", "*发票抬头", "*纳税人识别号",
+            "*地址", "*开户银行", "*银行账号"
+    };
+    // ==================== 地址簿导入模板 ====================
+    public static final String[] ADDRESS_TEMPLATE_HEAD = {
+            "联系人姓名", "联系人电话", "省", "市", "区/县","详细地址"
+    };
+    // ==================== 顺丰批量导入模板 ====================
+    public static final String[] SF_TEMPLATE_HEAD = {
+            "寄件人姓名", "寄件人电话", "寄件详细地址", "收件人姓名", "收件人电话","收件详细地址", "物品名称", "物品重量(KG)", "物品体积(m³)", "物品数量(件)","产品类型", "保价金额(元)"
+    };
+    // ==================== 京东批量导入模板 ====================
+    public static final String[] JD_TEMPLATE_HEAD = {
+            "寄件人姓名", "寄件人电话", "寄件详细地址", "收件人姓名", "收件人电话","收件详细地址",
+            "物品名称", "物品重量(KG)", "物品体积(m³)", "物品数量(件)","产品类型", "包装服务",
+            "保价金额","签单返还"
+
+    };
+
+
+
+
+
+}

+ 20 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/BizAddressBookController.java

@@ -5,8 +5,11 @@ import java.io.IOException;
 import javax.servlet.http.HttpServletResponse;
 
 import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.logistics.constant.ImportTemplateConstants;
+import com.ruoyi.logistics.util.ExcelImportValidato;
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.domain.dto.DeptImportDTO;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -124,8 +127,25 @@ public class BizAddressBookController extends BaseController
     @Log(title = "导入地址簿", businessType = BusinessType.IMPORT)
     @PostMapping("/importData")
     public AjaxResult importData(MultipartFile file) throws IOException {
+
+
+
+
         ExcelUtil<BizAddressBook> util = new ExcelUtil<>(BizAddressBook.class);
         List<BizAddressBook> bookList = util.importExcel(file.getInputStream());
+
+        if (CollectionUtils.isEmpty(bookList)) {
+            return AjaxResult.error("导入数据不能为空!");
+        }
+        // 标准校验:是否为规定模板
+        boolean isTemplate = ExcelImportValidato.isValidTemplate(
+                file,
+                ImportTemplateConstants.ADDRESS_TEMPLATE_HEAD
+        );
+
+        if (!isTemplate) {
+            return AjaxResult.error("请使用系统提供的导入模板,请勿修改表头!");
+        }
         String message = bizAddressBookService.importBook(bookList);
         return success(message);
     }

+ 28 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/BizWaybillOrderController.java

@@ -11,6 +11,7 @@ import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.logistics.constant.ImportTemplateConstants;
 import com.ruoyi.logistics.constant.JDDictConstants;
 import com.ruoyi.logistics.domain.BizWaybillOrder;
 import com.ruoyi.logistics.domain.SysDeptRate;
@@ -20,6 +21,7 @@ import com.ruoyi.logistics.domain.dto.SfOrderImportDTO;
 import com.ruoyi.logistics.handler.SFOrderDynamicTemplateHandler;
 import com.ruoyi.logistics.service.IBizWaybillOrderService;
 import com.ruoyi.logistics.service.impl.SysDeptRateServiceImpl;
+import com.ruoyi.logistics.util.ExcelImportValidato;
 import com.ruoyi.system.api.domain.SysDictData;
 import com.ruoyi.system.api.model.LoginUser;
 import com.ruoyi.system.service.ISysDictTypeService;
@@ -201,6 +203,17 @@ public class BizWaybillOrderController extends BaseController
                 if (orderList == null || orderList.isEmpty()) {
                     return AjaxResult.error("Excel 文件中没有有效的订单数据");
                 }
+                // 标准校验:是否为规定模板
+                boolean isTemplate = ExcelImportValidato.isValidTemplate(
+                        file,
+                        ImportTemplateConstants.JD_TEMPLATE_HEAD
+                );
+
+                if (!isTemplate) {
+                    return AjaxResult.error("请使用系统提供的导入模板,请勿修改表头!");
+                }
+
+
                 Map<String,Object> result = bizWaybillOrderService.validateAndGetErrorJd(orderList);
                 if (StringUtils.isNotBlank(result.get("errorMsg").toString())) {
                     return AjaxResult.error(result.get("errorMsg").toString());
@@ -215,6 +228,7 @@ public class BizWaybillOrderController extends BaseController
 
             }
             if (2 == orderType) {
+
                 ExcelUtil<SfOrderImportDTO> util = new ExcelUtil<>(SfOrderImportDTO.class);
                 List<SfOrderImportDTO> orderList = EasyExcel.read(file.getInputStream())
                         .head(SfOrderImportDTO.class)
@@ -225,6 +239,20 @@ public class BizWaybillOrderController extends BaseController
                 if (orderList == null || orderList.isEmpty()) {
                     return AjaxResult.error("Excel 文件中没有有效的订单数据");
                 }
+
+
+                // 标准校验:是否为规定模板
+                boolean isTemplate = ExcelImportValidato.isValidTemplate(
+                        file,
+                        ImportTemplateConstants.SF_TEMPLATE_HEAD
+                );
+
+                if (!isTemplate) {
+                    return AjaxResult.error("请使用系统提供的导入模板,请勿修改表头!");
+                }
+
+
+
                 // 2. 统一校验(返回错误字符串)
                 Map<String,Object> result = bizWaybillOrderService.validateAndGetError(orderList);
                 // 3. 有错误 → 直接返回字符串

+ 2 - 1
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/RptFinancialMonthSummaryController.java

@@ -95,7 +95,8 @@ public class RptFinancialMonthSummaryController extends BaseController
 
     @PostMapping("/creatMontSummary")
     public AjaxResult creatMontSummary(@RequestBody Map param)
-    {
+    {   //先将这个月份没有参与运单的进行处理
+        rptFinancialMonthSummaryService.creatMontSummaryZero(param);
         return toAjax(rptFinancialMonthSummaryService.creatMontSummary(param));
     }
 

+ 1 - 1
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/dto/JDOrderDTO.java

@@ -76,7 +76,7 @@ public class JDOrderDTO implements Serializable {
     private String goodsName;
 
     /** 物品重量 */
-    @ExcelProperty(value = "物品重量(kg)", order = 7)
+    @ExcelProperty(value = "物品重量(KG)", order = 7)
     @ColumnWidth(15)
     private BigDecimal goodsWeight;
 

+ 2 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/RptFinancialMonthSummaryMapper.java

@@ -71,4 +71,6 @@ public interface RptFinancialMonthSummaryMapper
     int updateRptFinancialMonthSummaryByInvoice(RptFinancialMonthSummary rptFinancialMonthSummary);
 
     List<Map<String, Object>> selectMonthSummaryGroupProductList(Map param);
+
+    List<Map<String, Object>> selectAllDeptMonthSummaryList(Map param);
 }

+ 2 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/IRptFinancialMonthSummaryService.java

@@ -74,4 +74,6 @@ public interface IRptFinancialMonthSummaryService
     int creatMontSummaryAccountAdjustment(Map param);
 
     boolean verification(String monthCode, String deptId);
+
+    void creatMontSummaryZero(Map param);
 }

+ 15 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/RptFinancialMonthSummaryServiceImpl.java

@@ -113,6 +113,20 @@ public class RptFinancialMonthSummaryServiceImpl implements IRptFinancialMonthSu
 
 
 
+    /**
+     这个专门为上个月没有发生已签收供应商进行数据记录
+
+     直接将所有供应商生成插入
+     */
+    @Override
+    public void creatMontSummaryZero(Map param) {
+        List<Map<String,Object>> monthSummaryList=rptFinancialMonthSummaryMapper.selectAllDeptMonthSummaryList(param);
+        if (CollectionUtils.isNotEmpty(monthSummaryList)) {
+            rptFinancialMonthSummaryMapper.insertBachRptFinancialMonthSummary(monthSummaryList);
+        }
+    }
+
+
     /**
      * 新增财务月度汇总   这个方法针对  月度账单任务  和 重新计算
      * 1.定时任务执行所有供应商生成财务月度汇总    传值汇总月份  monthCode
@@ -245,6 +259,7 @@ public class RptFinancialMonthSummaryServiceImpl implements IRptFinancialMonthSu
 
 
 
+
     @Override
     public int creatMontSummaryAccountAdjustment( Map param) {
         LocalDate today = LocalDate.now();

+ 45 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/util/ExcelImportValidato.java

@@ -0,0 +1,45 @@
+package com.ruoyi.logistics.util;
+
+import cn.hutool.core.util.ObjectUtil;
+import org.apache.poi.ss.usermodel.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.InputStream;
+
+public class ExcelImportValidato {
+    /**
+     * 校验 Excel 是否为规定模板(校验表头行)
+     */
+    public static boolean isValidTemplate(MultipartFile file, String[] requireHead) {
+        try (InputStream is = file.getInputStream();
+             Workbook workbook = WorkbookFactory.create(is)) {
+
+            Sheet sheet = workbook.getSheetAt(0);
+            Row headRow = sheet.getRow(0);
+
+            if (ObjectUtil.isNull(headRow)) {
+                return false;
+            }
+
+            // 列数必须一致
+            if (headRow.getPhysicalNumberOfCells() != requireHead.length) {
+                return false;
+            }
+
+            // 逐列校验表头
+            for (int i = 0; i < requireHead.length; i++) {
+                Cell cell = headRow.getCell(i, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
+                cell.setCellType(CellType.STRING);
+                String val = cell.getStringCellValue().trim();
+
+                if (!requireHead[i].equals(val)) {
+                    return false;
+                }
+            }
+            return true;
+
+        } catch (Exception e) {
+            return false;
+        }
+    }
+}

+ 24 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java

@@ -5,6 +5,9 @@ import java.util.List;
 import javax.servlet.http.HttpServletResponse;
 
 import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.logistics.constant.ImportTemplateConstants;
+import com.ruoyi.logistics.util.ExcelImportValidato;
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.ArrayUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
@@ -145,8 +148,29 @@ public class SysDeptController extends BaseController
     @Log(title = "部门管理", businessType = BusinessType.IMPORT)
     @PostMapping("/importData")
     public AjaxResult importData(MultipartFile file) throws Exception {
+
+
+
+
         ExcelUtil<DeptImportDTO> util = new ExcelUtil<DeptImportDTO>(DeptImportDTO.class);
         List<DeptImportDTO> deptList = util.importExcel(file.getInputStream());
+        if (CollectionUtils.isEmpty(deptList)) {
+            return AjaxResult.error("导入数据不能为空!");
+        }
+
+        // 标准校验:是否为规定模板
+        boolean isTemplate = ExcelImportValidato.isValidTemplate(
+                file,
+                ImportTemplateConstants.DEPT_TEMPLATE_HEAD
+        );
+
+        if (!isTemplate) {
+            return AjaxResult.error("请使用系统提供的导入模板,请勿修改表头!");
+        }
+
+
+
+
         String message = deptService.importDept(deptList);
         return success(message);
     }

+ 20 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/system/controller/SysUserController.java

@@ -10,11 +10,13 @@ import com.alibaba.fastjson.JSONObject;
 import com.ruoyi.common.core.utils.SpringUtils;
 import com.ruoyi.common.redis.service.RedisIdGenerator;
 import com.ruoyi.common.redis.service.RedisService;
+import com.ruoyi.logistics.constant.ImportTemplateConstants;
 import com.ruoyi.logistics.domain.BizWaybillOrder;
 import com.ruoyi.logistics.domain.LogisticsOrder;
 import com.ruoyi.logistics.domain.SysDeptRate;
 import com.ruoyi.logistics.service.ISysDeptRateService;
 import com.ruoyi.logistics.service.LogisticsOrderService;
+import com.ruoyi.logistics.util.ExcelImportValidato;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.ArrayUtils;
 import org.slf4j.Logger;
@@ -112,8 +114,26 @@ public class SysUserController extends BaseController
     @RequiresPermissions("system:user:add")
     @PostMapping("/importData")
     public AjaxResult importData(MultipartFile file) throws Exception {
+
+
+
         ExcelUtil<UserImportDTO> util = new ExcelUtil<UserImportDTO>(UserImportDTO.class);
         List<UserImportDTO> userImportList = util.importExcel(file.getInputStream());
+
+        if (CollectionUtils.isEmpty(userImportList)) {
+            return AjaxResult.error("导入数据不能为空!");
+        }
+
+
+        // 标准校验:是否为规定模板
+        boolean isTemplate = ExcelImportValidato.isValidTemplate(
+                file,
+                ImportTemplateConstants.USER_TEMPLATE_HEAD
+        );
+
+        if (!isTemplate) {
+            return AjaxResult.error("请使用系统提供的导入模板并填充数据,请勿修改表头!");
+        }
         String operName = SecurityUtils.getUsername();
         String message = userService.importUserFromDTO(userImportList, operName);
         return success(message);

+ 10 - 3
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java

@@ -357,7 +357,7 @@ public class SysDeptServiceImpl implements ISysDeptService
         int failureNum = 0;
         StringBuilder successMsg = new StringBuilder();
         StringBuilder failureMsg = new StringBuilder();
-
+        int rowNum = 2;
         for (DeptImportDTO importDTO : deptList) {
             try {
                 // 将导入对象转换为 SysDept 实体对象
@@ -369,6 +369,13 @@ public class SysDeptServiceImpl implements ISysDeptService
                     parentId = deptMapper.selectDeptByInfo(importDTO.getParentDeptCode(), importDTO.getParentDeptName());
                 }
 
+                if(StringUtils.isBlank(dept.getDeptName())){
+                    failureNum++;
+                    failureMsg.append(String.format("第%d行:部门名称不能为空;", rowNum));
+                    rowNum++;
+                    continue;
+                }
+
                 // 设置父部门 ID,如果为 null 则默认为顶级部门(0)
                 dept.setParentId(parentId == null ? 0L : parentId.getDeptId());
 
@@ -378,8 +385,7 @@ public class SysDeptServiceImpl implements ISysDeptService
                 } else */
                 if (null != deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId())) {
                     failureNum++;
-                    failureMsg.append(String.format("%1$s、部门已存在;", dept.getDeptName()));
-                } else {
+                    failureMsg.append(String.format("第%d行:%s 部门已存在;", rowNum, dept.getDeptName()));                } else {
                     // 新增部门
                     this.insertDept(dept);
                     successNum++;
@@ -391,6 +397,7 @@ public class SysDeptServiceImpl implements ISysDeptService
                 String msg = String.format("%1$s、导入失败:%2$s", importDTO.getDeptName(), e.getMessage());
                 failureMsg.append(msg);
             }
+            rowNum++;
         }
 
         if (failureNum > 0) {

+ 11 - 1
jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/RptFinancialMonthSummaryMapper.xml

@@ -55,7 +55,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             ${params.dataScope}
 
         </where>
-
+       order by  a.transaction_count desc
 
     </select>
 
@@ -202,6 +202,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             a.dept_id
     </select>
 
+    <select id="selectAllDeptMonthSummaryList"  parameterType="java.util.Map" resultType="java.util.HashMap"  >
+        SELECT
+        #{monthCode} summary_month,
+        dept_id ,
+        '0' transaction_count,
+        '0.00' payable_amount,
+        '0.00' amount,
+        '0.00' purchase_amount
+        from sys_dept where del_flag='0'
+    </select>