From cebbcb63dfd7c9599868959c7fc36f16ed3b1911 Mon Sep 17 00:00:00 2001
From: 龚焕茏 <2842157468@qq.com>
Date: 星期三, 24 四月 2024 13:54:11 +0800
Subject: [PATCH] 合同导入模板生成、导入合同及规则、合同规则展示

---
 ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateRule.java         |    8 +-
 ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java |   33 ++++++++--
 ycl-server/src/main/java/com/ycl/platform/service/ICalculateRuleService.java     |    5 +
 ycl-common/src/main/java/enumeration/general/RuleDeductCategoryEnum.java         |   27 +++++++++
 ycl-server/src/main/java/com/ycl/platform/service/ITContractService.java         |    3 
 ycl-server/src/main/java/com/ycl/platform/controller/TContractController.java    |    3 
 ycl-common/src/main/java/enumeration/converter/RuleDeductCategoryConverter.java  |   47 +++++++++++++++
 ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TContract.java             |    5 +
 8 files changed, 118 insertions(+), 13 deletions(-)

diff --git a/ycl-common/src/main/java/enumeration/converter/RuleDeductCategoryConverter.java b/ycl-common/src/main/java/enumeration/converter/RuleDeductCategoryConverter.java
new file mode 100644
index 0000000..a972243
--- /dev/null
+++ b/ycl-common/src/main/java/enumeration/converter/RuleDeductCategoryConverter.java
@@ -0,0 +1,47 @@
+package enumeration.converter;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.data.ReadCellData;
+import com.alibaba.excel.metadata.data.WriteCellData;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import enumeration.general.RuleDeductCategoryEnum;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 鎵e垎绫诲瀷鏋氫妇瑁呮崲鍣�
+ *
+ * @author gonghl
+ */
+@Slf4j
+public class RuleDeductCategoryConverter implements Converter<RuleDeductCategoryEnum> {
+
+    @Override
+    public Class supportJavaTypeKey() {
+        return null;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return null;
+    }
+
+    @Override
+    public RuleDeductCategoryEnum convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (cellData.getStringValue().equals(RuleDeductCategoryEnum.DEDUCT_POINTS.getDesc())) {
+            return RuleDeductCategoryEnum.DEDUCT_POINTS;
+        } else if (cellData.getStringValue().equals(RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY.getDesc())) {
+            return RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY;
+        } else if (cellData.getStringValue().equals(RuleDeductCategoryEnum.MULTIPLY_POINTS_AFTER_DIVIDING_QUANTITY.getDesc())) {
+            return RuleDeductCategoryEnum.MULTIPLY_POINTS_AFTER_DIVIDING_QUANTITY;
+        } else {
+            return null;
+        }
+    }
+
+    @Override
+    public WriteCellData convertToExcelData(RuleDeductCategoryEnum value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        return new WriteCellData(value.getDesc());
+    }
+}
\ No newline at end of file
diff --git a/ycl-common/src/main/java/enumeration/general/RuleDeductCategoryEnum.java b/ycl-common/src/main/java/enumeration/general/RuleDeductCategoryEnum.java
new file mode 100644
index 0000000..0a2b04f
--- /dev/null
+++ b/ycl-common/src/main/java/enumeration/general/RuleDeductCategoryEnum.java
@@ -0,0 +1,27 @@
+package enumeration.general;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.Getter;
+
+/**
+ * 鍚堝悓瑙勫垯鎵e垎绫诲瀷
+ * @author gonghl
+ */
+@Getter
+public enum RuleDeductCategoryEnum {
+    DEDUCT_POINTS("DEDUCT_POINTS", "鎵f寚瀹氬垎鏁�"),
+    MULTIPLY_POINTS_BY_QUANTITY("MULTIPLY_POINTS_BY_QUANTITY", "鍒嗘暟涔樹互鏁伴噺"),
+    MULTIPLY_POINTS_AFTER_DIVIDING_QUANTITY("MULTIPLY_POINTS_AFTER_DIVIDING_QUANTITY", "闄や互鏁伴噺鍚庝箻浠ュ垎鏁�");
+
+    @EnumValue // 鏍囨槑璇ュ瓧娈靛瓨鍏ユ暟鎹簱
+    private final String code;
+
+    @JsonValue // 鏍囨槑鍦ㄨ浆JSON鏃朵娇鐢ㄨ瀛楁
+    private final String desc;
+
+    RuleDeductCategoryEnum(String code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateRule.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateRule.java
index 5b750d4..b6af342 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateRule.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateRule.java
@@ -9,6 +9,8 @@
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.ycl.system.domain.TreeEntity;
 import com.ycl.system.domain.TreeNode;
+import enumeration.converter.RuleDeductCategoryConverter;
+import enumeration.general.RuleDeductCategoryEnum;
 import lombok.Data;
 
 import java.util.Date;
@@ -61,10 +63,10 @@
     private String ruleCondition;
 
     /**
-     * 鎵e噺鏂瑰紡 1/2/3 鎵f寚瀹氬垎鏁�/鍒嗘暟涔樹互鏁伴噺/闄や互鏁伴噺鍚庝箻浠ュ垎鏁�
+     * 鎵e噺鏂瑰紡 鎵f寚瀹氬垎鏁�/鍒嗘暟涔樹互鏁伴噺/闄や互鏁伴噺鍚庝箻浠ュ垎鏁�
      */
-    @ExcelProperty("鎵e垎鏂瑰紡")
-    private String deductCategory;
+    @ExcelProperty(value = "鎵e垎鏂瑰紡", converter = RuleDeductCategoryConverter.class)
+    private RuleDeductCategoryEnum deductCategory;
 
     /**
      * 鎵i櫎鍒嗘暟
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TContract.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TContract.java
index e3498b4..e4c77d9 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TContract.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TContract.java
@@ -57,6 +57,11 @@
     @JsonFormat(pattern = "yyyy-MM-dd hh-mm-ss")
     private Date endTime;
 
+    /**
+     * 鍚堝悓闄勪欢
+     */
+    private String attachment;
+
     private Date createTime;
 
     private Date updateTime;
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/TContractController.java b/ycl-server/src/main/java/com/ycl/platform/controller/TContractController.java
index aaa12f7..a4f51da 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/TContractController.java
+++ b/ycl-server/src/main/java/com/ycl/platform/controller/TContractController.java
@@ -59,8 +59,7 @@
     @PreAuthorize("@ss.hasPermi('system:user:import')")
     @PostMapping("/importData")
     public AjaxResult importData(MultipartFile file, TContract tContract) {
-        tContractService.importData(file, tContract);
-        return success();
+        return tContractService.importData(file, tContract);
     }
 
     /**
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/ICalculateRuleService.java b/ycl-server/src/main/java/com/ycl/platform/service/ICalculateRuleService.java
index 0f5aaab..2be0456 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/ICalculateRuleService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/ICalculateRuleService.java
@@ -69,5 +69,10 @@
      */
     List<CalculateRule> readExcel(MultipartFile file);
 
+    /**
+     * 鏍规嵁鍚堝悓id鏌ヨ瑙勫垯
+     * @param contractId 鍚堝悓id
+     * @return 鍚堝悓瑙勫垯
+     */
     List<CalculateRule> getRuleListByContractId(Integer contractId);
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/ITContractService.java b/ycl-server/src/main/java/com/ycl/platform/service/ITContractService.java
index d9835a0..338ad78 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/ITContractService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/ITContractService.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ycl.platform.domain.entity.TContract;
+import com.ycl.system.AjaxResult;
 import jakarta.servlet.http.HttpServletResponse;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -27,7 +28,7 @@
      * @param tContract 鍚堝悓淇℃伅
      * @return 瀵煎叆缁撴灉
      */
-    void importData(MultipartFile file, TContract tContract);
+    AjaxResult importData(MultipartFile file, TContract tContract);
 
     List<TContract> selectAll();
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java
index 810cd7b..c3e1b55 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java
@@ -12,13 +12,17 @@
 import com.ycl.platform.mapper.TContractMapper;
 import com.ycl.platform.service.ICalculateRuleService;
 import com.ycl.platform.service.ITContractService;
+import com.ycl.system.AjaxResult;
 import com.ycl.utils.DateUtils;
 import com.ycl.utils.StringUtils;
+import enumeration.general.RuleDeductCategoryEnum;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.net.URLEncoder;
@@ -77,19 +81,19 @@
         calculateRule1.setRuleName("瑙嗛骞冲潎鍦ㄧ嚎鐜�");
         calculateRule1.setRuleDesc("锛�1锛夎棰戝湪绾跨巼=瑙嗛鍦ㄧ嚎鏁伴噺梅鍓嶇鏈嶅姟閰嶇疆鏁帮紙搴旀墸闄や笉鍙姉鍔涙垨涓庝腑鏍囦汉鏈嶅姟鏃犲叧閫犳垚鐨勬帀绾块櫎澶栥�傦級");
         calculateRule1.setRuleCondition("鈮�98%");
-        calculateRule1.setDeductCategory("鎵f寚瀹氬垎鏁�");
+        calculateRule1.setDeductCategory(RuleDeductCategoryEnum.DEDUCT_POINTS);
         calculateRule1.setCalcFraction(0.00);
         list.add(calculateRule1);
         CalculateRule calculateRule2 = new CalculateRule();
         calculateRule2.setRuleDesc("锛�2锛夎棰戝钩鍧囧湪绾跨巼锛氬綋鏈堟瘡鏃ヨ棰戝湪绾跨巼鐨勫钩鍧囧�笺��");
         calculateRule2.setRuleCondition("95%鈮よ棰戝钩鍧囧湪绾跨巼锛�98%");
-        calculateRule2.setDeductCategory("鎵f寚瀹氬垎鏁�");
+        calculateRule2.setDeductCategory(RuleDeductCategoryEnum.DEDUCT_POINTS);
         calculateRule2.setCalcFraction(5.00);
         list.add(calculateRule2);
         CalculateRule calculateRule3 = new CalculateRule();
         calculateRule3.setRuleDesc("锛�3锛夎棰戝湪绾跨巼淇濈暀鏁存暟骞朵笖鍚戜笅鍙栨暣銆�");
         calculateRule3.setRuleCondition("90%鈮よ棰戝钩鍧囧湪绾跨巼锛�95%");
-        calculateRule3.setDeductCategory("鎵f寚瀹氬垎鏁�");
+        calculateRule3.setDeductCategory(RuleDeductCategoryEnum.DEDUCT_POINTS);
         calculateRule3.setCalcFraction(10.00);
         list.add(calculateRule3);
         CalculateRule calculateRule4 = new CalculateRule();
@@ -97,7 +101,7 @@
         calculateRule4.setRuleName("鍓嶇鎰熺煡婧愭不鐞嗗伐浣�");
         calculateRule4.setRuleDesc("鏃堕挓鍚屾锛堣秴杩嚶�3绉掍负涓嶅悎鏍硷級");
         calculateRule4.setRuleCondition("瑙嗛鐩戞帶鎽勫儚鏈烘椂閽熶笉鍚屾锛�24灏忔椂鍐呮湭淇鐨�");
-        calculateRule4.setDeductCategory("鍒嗘暟涔樹互鏁伴噺");
+        calculateRule4.setDeductCategory(RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY);
         calculateRule4.setCalcFraction(0.1);
         list.add(calculateRule4);
         CalculateRule calculateRule7 = new CalculateRule();
@@ -113,7 +117,7 @@
         calculateRule5.setRuleName("鍚庡彴绯荤粺鐨勪繚闅�");
         calculateRule5.setRuleDesc("鍦ㄤ釜鍒澶囨晠闅滀絾涓嶅奖鍝嶈鍔熻兘妯″潡鏁翠綋搴旂敤鎯呭喌涓嬶紝椤诲湪72灏忔椂浠ュ唴鎺掗櫎鏁呴殰銆�");
         calculateRule5.setRuleCondition("鍗曟鏁呴殰鏃堕暱鑻ヨ秴鍑�144灏忔椂浠ュ悗锛屾瘡瓒呭嚭12灏忔椂锛堜笉瓒�12灏忔椂鎸�12灏忔椂璁★級");
-        calculateRule5.setDeductCategory("闄や互鏁伴噺鍚庝箻浠ュ垎鏁�");
+        calculateRule5.setDeductCategory(RuleDeductCategoryEnum.MULTIPLY_POINTS_AFTER_DIVIDING_QUANTITY);
         calculateRule5.setCalcFraction(2.00);
         calculateRule5.setCalcUnit(12);
         list.add(calculateRule5);
@@ -122,7 +126,8 @@
 
     @Override
     @Transactional
-    public void importData(MultipartFile file, TContract tContract) {
+    public AjaxResult importData(MultipartFile file, TContract tContract) {
+        // 淇濆瓨鍚堝悓
         tContract.setCreateTime(DateUtils.getNowDate());
         tContract.setDeleted("0");
         save(tContract);
@@ -132,7 +137,20 @@
         List<CalculateRule> calculateRulesToSave = new ArrayList<>();
         CalculateRule temp = new CalculateRule();
         for (CalculateRule calculateRule : list) {
-            // 鐖惰鍒�
+            // 鍒ゆ柇鏁版嵁瀹屾暣鎬�
+            if (ObjectUtils.isEmpty(calculateRule.getDeductCategory())) {
+                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                return AjaxResult.warn("璇烽�夋嫨" + calculateRule.getRuleName() + calculateRule.getRuleCondition() + "鎵e垎鏂瑰紡");
+            }
+            if (RuleDeductCategoryEnum.MULTIPLY_POINTS_AFTER_DIVIDING_QUANTITY.equals(calculateRule.getDeductCategory()) && ObjectUtils.isEmpty(calculateRule.getCalcUnit())) {
+                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                return AjaxResult.warn("璇峰~鍐�" + calculateRule.getRuleName() + calculateRule.getRuleCondition() + "闄や互鏁伴噺");
+            }
+            if(ObjectUtils.isEmpty(calculateRule.getCalcFraction())) {
+                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                return AjaxResult.warn("璇峰~鍐�" + calculateRule.getRuleName() + calculateRule.getRuleCondition() + "鎵e垎鏁板��");
+            }
+            // 淇濆瓨鐖惰鍒欒幏鍙栫埗id
             if (StringUtils.isNotBlank(calculateRule.getRuleName())) {
                 CalculateRule fu = new CalculateRule();
                 fu.setContractId(tContract.getId().intValue());
@@ -150,6 +168,7 @@
         }
         // 鎵归噺淇濆瓨瑙勫垯
         calculateRuleService.saveBatch(calculateRulesToSave);
+        return AjaxResult.success("鎿嶄綔鎴愬姛");
     }
 
     @Override

--
Gitblit v1.8.0