From a8c87a18fed28e8cd06b20de9def11631f80ab96 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期三, 31 七月 2024 16:21:51 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java | 246 +++++++++++++++++++++++++++++++++++++------------
1 files changed, 185 insertions(+), 61 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 f3296a3..346b141 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,95 +1,219 @@
package com.ycl.platform.service.impl;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.read.listener.PageReadListener;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.alibaba.fastjson2.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+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.CustomCellWriteHandler;
+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.domain.query.ContractQuery;
+import com.ycl.platform.domain.vo.ContractVO;
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.system.Result;
+import com.ycl.system.page.PageUtil;
+import com.ycl.utils.DateUtils;
+import com.ycl.utils.StringUtils;
+import enumeration.ContractStatus;
+import enumeration.general.RuleDeductCategoryEnum;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.AllArgsConstructor;
+import lombok.SneakyThrows;
+import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;
+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.Arrays;
+import java.util.Date;
import java.util.List;
+import java.util.stream.Collectors;
/**
* 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice涓氬姟灞傚鐞�
- *
+ *
* @author ruoyi
* @date 2024-03-12
*/
@Service
-public class TContractServiceImpl extends ServiceImpl<TContractMapper, TContract> 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 CalculateMoneyRuleServiceImpl calculateMoneyRuleService;
+
@Override
- public TContract selectTContractById(Long id)
- {
- return tContractMapper.selectTContractById(id);
+ public void importTemplate(HttpServletResponse response) {
+ try {
+ 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");
+ EasyExcel.write(response.getOutputStream(), CalculateRule.class)
+ // 鑷�傚簲鍒楀
+ .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
+ // 涓嬫媺妗�
+ .registerWriteHandler(new CustomSheetWriteHandler(Arrays.asList("鎵f寚瀹氬垎鏁�", "鍒嗘暟涔樹互鏁伴噺", "闄や互鏁伴噺鍚庝箻浠ュ垎鏁�")))
+ .registerWriteHandler(new CustomCellWriteHandler())
+ // 鏍囨敞
+ .registerWriteHandler(new CommentWriteHandler())
+ .sheet("鍚堝悓瀵煎叆妯℃澘")
+ .doWrite(getExcelData());
+ } 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(1);
+ calculateRule1.setRuleName("瑙嗛骞冲潎鍦ㄧ嚎鐜�");
+ calculateRule1.setRuleCondition("鈮�98%");
+ calculateRule1.setMax(98D);
+ calculateRule1.setDeductCategory(RuleDeductCategoryEnum.DEDUCT_POINTS);
+ calculateRule1.setCalcFraction(0.00);
+ list.add(calculateRule1);
+ CalculateRule calculateRule2 = new CalculateRule();
+ calculateRule2.setRuleName("瑙嗛骞冲潎鍦ㄧ嚎鐜�");
+ calculateRule2.setRuleCondition("95%鈮よ棰戝钩鍧囧湪绾跨巼锛�98%");
+ calculateRule2.setMax(97D);
+ calculateRule2.setMin(95D);
+ calculateRule2.setDeductCategory(RuleDeductCategoryEnum.DEDUCT_POINTS);
+ calculateRule2.setCalcFraction(5.00);
+ list.add(calculateRule2);
+ CalculateRule calculateRule3 = new CalculateRule();
+ calculateRule3.setRuleName("瑙嗛骞冲潎鍦ㄧ嚎鐜�");
+ calculateRule3.setRuleCondition("90%鈮よ棰戝钩鍧囧湪绾跨巼锛�95%");
+ calculateRule3.setMax(94D);
+ calculateRule3.setMin(90D);
+ calculateRule3.setDeductCategory(RuleDeductCategoryEnum.DEDUCT_POINTS);
+ calculateRule3.setCalcFraction(10.00);
+ list.add(calculateRule3);
+ CalculateRule calculateRule33 = new CalculateRule();
+ calculateRule33.setRuleName("瑙嗛骞冲潎鍦ㄧ嚎鐜�");
+ calculateRule33.setRuleCondition("锛�90%");
+ calculateRule33.setMin(89D);
+ calculateRule33.setDeductCategory(RuleDeductCategoryEnum.DEDUCT_POINTS);
+ calculateRule33.setCalcFraction(10.00);
+ list.add(calculateRule33);
+ CalculateRule calculateRule4 = new CalculateRule();
+ calculateRule4.setId(2);
+ calculateRule4.setRuleName("鍓嶇鎰熺煡婧愭不鐞嗗伐浣�");
+ calculateRule4.setRuleCondition("鏃堕挓鍚屾锛堣秴杩嚶�3绉掍负涓嶅悎鏍硷級");
+ calculateRule4.setDeductCategory(RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY);
+ calculateRule4.setCalcFraction(0.1);
+ list.add(calculateRule4);
+ CalculateRule calculateRule7 = new CalculateRule();
+ calculateRule7.setRuleName("鍓嶇鎰熺煡婧愭不鐞嗗伐浣�");
+ calculateRule7.setRuleCondition("OSD鏍囪瘑");
+ calculateRule7.setDeductCategory(RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY);
+ calculateRule7.setCalcFraction(0.1);
+ list.add(calculateRule7);
+ CalculateRule calculateRule6 = new CalculateRule();
+ calculateRule6.setRuleName("鍓嶇鎰熺煡婧愭不鐞嗗伐浣�");
+ calculateRule6.setRuleCondition("涓�鏈轰竴妗�");
+ calculateRule6.setDeductCategory(RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY);
+ calculateRule6.setCalcFraction(0.1);
+ list.add(calculateRule6);
+ CalculateRule calculateRule5 = new CalculateRule();
+ calculateRule5.setId(3);
+ calculateRule5.setRuleName("鍚庡彴绯荤粺鐨勪繚闅�");
+ calculateRule5.setRuleCondition("鍗曟鏁呴殰鏃堕暱鑻ヨ秴鍑�72灏忔椂涓嶈冻144灏忔椂鐨勶紝姣忚秴鍑�12灏忔椂锛堜笉瓒�12灏忔椂鎸�12灏忔椂璁★級");
+ calculateRule5.setMax(144D);
+ calculateRule5.setMin(72D);
+ 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
+ @SneakyThrows
+ public AjaxResult importData(MultipartFile file, TContract tContract) {
+ // 淇濆瓨鍚堝悓
+ tContract.setCreateTime(DateUtils.getNowDate());
+ save(tContract);
+
+ // 鑾峰彇鍚堝悓Excel瑙勫垯
+ List<CalculateRule> list = new ArrayList<>();
+ EasyExcel.read(file.getInputStream(), CalculateRule.class, new PageReadListener<CalculateRule>(list::addAll)).sheet().doRead();
+
+ // 閬嶅巻鐖跺瓙鍏崇郴
+ List<CalculateRule> calculateRulesToSave = new ArrayList<>();
+ 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垎鏁板��");
+ }
+ // 淇濆瓨瑙勫垯
+ if (StringUtils.isNotBlank(calculateRule.getRuleName())) {
+ calculateRule.setContractId(tContract.getId().intValue());
+ calculateRule.setCreateTime(DateUtils.getNowDate());
+ calculateRule.setUpdateTime(DateUtils.getNowDate());
+ 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("鎿嶄綔鎴愬姛");
}
- /**
- * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆�
- *
- * @param tContract 銆愯濉啓鍔熻兘鍚嶇О銆�
- * @return 缁撴灉
- */
@Override
- public int updateTContract(TContract tContract)
- {
- return tContractMapper.updateTContract(tContract);
+ public Result selectAll(ContractQuery query) {
+ IPage<ContractVO> page = PageUtil.getPage(query, ContractVO.class);
+ baseMapper.getPage(page, query);
+ page.getRecords().stream().forEach(contract -> {
+ Date now = new Date();
+ if (now.before(contract.getStartTime())) {
+ contract.setStatus(ContractStatus.NOT_START);
+ } else if (now.after(contract.getEndTime())) {
+ contract.setStatus(ContractStatus.FINISHED);
+ } else {
+ contract.setStatus(ContractStatus.ACTIVE);
+ }
+ });
+ return Result.ok().data(page.getRecords()).total(page.getTotal());
}
- /**
- * 鎵归噺鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆�
- *
- * @param ids 闇�瑕佸垹闄ょ殑銆愯濉啓鍔熻兘鍚嶇О銆戜富閿�
- * @return 缁撴灉
- */
@Override
- public int deleteTContractByIds(Long[] ids)
- {
- return tContractMapper.deleteTContractByIds(ids);
+ public List<CalculateMoneyRule> selectMoneyRules(Integer contractId) {
+ return calculateMoneyRuleService.selectMoneyRules(contractId);
}
- /**
- * 鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆戜俊鎭�
- *
- * @param id 銆愯濉啓鍔熻兘鍚嶇О銆戜富閿�
- * @return 缁撴灉
- */
@Override
- public int deleteTContractById(Long id)
- {
- return tContractMapper.deleteTContractById(id);
+ public List<TContract> selectUsingContract() {
+ return new LambdaQueryChainWrapper<>(baseMapper)
+ .le(TContract::getStartTime, DateUtils.getDate())
+ .ge(TContract::getEndTime, DateUtils.getDate())
+ .list();
}
}
--
Gitblit v1.8.0