diff --git a/pusong-admin/src/main/resources/application.yml b/pusong-admin/src/main/resources/application.yml index 41eacbd..bef9285 100644 --- a/pusong-admin/src/main/resources/application.yml +++ b/pusong-admin/src/main/resources/application.yml @@ -140,6 +140,9 @@ tenant: - sys_user_role - sys_client - sys_oss_config + - ps_salary + - ps_salary_config + - ps_salary_contract # MyBatisPlus配置 # https://baomidou.com/config/ diff --git a/pusong-common/pusong-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/pusong-common/pusong-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index cd5d883..38d7ef0 100644 --- a/pusong-common/pusong-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/pusong-common/pusong-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -4,3 +4,4 @@ com.pusong.common.translation.core.impl.DictTypeTranslationImpl com.pusong.common.translation.core.impl.OssUrlTranslationImpl com.pusong.common.translation.core.impl.UserNameTranslationImpl com.pusong.common.translation.core.impl.NicknameTranslationImpl +com.pusong.common.translation.core.impl.PostNameTranslationImpl diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/batch/BatchController.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/batch/BatchController.java new file mode 100644 index 0000000..d2594c8 --- /dev/null +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/batch/BatchController.java @@ -0,0 +1,27 @@ +package com.pusong.business.batch; + +import cn.dev33.satoken.annotation.SaIgnore; +import com.pusong.common.core.domain.R; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.time.LocalDate; + +@SaIgnore +@RestController +@RequestMapping("/business/approverRecord") +public class BatchController { + + @Autowired + private CalSalaryBatch calSalaryBatch; + + @GetMapping("/batch") + public R batch(){ + calSalaryBatch.setNow(LocalDate.of(2024,9,1)); + calSalaryBatch.execute(); + return R.ok(); + } +} diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/batch/CalSalaryBatch.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/batch/CalSalaryBatch.java index f1a070d..76455bd 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/batch/CalSalaryBatch.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/batch/CalSalaryBatch.java @@ -1,22 +1,17 @@ package com.pusong.business.batch; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.pusong.business.domain.PsContractInfo; -import com.pusong.business.domain.PsContractPay; -import com.pusong.business.domain.PsSalary; -import com.pusong.business.domain.PsSalaryConfig; +import com.pusong.business.domain.*; import com.pusong.business.domain.vo.PsContractBusinessDetailVo; import com.pusong.business.domain.vo.PsContractBusinessVo; import com.pusong.business.domain.vo.PsContractPayVo; import com.pusong.business.enums.CommonStatusEnum; import com.pusong.business.enums.ContractStatusEnum; import com.pusong.business.enums.PayStatusEnum; -import com.pusong.business.mapper.PsContractInfoMapper; -import com.pusong.business.mapper.PsContractPayMapper; -import com.pusong.business.mapper.PsSalaryConfigMapper; -import com.pusong.business.mapper.PsSalaryMapper; +import com.pusong.business.mapper.*; import com.pusong.business.service.IPsContractBusinessService; import com.pusong.common.core.utils.DateUtils; import com.pusong.common.core.utils.StringUtils; @@ -34,10 +29,7 @@ import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.time.LocalDate; import java.time.temporal.TemporalAdjusters; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -59,13 +51,22 @@ public class CalSalaryBatch { private PsSalaryMapper psSalaryMapper; @Resource private PsContractPayMapper payMapper; + + @Resource + private PsSalaryContractMapper salaryContractMapper; + LocalDate now = null; + + public void setNow(LocalDate now) { + this.now = now; + } + /** * 每月1日凌晨1点执行 */ @Scheduled(cron = "0 0 1 1 * ?") public void execute(){ log.info("员工提成批处理开始"); - LocalDate now = LocalDate.now(); + LocalDate now = this.now == null ? LocalDate.now(): this.now; LocalDate lastDayOfLastMonth = now.with(TemporalAdjusters.firstDayOfMonth());//这个月第一天0分0秒 LocalDate firstDayOfLastMonth = lastDayOfLastMonth.minusMonths(1);//上个月第一天0分0秒 @@ -105,15 +106,18 @@ public class CalSalaryBatch { if(post == null){continue;} log.info("查询员工岗位{}",post.getPostId()); //服务列表 - List codeList = finistMap.get(userId).stream().map(PsContractInfo::getContractCode).toList(); + List codeList = new ArrayList<>(finistMap.get(userId) == null ? new ArrayList<>() : finistMap.get(userId).stream().map(PsContractInfo::getContractCode).toList()); List busin = businessService.selectBusinessList(codeList); //所有合同的退款列表 - codeList.addAll(unfinistMap.get(userId).stream().map(PsContractInfo::getContractCode).toList()); + codeList.addAll(unfinistMap.get(userId) == null ? new ArrayList<>() : unfinistMap.get(userId).stream().map(PsContractInfo::getContractCode).toList()); log.info("进行计算提成计算"); BigDecimal salary = calSalary(busin, configMap.get(post.getPostId()),costMap.get(post.getPostId())); - List payList = payMapper.selectList(Wrappers.lambdaQuery().in(PsContractPay::getContractCode, codeList). - eq(PsContractPay::getPayStatus, PayStatusEnum.SUCCESS.getCode()).eq(PsContractPay::getBusinessType,"2")); + List payList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(codeList)){ + payList = payMapper.selectList(Wrappers.lambdaQuery().in(PsContractPay::getContractCode, codeList). + eq(PsContractPay::getPayStatus, PayStatusEnum.SUCCESS.getCode()).eq(PsContractPay::getBusinessType,"2")); + } //salary- 退费金额*服务项目最高提成 salary = salary.subtract(this.calReturnSalary(payList,configMap.get(post.getPostId()))); log.info("进行计算提成计算{}",salary); @@ -140,7 +144,29 @@ public class CalSalaryBatch { psSalary.setContractMoney(finishMoney.add(unFinishMoney)); psSalary.setFinistContractMoney(finishMoney); psSalary.setUnfinistContractMoney(unFinishMoney); + if(CollectionUtils.isNotEmpty(finistMap.get(userId))){ + psSalary.setFinishContractCode(finistMap.get(userId).stream().map(PsContractInfo::getContractCode).collect(Collectors.joining(","))); + } + if(CollectionUtils.isNotEmpty(unfinistMap.get(userId))){ + psSalary.setUnfinishContractCode(finistMap.get(userId).stream().map(PsContractInfo::getContractCode).collect(Collectors.joining(","))); + } psSalaryMapper.insert(psSalary); + List lis = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(finistMap.get(userId))) { + List fin = psContractInfoMapper.querySalaryListByCodes(new QueryWrapper().in("info.contract_code", finistMap.get(userId))); + if(CollectionUtils.isNotEmpty(fin)) { + fin.forEach(item->{item.setStatus("1");item.setSalaryId(psSalary.getId());}); + lis.addAll(fin); + } + } + if(CollectionUtils.isNotEmpty(unfinistMap.get(userId))) { + List unfin = psContractInfoMapper.querySalaryListByCodes(new QueryWrapper().in("info.contract_code", unfinistMap.get(userId))); + if(CollectionUtils.isNotEmpty(unfin)) { + unfin.forEach(item->{item.setStatus("2");item.setSalaryId(psSalary.getId());}); + lis.addAll(unfin); + } + } + salaryContractMapper.insertBatch(lis); } log.info("员工提成批处理结束"); @@ -160,6 +186,8 @@ public class CalSalaryBatch { String cbStr = "0.0"; String rateStr = "0.1"; + configMap = CollectionUtils.isEmpty(configMap)?new HashMap<>():configMap; + costMap = CollectionUtils.isEmpty(costMap)?new HashMap<>():costMap; BigDecimal salary = BigDecimal.ZERO; for(PsContractBusinessVo item : businessVo){ @@ -203,6 +231,7 @@ public class CalSalaryBatch { String cbStr = "0.0"; BigDecimal retur = BigDecimal.ZERO; if(CollectionUtils.isEmpty(payList)){return retur;} + configMap = configMap==null?new HashMap<>():configMap; for(PsContractPay pay : payList){ List list = businessService.selectBusinessList(List.of(pay.getContractCode())); BigDecimal rate = new BigDecimal(cbStr); diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsContractInfoController.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsContractInfoController.java index 68b1ef8..092c2f9 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsContractInfoController.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsContractInfoController.java @@ -5,6 +5,7 @@ import java.util.List; import cn.dev33.satoken.annotation.SaIgnore; import com.pusong.business.domain.bo.PsContractInfoQueryBo; import com.pusong.business.domain.vo.PsContractBusinessVo; +import com.pusong.business.domain.vo.PsSalaryContractVo; import com.pusong.business.domain.vo.ServiceScheduleVo; import com.pusong.business.service.IPsContractBusinessService; import com.pusong.common.core.validate.QueryGroup; @@ -185,12 +186,13 @@ public class PsContractInfoController extends BaseController { * @return */ @RepeatSubmit() - @Log(title = "免费派单") + @Log(title = "根据合同编码查询服务进度") @SaCheckPermission("business:task:list") @GetMapping("/queryScheduleByCode") - public R queryScheduleByCode(@NotNull String contractCode) { + public R queryScheduleByCode(@NotBlank String contractCode) { return R.ok(psContractInfoService.queryScheduleByCode(contractCode)); } + // // /** // * 获取合同基本信息详细信息 diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsSalaryConfigController.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsSalaryConfigController.java index 6bfd851..e478fb3 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsSalaryConfigController.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsSalaryConfigController.java @@ -66,12 +66,23 @@ public class PsSalaryConfigController extends BaseController { @Log(title = "新增提成配置") @SaCheckPermission("business:salaryConfig:add") @PostMapping("/add") - public R add(PsSalaryConfigAddVo addVo) { + public R add(@RequestBody PsSalaryConfigAddVo addVo) { psSalaryConfigService.add(addVo); return R.ok(); } - + /** + * 删除提成配置 + * + * @param code 主键串 + */ + @SaCheckPermission("business:salaryConfig:remove") + @Log(title = "提成配置", businessType = BusinessType.DELETE) + @DeleteMapping("/{code}") + public R remove(@NotEmpty(message = "编码不能为空") + @PathVariable String code) { + return toAjax(psSalaryConfigService.deleteWithValidByIds(code)); + } // /** // * 导出提成配置列表 diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsSalaryController.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsSalaryController.java index fbcfb83..59f932e 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsSalaryController.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsSalaryController.java @@ -3,6 +3,7 @@ package com.pusong.business.controller; import java.util.List; import cn.dev33.satoken.annotation.SaIgnore; +import com.pusong.business.domain.vo.PsSalaryContractVo; import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; @@ -47,6 +48,17 @@ public class PsSalaryController extends BaseController { return psSalaryService.queryPageList(bo, pageQuery); } + /** + * 提成关联合同查询 + * @param id 列表主键id + * @param status 1已完成合同 2未完成合同 (空查全部) + * @return + */ + @GetMapping("/queryContractPageList") + public TableDataInfo queryContractPageList(Long id,String status, PageQuery pageQuery) { + return psSalaryService.queryContractPageList(id,status, pageQuery); + } + // /** // * 导出员工提成提成列表 // */ diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsTaskController.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsTaskController.java index 4626919..9e5301b 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsTaskController.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsTaskController.java @@ -7,6 +7,7 @@ import com.pusong.business.domain.bo.MediaCompanySaveBo; import com.pusong.business.domain.bo.PsTaskQueryBo; import com.pusong.business.domain.vo.PsTaskAppointVo; import com.pusong.business.domain.vo.TaskPlanVo; +import com.pusong.business.service.IPsContractInfoService; import com.pusong.common.core.domain.R; import com.pusong.common.core.validate.QueryGroup; import com.pusong.common.idempotent.annotation.RepeatSubmit; @@ -43,7 +44,7 @@ import java.util.Map; public class PsTaskController extends BaseController { private final IPsTaskService psTaskMainService; - + private final IPsContractInfoService contractInfoService; /** * 查询主任务列表 */ @@ -118,7 +119,7 @@ public class PsTaskController extends BaseController { @SaCheckPermission("business:task:list") @GetMapping("/mainFinish") public R mainFinish(@NotNull Long id) { - psTaskMainService.finishMain(id); + contractInfoService.finish(psTaskMainService.finishMain(id)); return R.ok(); } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsSalary.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsSalary.java index 819d134..8b01d90 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsSalary.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsSalary.java @@ -83,6 +83,13 @@ public class PsSalary extends TenantEntity { */ @TableLogic private Long delFlag; - + /** + * 已完成合同编码 + */ + private String finishContractCode; + /** + * 未完成合同编码 + */ + private String unfinishContractCode; } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsSalaryContract.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsSalaryContract.java new file mode 100644 index 0000000..449be63 --- /dev/null +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsSalaryContract.java @@ -0,0 +1,95 @@ +package com.pusong.business.domain; + +import com.pusong.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 员工提成关联合同对象 ps_salary_contract + * + * @author wls + * @date 2024-09-02 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("ps_salary_contract") +public class PsSalaryContract extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 员工id + */ + private Long userId; + + /** + * 提成月份 + */ + private Date salaryRatioDate; + + /** + * 2逻辑删除 0 默认有效 + */ + @TableLogic + private Long delFlag; + + /** + * 合同编码 + */ + private String contractCode; + + /** + * 销售经理 + */ + private Long customManager; + + /** + * 客户名称 + */ + private String customName; + + /** + * 客户电话 + */ + private String customMobile; + + /** + * 公司名 + */ + private String companyName; + + /** + * 合同金额 + */ + private BigDecimal contractAmount; + + /** + * 服务开始时间 + */ + private Date serviceStartDate; + + /** + * 状态 1已完成2未完成 + */ + private String status; + + /** + * 关联提成表id + */ + private Long salaryId; + + +} diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsSalaryBo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsSalaryBo.java index cf7700c..625823c 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsSalaryBo.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsSalaryBo.java @@ -9,6 +9,8 @@ import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; + import java.math.BigDecimal; import java.util.Date; @@ -20,7 +22,6 @@ import java.util.Date; */ @Data @EqualsAndHashCode(callSuper = true) -@AutoMapper(target = PsSalary.class, reverseConvertGenerate = false) public class PsSalaryBo extends BaseEntity { /** @@ -32,14 +33,14 @@ public class PsSalaryBo extends BaseEntity { /** * 开始时间 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM") private Date startDate; /** * 结束时间 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM") private Date endDate; diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsSalaryConfigAddVo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsSalaryConfigAddVo.java index cb1b194..abea343 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsSalaryConfigAddVo.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsSalaryConfigAddVo.java @@ -26,11 +26,10 @@ public class PsSalaryConfigAddVo { /** * 岗位id */ - private Long postId; + private String postId; /** * 提成详细 */ - @NotEmpty private List salaryConfigVoList; } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsSalaryConfigVo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsSalaryConfigVo.java index 9206349..784c0ab 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsSalaryConfigVo.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsSalaryConfigVo.java @@ -38,7 +38,7 @@ public class PsSalaryConfigVo implements Serializable { * 岗位id */ @Translation(type = TransConstant.POST_ID_TO_NAME) - private Long postId; + private String postIds; /** * 服务项目编码 diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsSalaryContractVo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsSalaryContractVo.java new file mode 100644 index 0000000..3cc4bbd --- /dev/null +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsSalaryContractVo.java @@ -0,0 +1,90 @@ +package com.pusong.business.domain.vo; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.pusong.business.domain.PsSalaryContract; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.pusong.common.excel.annotation.ExcelDictFormat; +import com.pusong.common.excel.convert.ExcelDictConvert; +import com.pusong.common.translation.annotation.Translation; +import com.pusong.common.translation.constant.TransConstant; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 员工提成关联合同视图对象 ps_salary_contract + * + * @author wls + * @date 2024-09-02 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = PsSalaryContract.class) +public class PsSalaryContractVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 提成月份 + */ + private Date salaryRatioDate; + + /** + * 合同编码 + */ + @ExcelProperty(value = "合同编码") + private String contractCode; + + /** + * 销售经理 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME) + private Long customManager; + + /** + * 客户名称 + */ + @ExcelProperty(value = "客户名称") + private String customName; + + /** + * 客户电话 + */ + @ExcelProperty(value = "客户电话") + private String customMobile; + + /** + * 公司名 + */ + @ExcelProperty(value = "公司名") + private String companyName; + + /** + * 合同金额 + */ + @ExcelProperty(value = "合同金额") + private BigDecimal contractAmount; + + /** + * 服务开始时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm") + private Date serviceStartDate; + + +} diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsSalaryVo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsSalaryVo.java index 72ba9cf..d0a0195 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsSalaryVo.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsSalaryVo.java @@ -81,4 +81,12 @@ public class PsSalaryVo implements Serializable { * 未完成金额 */ private BigDecimal unfinistContractMoney; + /** + * 已完成合同编码 + */ + private String finishContractCode; + /** + * 未完成合同编码 + */ + private String unfinishContractCode; } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsContractInfoMapper.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsContractInfoMapper.java index 4839d95..932872e 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsContractInfoMapper.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsContractInfoMapper.java @@ -5,8 +5,10 @@ import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.pusong.business.domain.PsContractInfo; import com.pusong.business.domain.PsCustomInfo; +import com.pusong.business.domain.PsSalaryContract; import com.pusong.business.domain.vo.PsContractInfoVo; import com.pusong.business.domain.vo.PsCustomInfoVo; +import com.pusong.business.domain.vo.PsSalaryContractVo; import com.pusong.common.mybatis.annotation.DataColumn; import com.pusong.common.mybatis.annotation.DataPermission; import com.pusong.common.mybatis.core.mapper.BaseMapperPlus; @@ -35,4 +37,7 @@ public interface PsContractInfoMapper extends BaseMapperPlus selectContractList(@Param(Constants.WRAPPER) Wrapper queryWrapper); + + List querySalaryListByCodes(@Param(Constants.WRAPPER) Wrapper queryWrapper); + } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsSalaryContractMapper.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsSalaryContractMapper.java new file mode 100644 index 0000000..8b4cd02 --- /dev/null +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsSalaryContractMapper.java @@ -0,0 +1,15 @@ +package com.pusong.business.mapper; + +import com.pusong.business.domain.PsSalaryContract; +import com.pusong.business.domain.vo.PsSalaryContractVo; +import com.pusong.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 员工提成关联合同Mapper接口 + * + * @author wls + * @date 2024-09-02 + */ +public interface PsSalaryContractMapper extends BaseMapperPlus { + +} diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsContractInfoService.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsContractInfoService.java index 012ac2e..45d1f73 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsContractInfoService.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsContractInfoService.java @@ -4,6 +4,7 @@ import com.pusong.business.domain.PsContractInfo; import com.pusong.business.domain.bo.PsContractInfoQueryBo; import com.pusong.business.domain.vo.PsContractInfoVo; import com.pusong.business.domain.bo.PsContractInfoBo; +import com.pusong.business.domain.vo.PsSalaryContractVo; import com.pusong.business.domain.vo.ServiceScheduleVo; import com.pusong.business.enums.ContractStatusEnum; import com.pusong.common.mybatis.core.page.TableDataInfo; @@ -124,6 +125,8 @@ public interface IPsContractInfoService { * @param contractCode 合同编码 */ ServiceScheduleVo queryScheduleByCode(String contractCode); + + /** * 查询符合条件的合同基本信息列表 * diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsSalaryConfigService.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsSalaryConfigService.java index cfa6aa1..73d80b9 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsSalaryConfigService.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsSalaryConfigService.java @@ -75,12 +75,11 @@ public interface IPsSalaryConfigService { // */ // Boolean updateByBo(PsSalaryConfigBo bo); // -// /** -// * 校验并批量删除提成配置信息 -// * -// * @param ids 待删除的主键集合 -// * @param isValid 是否进行有效性校验 -// * @return 是否删除成功 -// */ -// Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + /** + * 校验并批量删除提成配置信息 + * + * @param code 模板编码 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(String code); } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsSalaryService.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsSalaryService.java index 00af71f..3e577d5 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsSalaryService.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsSalaryService.java @@ -1,5 +1,7 @@ package com.pusong.business.service; +import com.pusong.business.domain.PsSalaryContract; +import com.pusong.business.domain.vo.PsSalaryContractVo; import com.pusong.business.domain.vo.PsSalaryVo; import com.pusong.business.domain.bo.PsSalaryBo; import com.pusong.common.mybatis.core.page.TableDataInfo; @@ -27,6 +29,15 @@ public interface IPsSalaryService { */ TableDataInfo queryPageList(PsSalaryBo bo, PageQuery pageQuery); + /** + * 提成关联合同查询 + * @param id + * @param status + * @param pageQuery + * @return + */ + TableDataInfo queryContractPageList(Long id, String status, PageQuery pageQuery); + // /** // * 查询员工提成提成 // * diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsTaskService.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsTaskService.java index 863a11f..b6172d1 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsTaskService.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsTaskService.java @@ -93,7 +93,7 @@ public interface IPsTaskService { * @param id 任务主键id * @return */ - void finishMain(Long id); + String finishMain(Long id); /** * 子任务完成 * diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractInfoServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractInfoServiceImpl.java index 6b1fd12..e772ff9 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractInfoServiceImpl.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractInfoServiceImpl.java @@ -1,6 +1,7 @@ package com.pusong.business.service.impl; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.pusong.business.domain.*; @@ -560,6 +561,8 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService { serviceScheduleVo.setIsFinish(StringUtils.equals(ContractStatusEnum.SUCCESS.getCode(),contractInfo.getContractStatus())?1:0); return serviceScheduleVo; } + + private QueryWrapper buildQueryWrapper(PsContractInfoQueryBo bo) { QueryWrapper qw = Wrappers.query(); //删除标志 diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractPayServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractPayServiceImpl.java index d0e6d91..d52d676 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractPayServiceImpl.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractPayServiceImpl.java @@ -136,7 +136,7 @@ public class PsContractPayServiceImpl implements IPsContractPayService { baseMapper.insert(pay); //发起审批 ApproverService service = container.getService(ApproverTypeEnum.RETURN.getCode()); - service.apply(pay.getId()+"",pay.getContractCode(),payBo.getPayDesc(), pay.getMoney().stripTrailingZeros().toString()); + service.apply(pay.getId()+"",pay.getContractCode(),payBo.getPayDesc(), pay.getMoney().stripTrailingZeros().toPlainString()); } /** * 根据主键id查询回款记录 diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsSalaryConfigServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsSalaryConfigServiceImpl.java index ad5f111..4f086a1 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsSalaryConfigServiceImpl.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsSalaryConfigServiceImpl.java @@ -21,6 +21,7 @@ import com.pusong.business.domain.PsSalaryConfig; import com.pusong.business.mapper.PsSalaryConfigMapper; import com.pusong.business.service.IPsSalaryConfigService; +import java.math.BigDecimal; import java.util.*; /** @@ -55,10 +56,10 @@ public class PsSalaryConfigServiceImpl implements IPsSalaryConfigService { private QueryWrapper buildQueryWrapper(PsSalaryConfigBo bo) { QueryWrapper lqw = Wrappers.query(); lqw.select("template_code","max(template_name) template_name","GROUP_CONCAT(DISTINCT service_project SEPARATOR ',') service_project" - ,"GROUP_CONCAT(DISTINCT post_id SEPARATOR ',') post_id","max(create_by) create_by","max(create_time) create_time"); + ,"GROUP_CONCAT(DISTINCT post_id SEPARATOR ',') post_ids","max(create_by) create_by","max(create_time) create_time"); lqw.like(StringUtils.isNotBlank(bo.getTemplateName()),"template_name", bo.getTemplateName()); lqw.eq(StringUtils.isNotBlank(bo.getTemplateCode()),"template_code", bo.getTemplateCode()); - lqw.groupBy(bo.getTemplateCode()); + lqw.groupBy("template_code"); return lqw; } /** @@ -73,21 +74,28 @@ public class PsSalaryConfigServiceImpl implements IPsSalaryConfigService { //服务类型:服务项目:成本 // :提成比例 Map>> map = new HashMap<>(); + Set serviceTypeList = new HashSet<>(); + Set postIdList = new HashSet<>(); list.forEach(item->{ //服务类型 String serviceType = item.getServiceProject().split("_")[0]; //服务类型code拼接逗号分割 - vo.setServiceType(StringUtils.isBlank(vo.getServiceType())?serviceType:vo.getServiceType()+","+serviceType); + serviceTypeList.add(serviceType); //岗位id拼接 - vo.setPostId((StringUtils.isBlank(vo.getPostId())?"":vo.getPostId()+",")+item.getPostId()); + postIdList.add(item.getPostId()+""); +// vo.setServiceType(StringUtils.isBlank(vo.getServiceType())?serviceType:vo.getServiceType()+","+serviceType); +// //岗位id拼接 +// vo.setPostId((StringUtils.isBlank(vo.getPostId())?"":vo.getPostId()+",")+item.getPostId()); //服务项目:提成比例 Map> project = CollectionUtils.isNotEmpty(map.get(serviceType))?map.get(serviceType):new HashMap<>(); Map data = new HashMap<>(); - data.put("cost",item.getCost().stripTrailingZeros().toString()); - data.put("salaryRatio",item.getSalaryRatio().stripTrailingZeros().toString()); + data.put("cost",item.getCost().stripTrailingZeros().toPlainString()); + data.put("salaryRatio",item.getSalaryRatio().stripTrailingZeros().toPlainString()); project.put(item.getServiceProject(),data); map.put(serviceType,project); }); + vo.setServiceType(String.join(",",serviceTypeList)); + vo.setPostId(String.join(",",postIdList)); vo.setServiceTypeMap(map); vo.setTemplateCode(templateCode); vo.setTemplateName(list.get(0).getTemplateName()); @@ -102,17 +110,32 @@ public class PsSalaryConfigServiceImpl implements IPsSalaryConfigService { public void add(PsSalaryConfigAddVo addVo){ List list = MapstructUtils.convert(addVo.getSalaryConfigVoList(), PsSalaryConfig.class); String code = addVo.getTemplateCode() == null ? UUID.randomUUID().toString() : addVo.getTemplateCode(); - list.forEach(item->{ - item.setTemplateCode(code); - item.setTemplateName(addVo.getTemplateName()); - item.setPostId(addVo.getPostId()); - }); + if(StringUtils.isNotBlank(addVo.getTemplateCode())){//修改 - baseMapper.delete(Wrappers.lambdaQuery().eq(PsSalaryConfig::getTemplateCode, code)); - log.info("修改配置成功"); + baseMapper.delete(Wrappers.lambdaQuery().eq(PsSalaryConfig::getTemplateCode, code)); + log.info("修改配置成功"); + } + for (String post : addVo.getPostId().split(",")) { + list.forEach(item->{ + item.setId(null); + item.setTemplateCode(code); + item.setTemplateName(addVo.getTemplateName()); + item.setPostId(Long.valueOf(post)); + }); + baseMapper.insertBatch(list); } - baseMapper.insertBatch(list); } + /** + * 校验并批量删除提成配置信息 + * + * @param code 编码 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(String code) { + return baseMapper.delete(Wrappers.lambdaQuery().eq(PsSalaryConfig::getTemplateCode,code)) > 0; + } + // /** // * 查询提成配置 // * diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsSalaryServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsSalaryServiceImpl.java index e506d75..b3eaa8a 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsSalaryServiceImpl.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsSalaryServiceImpl.java @@ -1,5 +1,8 @@ package com.pusong.business.service.impl; +import com.pusong.business.domain.PsSalaryContract; +import com.pusong.business.domain.vo.PsSalaryContractVo; +import com.pusong.business.mapper.PsSalaryContractMapper; import com.pusong.common.core.utils.MapstructUtils; import com.pusong.common.mybatis.core.page.TableDataInfo; import com.pusong.common.mybatis.core.page.PageQuery; @@ -30,6 +33,7 @@ import java.util.Collection; public class PsSalaryServiceImpl implements IPsSalaryService { private final PsSalaryMapper baseMapper; + private final PsSalaryContractMapper salaryContractMapper; /** * 分页查询员工提成提成列表 @@ -51,7 +55,19 @@ public class PsSalaryServiceImpl implements IPsSalaryService { lqw.exists(StringUtils.isNotBlank(bo.getName()),"select 1 from sys_user su where su.user_id = ps_salary.user_id and su.nick_name like %"+bo.getName()+"%"); return lqw; } - + /** + * 提成关联合同查询 + * @param id + * @param status + * @param pageQuery + * @return + */ + public TableDataInfo queryContractPageList(Long id, String status, PageQuery pageQuery){ + Page result = salaryContractMapper.selectVoPage( pageQuery.build(),Wrappers.lambdaQuery() + .eq(PsSalaryContract::getSalaryId ,id) + .eq(StringUtils.isNotBlank(status),PsSalaryContract::getStatus,status)); + return TableDataInfo.build(result); + } // /** diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsTaskServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsTaskServiceImpl.java index 00d8953..233e3d7 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsTaskServiceImpl.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsTaskServiceImpl.java @@ -305,7 +305,7 @@ public class PsTaskServiceImpl implements IPsTaskService { * @param id 任务主键id * @return */ - public void finishMain(Long id){ + public String finishMain(Long id){ PsTaskMain main = baseMapper.selectById(id); if(!TaskStatusEnum.canFinish(main.getTaskStatus())){ throw new ServiceException("此任务无法执行此操作,请刷新页面后重新操作"); @@ -318,6 +318,7 @@ public class PsTaskServiceImpl implements IPsTaskService { } main.setTaskStatus(TaskStatusEnum.FINISH.getCode()); baseMapper.updateById(main); + return main.getContractCode(); } /** * 子任务完成 diff --git a/pusong-modules/pusong-business/src/main/resources/mapper/business/PsContractInfoMapper.xml b/pusong-modules/pusong-business/src/main/resources/mapper/business/PsContractInfoMapper.xml index d8907f0..18a14e4 100644 --- a/pusong-modules/pusong-business/src/main/resources/mapper/business/PsContractInfoMapper.xml +++ b/pusong-modules/pusong-business/src/main/resources/mapper/business/PsContractInfoMapper.xml @@ -46,4 +46,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ${ew.getCustomSqlSegment} + + + diff --git a/pusong-modules/pusong-business/src/main/resources/mapper/business/PsSalaryContractMapper.xml b/pusong-modules/pusong-business/src/main/resources/mapper/business/PsSalaryContractMapper.xml new file mode 100644 index 0000000..ff1c34a --- /dev/null +++ b/pusong-modules/pusong-business/src/main/resources/mapper/business/PsSalaryContractMapper.xml @@ -0,0 +1,7 @@ + + + + +