server/company/src/main/java/com/doumee/api/business/InsuranceApplyController.java
@@ -12,6 +12,7 @@ import com.doumee.service.business.InsuranceApplyService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.models.auth.In; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; server/company/src/main/java/com/doumee/api/business/MemberController.java
@@ -8,17 +8,20 @@ import com.doumee.core.model.PageWrap; import com.doumee.core.model.PageData; import com.doumee.core.utils.Constants; import com.doumee.dao.business.dto.MemberImport; import com.doumee.dao.business.dto.MemberQueryDTO; import com.doumee.dao.business.model.Member; import com.doumee.service.business.MemberService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.*; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.util.ArrayList; import java.util.List; @@ -109,4 +112,16 @@ } return ApiResponse.success(memberService.findListByDTO(memberQueryDTO)); } @ApiOperation("å¯¼å ¥æ¨¡æ¿") @PostMapping("/importExcel") @ApiImplicitParams({ @ApiImplicitParam(name = "file", value = "file", required = true, paramType = "query", dataType = "file", dataTypeClass = File.class), }) @RequiresPermissions("business:worktype:create") public ApiResponse<List<MemberImport>> importExcel (@ApiParam(value = "file") MultipartFile file) { return ApiResponse.success(memberService.importBatch(file)); } } server/platform/src/main/java/com/doumee/task/ScheduleTool.java
@@ -1,7 +1,9 @@ package com.doumee.task; import com.doumee.dao.business.model.InsuranceApply; import com.doumee.service.business.CompanyService; import com.doumee.service.business.InsuranceApplyService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; @@ -20,6 +22,11 @@ public class ScheduleTool { @Autowired private CompanyService companyService; @Autowired private InsuranceApplyService insuranceApplyService; /** * @throws Exception */ @@ -39,4 +46,17 @@ log.info("==============宿¶ä¸ä¼ å¾ ä¸ä¼ çä¼ä¸çµåå°ç« æ°æ®======end======="); } /** * 宿¶æ´æ°ä¿åéé¢ æ¯å¤©åæ¨ 12.05 åæ§è¡ * @throws Exception */ @Scheduled(cron = " 0 5 00 * * ?") public void updateApplyCurrentFee(){ log.info("==============宿¶æ´æ°ä¿åå®é éé¢=======start======"); insuranceApplyService.updateApplyCurrentFee(); log.info("==============宿¶æ´æ°ä¿åå®é éé¢======end======="); } } server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -3,6 +3,7 @@ import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.dao.business.model.Solutions; import io.swagger.models.auth.In; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -13,6 +14,8 @@ import java.math.BigDecimal; import java.net.URL; import java.net.URLDecoder; import java.time.LocalDate; import java.time.temporal.ChronoUnit; import java.util.*; import java.util.Date; import java.util.regex.Matcher; @@ -145,6 +148,36 @@ } return d.intValue(); } public static long getAgeByIdCard(String idCard){ int birthYear = Integer.parseInt(idCard.substring(6, 10)); int birthMonth = Integer.parseInt(idCard.substring(10, 12)); int birthDay = Integer.parseInt(idCard.substring(12, 14)); LocalDate birthDate = LocalDate.of(birthYear, birthMonth, birthDay); LocalDate currentDate = LocalDate.now(); long age = ChronoUnit.YEARS.between(birthDate, currentDate); return age; } public static Integer getSexByIdCard(String idCard){ Pattern pattern = Pattern.compile("\\d{17}[\\d|x]"); // å®ä¹èº«ä»½è¯å·ç æ ¼å¼çæ£åè¡¨è¾¾å¼ Matcher matcher = pattern.matcher(idCard); Integer sex = 1; if (matcher.matches()) { int genderCode = Integer.parseInt(idCard.substring(16, 17)); // ä»ç¬¬17ä½å¼å§æåæ§å«ç¼ç ï¼å¥æ°ä¸ºç·æ§ï¼å¶æ°ä¸ºå¥³æ§ï¼ if ((genderCode % 2 == 1)) { sex = 1; } else { sex = 2; } } else { sex = -1; } return sex; } /** * ç¶æ 0å·²ä¿åã1å¾ å®¡æ ¸ã2å®¡æ ¸éè¿ã3éåä¿®æ¹ã4å®¡æ ¸é©³åã5å¾ æå¡æºæç¡®è®¤ã6æå¡æºææç»ã7å·²åé æå¡æºæã8è¯æä¸ * ï¼æåä¸ä¼ 第ä¸ä»½æå¡èµæï¼ã9æå¡å®æã10å·²åé è¯åä¸å®¶ã11已宿ï¼ä¸å®¶ä¸ä¼ è¯åï¼ 12éåä¿®æ¹ä¸ 13 已宿éåä¿®æ¹ server/service/src/main/java/com/doumee/dao/business/dto/MemberImport.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,41 @@ package com.doumee.dao.business.dto; import com.baomidou.mybatisplus.annotation.TableField; import com.doumee.core.annotation.excel.ExcelColumn; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * å工信æ¯å¯¼å ¥è¡¨ * @author æ±è¹è¹ * @date 2024/01/16 10:03 */ @Data @ApiModel("å工信æ¯å¯¼å ¥") public class MemberImport { @ExcelColumn(name="å§å",value = "name") private String name; @ExcelColumn(name="身份è¯å·ç ",value = "idCard") private String idCard; @ExcelColumn(name="å¹´é¾",value = "age") private Integer age; @ApiModelProperty(value = "æ´¾é£åä½ä¸»é®") private Integer duId; @ApiModelProperty(value = "æ§å«") private Integer sex; @ApiModelProperty(value = "æå±å·¥ç§ä¸»é®") private Integer workTypeId; @ApiModelProperty(value = "æ´¾é£åä½åç§°") private String duName; @ApiModelProperty(value = "æå±å·¥ç§åç§°") private String workTypeName; } server/service/src/main/java/com/doumee/dao/business/join/ApplyChagneDetailJoinMapper.java
@@ -13,5 +13,5 @@ */ public interface ApplyChagneDetailJoinMapper extends MPJJoinMapper<ApplyChagneDetail> { void insertBatchSomeColumn(List<ApplyDetail> addList); void insertBatchSomeColumn(List<ApplyChagneDetail> addList); } server/service/src/main/java/com/doumee/dao/business/join/ApplyDetailJoinMapper.java
@@ -4,10 +4,14 @@ import com.doumee.dao.business.model.ApplyDetail; import com.github.yulichang.base.mapper.MPJJoinMapper; import java.util.List; /** * @author æ±è¹è¹ * @date 2024/01/16 10:03 */ public interface ApplyDetailJoinMapper extends MPJJoinMapper<ApplyDetail> { void insertBatchSomeColumn(List<ApplyDetail> addList); } server/service/src/main/java/com/doumee/service/business/InsuranceApplyService.java
@@ -119,6 +119,9 @@ Integer editBaoxiandan(InsuranceApply param); void updateApplyCurrentFee(); String getSignLink(Integer id); void dealSignResult(NotifyDataReq data); server/service/src/main/java/com/doumee/service/business/MemberService.java
@@ -2,8 +2,11 @@ import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.dao.business.dto.MemberImport; import com.doumee.dao.business.dto.MemberQueryDTO; import com.doumee.dao.business.model.Member; import org.springframework.web.multipart.MultipartFile; import java.util.List; /** @@ -101,4 +104,6 @@ List<Member> findListByDTO(MemberQueryDTO memberQueryDTO); List<MemberImport> importBatch(MultipartFile file); } server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
@@ -51,6 +51,9 @@ private InsuranceApplyMapper insuranceApplyMapper; @Autowired private CompanySolutionMapper companySolutionMapper; @Autowired private ApplyChangeJoinMapper applyChangeJoinMapper; @Autowired @@ -348,7 +351,7 @@ } } if(addList!=null && addList.size()>0){ applyChagneDetailJoinMapper.insertBatchSomeColumn(addList); applyDetailJoinMapper.insertBatchSomeColumn(addList); } if(totalFee.compareTo(new BigDecimal(0)) != 0){ //妿ä¿åéé¢åçç¼ç ï¼æ´æ°æ»ä¿åéé¢ @@ -453,6 +456,15 @@ if(Objects.isNull(solutions)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"æªæ¥è¯¢å°ä¿é©æ¹æ¡"); } CompanySolution companySolution = companySolutionMapper.selectOne(new QueryWrapper<CompanySolution>().lambda() .eq(CompanySolution::getCompanyId,loginUserInfo.getCompanyId()) .eq(CompanySolution::getSolutionBaseId,solutions.getId()) .eq(CompanySolution::getIsdeleted,Constants.ZERO) .last(" limit 1 ") ); if(Objects.isNull(companySolution)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"æªæ¥è¯¢å°ä¼ä¸åé ä¿é©æ¹æ¡ä¿¡æ¯"); } //ç³è¯·æ¶é´å¿ é¡»å¤äºä¿åçæ¶é´èå´å if (!(DateUtil.compareDate(applyChange.getValidTime(), insuranceApply.getStartTime()) >= Constants.ZERO && DateUtil.compareDate(insuranceApply.getEndTime(), applyChange.getValidTime()) >= Constants.ZERO)) { @@ -485,12 +497,18 @@ //å ä¿æ°æ® List<ApplyChagneDetail> addDetailList = applyChange.getAddDetailList(); if (CollectionUtils.isNotEmpty(addDetailList)) { if(companySolution.getCanAdd().equals(Constants.ZERO)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "该ä¼ä¸åé ä¿é©æ¹æ¡æ æ³è¿è¡å ä¿"); } this.addChangeDetail(applyChange,addDetailList,duWorktypeList,duSolutionList,insuranceApply,solutions,loginUserInfo); } //åä¿æ°æ® List<ApplyChagneDetail> delDetailList = applyChange.getDelDetailList(); if (CollectionUtils.isNotEmpty(delDetailList)) { if(companySolution.getCanReduce().equals(Constants.ZERO)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "该ä¼ä¸åé ä¿é©æ¹æ¡æ æ³è¿è¡å ä¿"); } this.delChangeDetail(applyChange,delDetailList,insuranceApply,solutions,loginUserInfo); } //æ¢åä¸å¡ server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
@@ -488,6 +488,7 @@ if(!CollectionUtils.isNotEmpty(duWorktypeList)){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"æ°æ®å¼å¸¸ï¼ä¿é©æ¹æ¡ä¸æªæ¥è¯¢å°å·¥ç§ä¿¡æ¯"); } if(CollectionUtils.isNotEmpty(applyDetailList)){ for (int i = 0; i < applyDetailList.size(); i++) { ApplyDetail applyDetail = applyDetailList.get(i); if(Objects.isNull(applyDetail) @@ -520,8 +521,10 @@ .collect(Collectors.toList()).size()<=Constants.ZERO){ throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"ã"+applyDetail.getMemberName()+"ãå工工ç§ä¿¡æ¯æªæ¥è¯¢å°ï¼"); } applyDetailMapper.insert(applyDetail); } applyDetailJoinMapper.insertBatchSomeColumn(applyDetailList); } //å卿¥å¿æ°æ® this.saveApplyLog(insuranceApply,insuranceApplyStatus,null); return insuranceApply.getId(); @@ -910,6 +913,48 @@ } /** * æ´æ°ä¿åå®é éé¢ */ @Override @Transactional(rollbackFor = {Exception.class}) public void updateApplyCurrentFee(){ List<InsuranceApply> insuranceApplyList = insuranceApplyMapper.selectList(new QueryWrapper<InsuranceApply>().lambda() .eq(InsuranceApply::getIsdeleted,Constants.ZERO) .eq(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey()) .ge(InsuranceApply::getStartTime,DateUtil.getDate(new Date(),"yyyy-MM-dd") + " 00:00:00") .le(InsuranceApply::getEndTime,DateUtil.getDate(new Date(),"yyyy-MM-dd") + " 23:59:59") ); if(CollectionUtils.isNotEmpty(insuranceApplyList)){ for (InsuranceApply insuranceApply:insuranceApplyList) { Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId()); if(Objects.isNull(solutions)){ continue; } BigDecimal sumAmount = BigDecimal.ZERO; List<ApplyDetail> applyDetailList = applyDetailMapper.selectList(new QueryWrapper<ApplyDetail>().lambda().eq(ApplyDetail::getApplyId,insuranceApply.getId())); if(CollectionUtils.isNotEmpty(applyDetailList)){ for (ApplyDetail applyDetail: applyDetailList) { applyDetail.setCurrentFee(Constants.countDetailFee(solutions,new Date(),applyDetail.getStartTime())); applyDetailMapper.updateById(applyDetail); sumAmount = sumAmount.add(applyDetail.getCurrentFee()); } } insuranceApply.setCurrentFee(sumAmount); insuranceApplyMapper.updateById(insuranceApply); } } } } server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -1,5 +1,8 @@ package com.doumee.service.business.impl; import com.doumee.core.annotation.excel.ExcelImporter; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.LoginUserInfo; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; @@ -7,7 +10,9 @@ import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.Utils; import com.doumee.dao.business.MemberMapper; import com.doumee.dao.business.dto.MemberImport; import com.doumee.dao.business.dto.MemberQueryDTO; import com.doumee.dao.business.dto.WorktypeImport; import com.doumee.dao.business.join.MemberJoinMapper; import com.doumee.dao.business.model.*; import com.doumee.service.business.MemberService; @@ -21,7 +26,9 @@ import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; @@ -230,4 +237,48 @@ @Override public List<MemberImport> importBatch(MultipartFile file){ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if(!loginUserInfo.getType().equals(Constants.ONE)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"éä¼ä¸äººåæ æ³è¿è¡è¯¥æä½"); } List<Member> list = memberJoinMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>() .selectAll(Member.class) .selectAs(DispatchUnit::getName,Member::getDuName) .selectAs(Worktype::getName,Member::getWorkTypeName) .leftJoin(DispatchUnit.class,DispatchUnit::getId,Member::getDuId) .leftJoin(Worktype.class,Worktype::getId,Member::getWorktypeId) .eq(Member::getCompanyId,loginUserInfo.getCompanyId()) .eq(Member::getIsdeleted,Constants.ZERO) ); ExcelImporter ie = null; List<MemberImport> dataList =null; try { ie = new ExcelImporter(file,0,0); dataList = ie.getDataList(MemberImport.class,null); } catch (Exception e) { e.printStackTrace(); } if(dataList == null || dataList.size() ==0){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对ä¸èµ·ï¼å½å ¥æ°æ®ä¸ºç©ºï¼"); } for(MemberImport model : dataList){ if(CollectionUtils.isNotEmpty(list)){ Member member = list.stream().filter(m->m.getIdcardNo().equals(model.getIdCard())).findAny().get(); if(!Objects.isNull(member)){ model.setWorkTypeId(member.getWorktypeId()); model.setWorkTypeName(member.getWorkTypeName()); model.setDuId(member.getDuId()); model.setDuName(member.getDuName()); model.setSex(member.getSex()); }else{ model.setSex(Constants.getSexByIdCard(model.getIdCard())); } } } return dataList; } }