From 586510e643625b09f08e7289d90c9d5df1a56304 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期五, 26 四月 2024 14:17:13 +0800 Subject: [PATCH] 字段调整 --- ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java | 238 ++++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 171 insertions(+), 67 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 dcf3c45..9ea9b05 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 @@ -1,94 +1,198 @@ package com.ycl.platform.service.impl; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.write.merge.LoopMergeStrategy; +import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ycl.handler.CommentWriteHandler; +import com.ycl.handler.CustomSheetWriteHandler; +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 org.springframework.beans.factory.annotation.Autowired; +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; /** * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice涓氬姟灞傚鐞� - * + * * @author ruoyi * @date 2024-03-12 */ @Service -public class TContractServiceImpl implements ITContractService -{ - @Autowired - private TContractMapper tContractMapper; +@AllArgsConstructor +public class TContractServiceImpl extends ServiceImpl<TContractMapper, TContract> implements ITContractService { - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆� - * - * @param id 銆愯濉啓鍔熻兘鍚嶇О銆戜富閿� - * @return 銆愯濉啓鍔熻兘鍚嶇О銆� - */ + private final ICalculateRuleService calculateRuleService; + private final YwUnitServiceImpl ywUnitService; + @Override - public TContract selectTContractById(Long id) - { - return tContractMapper.selectTContractById(id); + public void importTemplate(HttpServletResponse response) { + try { + List<CalculateRule> list = getExcelData(); + ArrayList<String> arrayList = new ArrayList<>(); + arrayList.add("鎵f寚瀹氬垎鏁�"); + arrayList.add("鍒嗘暟涔樹互鏁伴噺"); + arrayList.add("闄や互鏁伴噺鍚庝箻浠ュ垎鏁�"); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + String fileName = URLEncoder.encode("瀵煎叆鍚堝悓妯℃澘", StandardCharsets.UTF_8).replace("\\+", "%20"); + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + // 绗竴鍒椼�佺浜屽垪涓婁笅鍚堝苟3琛� + LoopMergeStrategy loopMergeStrategy1 = new LoopMergeStrategy(3, 0); + LoopMergeStrategy loopMergeStrategy2 = new LoopMergeStrategy(3, 1); + EasyExcel.write(response.getOutputStream(), CalculateRule.class) + .registerWriteHandler(loopMergeStrategy1) + .registerWriteHandler(loopMergeStrategy2) + // 鑷�傚簲鍒楀 + .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) + // 涓嬫媺妗� + .registerWriteHandler(new CustomSheetWriteHandler(arrayList)) + // 鏍囨敞 + .registerWriteHandler(new CommentWriteHandler()) + .sheet("鍚堝悓瀵煎叆妯℃澘").doWrite(list); + } catch (Exception e) { + throw new RuntimeException(e); + } } - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - * - * @param tContract 銆愯濉啓鍔熻兘鍚嶇О銆� - * @return 銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public List<TContract> selectTContractList(TContract tContract) - { - return tContractMapper.selectTContractList(tContract); + private List<CalculateRule> getExcelData() { + ArrayList<CalculateRule> list = new ArrayList<>(); + CalculateRule calculateRule1 = new CalculateRule(); + calculateRule1.setId(1L); + calculateRule1.setRuleName("瑙嗛骞冲潎鍦ㄧ嚎鐜�"); + calculateRule1.setRuleDesc("锛�1锛夎棰戝湪绾跨巼=瑙嗛鍦ㄧ嚎鏁伴噺梅鍓嶇鏈嶅姟閰嶇疆鏁帮紙搴旀墸闄や笉鍙姉鍔涙垨涓庝腑鏍囦汉鏈嶅姟鏃犲叧閫犳垚鐨勬帀绾块櫎澶栥�傦級"); + calculateRule1.setRuleCondition("鈮�98%"); + 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(RuleDeductCategoryEnum.DEDUCT_POINTS); + calculateRule2.setCalcFraction(5.00); + list.add(calculateRule2); + CalculateRule calculateRule3 = new CalculateRule(); + calculateRule3.setRuleDesc("锛�3锛夎棰戝湪绾跨巼淇濈暀鏁存暟骞朵笖鍚戜笅鍙栨暣銆�"); + calculateRule3.setRuleCondition("90%鈮よ棰戝钩鍧囧湪绾跨巼锛�95%"); + calculateRule3.setDeductCategory(RuleDeductCategoryEnum.DEDUCT_POINTS); + calculateRule3.setCalcFraction(10.00); + list.add(calculateRule3); + CalculateRule calculateRule4 = new CalculateRule(); + calculateRule4.setId(2L); + calculateRule4.setRuleName("鍓嶇鎰熺煡婧愭不鐞嗗伐浣�"); + calculateRule4.setRuleDesc("鏃堕挓鍚屾锛堣秴杩嚶�3绉掍负涓嶅悎鏍硷級"); + calculateRule4.setRuleCondition("瑙嗛鐩戞帶鎽勫儚鏈烘椂閽熶笉鍚屾锛�24灏忔椂鍐呮湭淇鐨�"); + calculateRule4.setDeductCategory(RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY); + calculateRule4.setCalcFraction(0.1); + list.add(calculateRule4); + CalculateRule calculateRule7 = new CalculateRule(); + calculateRule7.setRuleDesc("鈥︹�︹�︹��"); + calculateRule7.setRuleCondition("鈥︹�︹�︹��"); + list.add(calculateRule7); + CalculateRule calculateRule6 = new CalculateRule(); + calculateRule6.setRuleDesc("鈥︹�︹�︹��"); + calculateRule6.setRuleCondition("鈥︹�︹�︹��"); + list.add(calculateRule6); + CalculateRule calculateRule5 = new CalculateRule(); + calculateRule5.setId(3L); + calculateRule5.setRuleName("鍚庡彴绯荤粺鐨勪繚闅�"); + calculateRule5.setRuleDesc("鍦ㄤ釜鍒澶囨晠闅滀絾涓嶅奖鍝嶈鍔熻兘妯″潡鏁翠綋搴旂敤鎯呭喌涓嬶紝椤诲湪72灏忔椂浠ュ唴鎺掗櫎鏁呴殰銆�"); + calculateRule5.setRuleCondition("鍗曟鏁呴殰鏃堕暱鑻ヨ秴鍑�144灏忔椂浠ュ悗锛屾瘡瓒呭嚭12灏忔椂锛堜笉瓒�12灏忔椂鎸�12灏忔椂璁★級"); + calculateRule5.setDeductCategory(RuleDeductCategoryEnum.MULTIPLY_POINTS_AFTER_DIVIDING_QUANTITY); + calculateRule5.setCalcFraction(2.00); + calculateRule5.setCalcUnit(12); + list.add(calculateRule5); + return list; } - /** - * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆� - * - * @param tContract 銆愯濉啓鍔熻兘鍚嶇О銆� - * @return 缁撴灉 - */ @Override - public int insertTContract(TContract tContract) - { - return tContractMapper.insertTContract(tContract); + @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); + return AjaxResult.success("鎿嶄綔鎴愬姛"); } - /** - * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆� - * - * @param tContract 銆愯濉啓鍔熻兘鍚嶇О銆� - * @return 缁撴灉 - */ @Override - public int updateTContract(TContract tContract) - { - return tContractMapper.updateTContract(tContract); - } - - /** - * 鎵归噺鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆� - * - * @param ids 闇�瑕佸垹闄ょ殑銆愯濉啓鍔熻兘鍚嶇О銆戜富閿� - * @return 缁撴灉 - */ - @Override - public int deleteTContractByIds(Long[] ids) - { - return tContractMapper.deleteTContractByIds(ids); - } - - /** - * 鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆戜俊鎭� - * - * @param id 銆愯濉啓鍔熻兘鍚嶇О銆戜富閿� - * @return 缁撴灉 - */ - @Override - public int deleteTContractById(Long id) - { - return tContractMapper.deleteTContractById(id); + public List<TContract> selectAll() { + return list(new LambdaQueryWrapper<TContract>() + .orderByDesc(TContract::getCreateTime)) + .stream().peek( + tContract -> tContract.setUnitName(ywUnitService.getById(tContract.getUnitId()).getUnitName()) + ).toList(); } } -- Gitblit v1.8.0