From 06ba5eb015fc27866858c70460fc0ee1e9aaeede Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期日, 28 四月 2024 17:06:01 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 109 insertions(+), 7 deletions(-) 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 988d72f..eeb6d56 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 @@ -3,20 +3,37 @@ import com.alibaba.excel.EasyExcel; import com.alibaba.excel.write.merge.LoopMergeStrategy; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.handler.CommentWriteHandler; import com.ycl.handler.CustomSheetWriteHandler; +import com.ycl.platform.domain.entity.CalculateMoneyRule; import com.ycl.platform.domain.entity.CalculateRule; import com.ycl.platform.domain.entity.TContract; 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; import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.Date; import java.util.List; +import java.util.stream.Collectors; /** * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice涓氬姟灞傚鐞� @@ -25,7 +42,13 @@ * @date 2024-03-12 */ @Service +@AllArgsConstructor public class TContractServiceImpl extends ServiceImpl<TContractMapper, TContract> implements ITContractService { + + private final ICalculateRuleService calculateRuleService; + private final CalculateMoneyRuleServiceImpl calculateMoneyRuleService; + private final YwUnitServiceImpl ywUnitService; + @Override public void importTemplate(HttpServletResponse response) { try { @@ -63,19 +86,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(); @@ -83,16 +106,14 @@ 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(); - calculateRule7.setRuleName("鈥︹�︹�︹��"); calculateRule7.setRuleDesc("鈥︹�︹�︹��"); calculateRule7.setRuleCondition("鈥︹�︹�︹��"); list.add(calculateRule7); CalculateRule calculateRule6 = new CalculateRule(); - calculateRule6.setRuleName("鈥︹�︹�︹��"); calculateRule6.setRuleDesc("鈥︹�︹�︹��"); calculateRule6.setRuleCondition("鈥︹�︹�︹��"); list.add(calculateRule6); @@ -101,10 +122,91 @@ 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); return list; } + + @Override + @Transactional + public AjaxResult importData(MultipartFile file, TContract tContract) { + // 淇濆瓨鍚堝悓 + tContract.setCreateTime(DateUtils.getNowDate()); + tContract.setDeleted("0"); + save(tContract); + List<CalculateRule> list = calculateRuleService.readExcel(file); + + // 閬嶅巻鐖跺瓙鍏崇郴 + List<CalculateRule> calculateRulesToSave = new ArrayList<>(); + CalculateRule fu1 = new CalculateRule(); + CalculateRule fu2 = new CalculateRule(); + boolean fuNew = true; + 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 one = new CalculateRule(); + one.setParentId(0L); + one.setContractId(tContract.getId().intValue()); + one.setRuleName(calculateRule.getRuleName()); + one.setCreateTime(DateUtils.getNowDate()); + one.setDeleted(0); + calculateRuleService.save(one); + fu1 = one; + fuNew = true; + } + // 淇濆瓨绗簩灞傜埗瑙勫垯鑾峰彇绗簩灞傜埗id + if (StringUtils.isNotBlank(calculateRule.getRuleDesc())) { + CalculateRule two = new CalculateRule(); + two.setContractId(tContract.getId().intValue()); + two.setParentId(fu1.getId()); + two.setRuleDesc(calculateRule.getRuleDesc()); + two.setCreateTime(DateUtils.getNowDate()); + two.setDeleted(0); + calculateRuleService.save(two); + fu2 = two; + fuNew = false; + } + calculateRule.setContractId(tContract.getId().intValue()); + calculateRule.setCreateTime(DateUtils.getNowDate()); + calculateRule.setDeleted(0); + calculateRule.setParentId(fuNew ? fu1.getId() : fu2.getId()); + calculateRulesToSave.add(calculateRule); + } + // 鎵归噺淇濆瓨瑙勫垯 + calculateRuleService.saveBatch(calculateRulesToSave); + //鎵归噺淇濆瓨鑰冩牳缁撴灉搴旂敤瑙勫垯 + calculateMoneyRuleService.saveBatch(JSON.parseArray(tContract.getRuleList(), CalculateMoneyRule.class).stream().peek( + calculateMoneyRule -> calculateMoneyRule.setContractId(tContract.getId().intValue()) + ).collect(Collectors.toList())); + return AjaxResult.success("鎿嶄綔鎴愬姛"); + } + + @Override + public List<TContract> selectAll() { + return list(new LambdaQueryWrapper<TContract>() + .orderByDesc(TContract::getCreateTime)) + .stream().peek( + tContract -> tContract.setUnitName(ywUnitService.getById(tContract.getUnitId()).getUnitName()) + ).toList(); + } + + @Override + public List<CalculateMoneyRule> selectMoneyRules(Integer contractId) { + return calculateMoneyRuleService.selectMoneyRules(contractId); + } } -- Gitblit v1.8.0