生成合同

This commit is contained in:
1073413548 2024-09-02 18:06:27 +08:00
parent 7e74f38ac4
commit 5f7ade75ec
28 changed files with 441 additions and 56 deletions

View File

@ -140,6 +140,9 @@ tenant:
- sys_user_role - sys_user_role
- sys_client - sys_client
- sys_oss_config - sys_oss_config
- ps_salary
- ps_salary_config
- ps_salary_contract
# MyBatisPlus配置 # MyBatisPlus配置
# https://baomidou.com/config/ # https://baomidou.com/config/

View File

@ -4,3 +4,4 @@ com.pusong.common.translation.core.impl.DictTypeTranslationImpl
com.pusong.common.translation.core.impl.OssUrlTranslationImpl com.pusong.common.translation.core.impl.OssUrlTranslationImpl
com.pusong.common.translation.core.impl.UserNameTranslationImpl com.pusong.common.translation.core.impl.UserNameTranslationImpl
com.pusong.common.translation.core.impl.NicknameTranslationImpl com.pusong.common.translation.core.impl.NicknameTranslationImpl
com.pusong.common.translation.core.impl.PostNameTranslationImpl

View File

@ -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<Void> batch(){
calSalaryBatch.setNow(LocalDate.of(2024,9,1));
calSalaryBatch.execute();
return R.ok();
}
}

View File

@ -1,22 +1,17 @@
package com.pusong.business.batch; package com.pusong.business.batch;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pusong.business.domain.PsContractInfo; import com.pusong.business.domain.*;
import com.pusong.business.domain.PsContractPay;
import com.pusong.business.domain.PsSalary;
import com.pusong.business.domain.PsSalaryConfig;
import com.pusong.business.domain.vo.PsContractBusinessDetailVo; import com.pusong.business.domain.vo.PsContractBusinessDetailVo;
import com.pusong.business.domain.vo.PsContractBusinessVo; import com.pusong.business.domain.vo.PsContractBusinessVo;
import com.pusong.business.domain.vo.PsContractPayVo; import com.pusong.business.domain.vo.PsContractPayVo;
import com.pusong.business.enums.CommonStatusEnum; import com.pusong.business.enums.CommonStatusEnum;
import com.pusong.business.enums.ContractStatusEnum; import com.pusong.business.enums.ContractStatusEnum;
import com.pusong.business.enums.PayStatusEnum; import com.pusong.business.enums.PayStatusEnum;
import com.pusong.business.mapper.PsContractInfoMapper; import com.pusong.business.mapper.*;
import com.pusong.business.mapper.PsContractPayMapper;
import com.pusong.business.mapper.PsSalaryConfigMapper;
import com.pusong.business.mapper.PsSalaryMapper;
import com.pusong.business.service.IPsContractBusinessService; import com.pusong.business.service.IPsContractBusinessService;
import com.pusong.common.core.utils.DateUtils; import com.pusong.common.core.utils.DateUtils;
import com.pusong.common.core.utils.StringUtils; import com.pusong.common.core.utils.StringUtils;
@ -34,10 +29,7 @@ import org.springframework.stereotype.Component;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters; import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
@ -59,13 +51,22 @@ public class CalSalaryBatch {
private PsSalaryMapper psSalaryMapper; private PsSalaryMapper psSalaryMapper;
@Resource @Resource
private PsContractPayMapper payMapper; private PsContractPayMapper payMapper;
@Resource
private PsSalaryContractMapper salaryContractMapper;
LocalDate now = null;
public void setNow(LocalDate now) {
this.now = now;
}
/** /**
* 每月1日凌晨1点执行 * 每月1日凌晨1点执行
*/ */
@Scheduled(cron = "0 0 1 1 * ?") @Scheduled(cron = "0 0 1 1 * ?")
public void execute(){ public void execute(){
log.info("员工提成批处理开始"); log.info("员工提成批处理开始");
LocalDate now = LocalDate.now(); LocalDate now = this.now == null ? LocalDate.now(): this.now;
LocalDate lastDayOfLastMonth = now.with(TemporalAdjusters.firstDayOfMonth());//这个月第一天0分0秒 LocalDate lastDayOfLastMonth = now.with(TemporalAdjusters.firstDayOfMonth());//这个月第一天0分0秒
LocalDate firstDayOfLastMonth = lastDayOfLastMonth.minusMonths(1);//上个月第一天0分0秒 LocalDate firstDayOfLastMonth = lastDayOfLastMonth.minusMonths(1);//上个月第一天0分0秒
@ -105,15 +106,18 @@ public class CalSalaryBatch {
if(post == null){continue;} if(post == null){continue;}
log.info("查询员工岗位{}",post.getPostId()); log.info("查询员工岗位{}",post.getPostId());
//服务列表 //服务列表
List<String> codeList = finistMap.get(userId).stream().map(PsContractInfo::getContractCode).toList(); List<String> codeList = new ArrayList<>(finistMap.get(userId) == null ? new ArrayList<>() : finistMap.get(userId).stream().map(PsContractInfo::getContractCode).toList());
List<PsContractBusinessVo> busin = businessService.selectBusinessList(codeList); List<PsContractBusinessVo> 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("进行计算提成计算"); log.info("进行计算提成计算");
BigDecimal salary = calSalary(busin, configMap.get(post.getPostId()),costMap.get(post.getPostId())); BigDecimal salary = calSalary(busin, configMap.get(post.getPostId()),costMap.get(post.getPostId()));
List<PsContractPay> payList = payMapper.selectList(Wrappers.<PsContractPay>lambdaQuery().in(PsContractPay::getContractCode, codeList). List<PsContractPay> payList = new ArrayList<>();
eq(PsContractPay::getPayStatus, PayStatusEnum.SUCCESS.getCode()).eq(PsContractPay::getBusinessType,"2")); if(CollectionUtils.isNotEmpty(codeList)){
payList = payMapper.selectList(Wrappers.<PsContractPay>lambdaQuery().in(PsContractPay::getContractCode, codeList).
eq(PsContractPay::getPayStatus, PayStatusEnum.SUCCESS.getCode()).eq(PsContractPay::getBusinessType,"2"));
}
//salary- 退费金额*服务项目最高提成 //salary- 退费金额*服务项目最高提成
salary = salary.subtract(this.calReturnSalary(payList,configMap.get(post.getPostId()))); salary = salary.subtract(this.calReturnSalary(payList,configMap.get(post.getPostId())));
log.info("进行计算提成计算{}",salary); log.info("进行计算提成计算{}",salary);
@ -140,7 +144,29 @@ public class CalSalaryBatch {
psSalary.setContractMoney(finishMoney.add(unFinishMoney)); psSalary.setContractMoney(finishMoney.add(unFinishMoney));
psSalary.setFinistContractMoney(finishMoney); psSalary.setFinistContractMoney(finishMoney);
psSalary.setUnfinistContractMoney(unFinishMoney); 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); psSalaryMapper.insert(psSalary);
List<PsSalaryContract> lis = new ArrayList<>();
if(CollectionUtils.isNotEmpty(finistMap.get(userId))) {
List<PsSalaryContract> fin = psContractInfoMapper.querySalaryListByCodes(new QueryWrapper<PsContractInfo>().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<PsSalaryContract> unfin = psContractInfoMapper.querySalaryListByCodes(new QueryWrapper<PsContractInfo>().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("员工提成批处理结束"); log.info("员工提成批处理结束");
@ -160,6 +186,8 @@ public class CalSalaryBatch {
String cbStr = "0.0"; String cbStr = "0.0";
String rateStr = "0.1"; String rateStr = "0.1";
configMap = CollectionUtils.isEmpty(configMap)?new HashMap<>():configMap;
costMap = CollectionUtils.isEmpty(costMap)?new HashMap<>():costMap;
BigDecimal salary = BigDecimal.ZERO; BigDecimal salary = BigDecimal.ZERO;
for(PsContractBusinessVo item : businessVo){ for(PsContractBusinessVo item : businessVo){
@ -203,6 +231,7 @@ public class CalSalaryBatch {
String cbStr = "0.0"; String cbStr = "0.0";
BigDecimal retur = BigDecimal.ZERO; BigDecimal retur = BigDecimal.ZERO;
if(CollectionUtils.isEmpty(payList)){return retur;} if(CollectionUtils.isEmpty(payList)){return retur;}
configMap = configMap==null?new HashMap<>():configMap;
for(PsContractPay pay : payList){ for(PsContractPay pay : payList){
List<PsContractBusinessVo> list = businessService.selectBusinessList(List.of(pay.getContractCode())); List<PsContractBusinessVo> list = businessService.selectBusinessList(List.of(pay.getContractCode()));
BigDecimal rate = new BigDecimal(cbStr); BigDecimal rate = new BigDecimal(cbStr);

View File

@ -5,6 +5,7 @@ import java.util.List;
import cn.dev33.satoken.annotation.SaIgnore; import cn.dev33.satoken.annotation.SaIgnore;
import com.pusong.business.domain.bo.PsContractInfoQueryBo; import com.pusong.business.domain.bo.PsContractInfoQueryBo;
import com.pusong.business.domain.vo.PsContractBusinessVo; 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.domain.vo.ServiceScheduleVo;
import com.pusong.business.service.IPsContractBusinessService; import com.pusong.business.service.IPsContractBusinessService;
import com.pusong.common.core.validate.QueryGroup; import com.pusong.common.core.validate.QueryGroup;
@ -185,12 +186,13 @@ public class PsContractInfoController extends BaseController {
* @return * @return
*/ */
@RepeatSubmit() @RepeatSubmit()
@Log(title = "免费派单") @Log(title = "根据合同编码查询服务进度")
@SaCheckPermission("business:task:list") @SaCheckPermission("business:task:list")
@GetMapping("/queryScheduleByCode") @GetMapping("/queryScheduleByCode")
public R<ServiceScheduleVo> queryScheduleByCode(@NotNull String contractCode) { public R<ServiceScheduleVo> queryScheduleByCode(@NotBlank String contractCode) {
return R.ok(psContractInfoService.queryScheduleByCode(contractCode)); return R.ok(psContractInfoService.queryScheduleByCode(contractCode));
} }
// //
// /** // /**
// * 获取合同基本信息详细信息 // * 获取合同基本信息详细信息

View File

@ -66,12 +66,23 @@ public class PsSalaryConfigController extends BaseController {
@Log(title = "新增提成配置") @Log(title = "新增提成配置")
@SaCheckPermission("business:salaryConfig:add") @SaCheckPermission("business:salaryConfig:add")
@PostMapping("/add") @PostMapping("/add")
public R<Void> add(PsSalaryConfigAddVo addVo) { public R<Void> add(@RequestBody PsSalaryConfigAddVo addVo) {
psSalaryConfigService.add(addVo); psSalaryConfigService.add(addVo);
return R.ok(); return R.ok();
} }
/**
* 删除提成配置
*
* @param code 主键串
*/
@SaCheckPermission("business:salaryConfig:remove")
@Log(title = "提成配置", businessType = BusinessType.DELETE)
@DeleteMapping("/{code}")
public R<Void> remove(@NotEmpty(message = "编码不能为空")
@PathVariable String code) {
return toAjax(psSalaryConfigService.deleteWithValidByIds(code));
}
// /** // /**
// * 导出提成配置列表 // * 导出提成配置列表

View File

@ -3,6 +3,7 @@ package com.pusong.business.controller;
import java.util.List; import java.util.List;
import cn.dev33.satoken.annotation.SaIgnore; import cn.dev33.satoken.annotation.SaIgnore;
import com.pusong.business.domain.vo.PsSalaryContractVo;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
@ -47,6 +48,17 @@ public class PsSalaryController extends BaseController {
return psSalaryService.queryPageList(bo, pageQuery); return psSalaryService.queryPageList(bo, pageQuery);
} }
/**
* 提成关联合同查询
* @param id 列表主键id
* @param status 1已完成合同 2未完成合同 空查全部
* @return
*/
@GetMapping("/queryContractPageList")
public TableDataInfo<PsSalaryContractVo> queryContractPageList(Long id,String status, PageQuery pageQuery) {
return psSalaryService.queryContractPageList(id,status, pageQuery);
}
// /** // /**
// * 导出员工提成提成列表 // * 导出员工提成提成列表
// */ // */

View File

@ -7,6 +7,7 @@ import com.pusong.business.domain.bo.MediaCompanySaveBo;
import com.pusong.business.domain.bo.PsTaskQueryBo; import com.pusong.business.domain.bo.PsTaskQueryBo;
import com.pusong.business.domain.vo.PsTaskAppointVo; import com.pusong.business.domain.vo.PsTaskAppointVo;
import com.pusong.business.domain.vo.TaskPlanVo; 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.domain.R;
import com.pusong.common.core.validate.QueryGroup; import com.pusong.common.core.validate.QueryGroup;
import com.pusong.common.idempotent.annotation.RepeatSubmit; import com.pusong.common.idempotent.annotation.RepeatSubmit;
@ -43,7 +44,7 @@ import java.util.Map;
public class PsTaskController extends BaseController { public class PsTaskController extends BaseController {
private final IPsTaskService psTaskMainService; private final IPsTaskService psTaskMainService;
private final IPsContractInfoService contractInfoService;
/** /**
* 查询主任务列表 * 查询主任务列表
*/ */
@ -118,7 +119,7 @@ public class PsTaskController extends BaseController {
@SaCheckPermission("business:task:list") @SaCheckPermission("business:task:list")
@GetMapping("/mainFinish") @GetMapping("/mainFinish")
public R<Void> mainFinish(@NotNull Long id) { public R<Void> mainFinish(@NotNull Long id) {
psTaskMainService.finishMain(id); contractInfoService.finish(psTaskMainService.finishMain(id));
return R.ok(); return R.ok();
} }

View File

@ -83,6 +83,13 @@ public class PsSalary extends TenantEntity {
*/ */
@TableLogic @TableLogic
private Long delFlag; private Long delFlag;
/**
* 已完成合同编码
*/
private String finishContractCode;
/**
* 未完成合同编码
*/
private String unfinishContractCode;
} }

View File

@ -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;
}

View File

@ -9,6 +9,8 @@ import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
@ -20,7 +22,6 @@ import java.util.Date;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@AutoMapper(target = PsSalary.class, reverseConvertGenerate = false)
public class PsSalaryBo extends BaseEntity { 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; private Date startDate;
/** /**
* 结束时间 * 结束时间
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM")
private Date endDate; private Date endDate;

View File

@ -26,11 +26,10 @@ public class PsSalaryConfigAddVo {
/** /**
* 岗位id * 岗位id
*/ */
private Long postId; private String postId;
/** /**
* 提成详细 * 提成详细
*/ */
@NotEmpty
private List<SalaryConfigVo> salaryConfigVoList; private List<SalaryConfigVo> salaryConfigVoList;
} }

View File

@ -38,7 +38,7 @@ public class PsSalaryConfigVo implements Serializable {
* 岗位id * 岗位id
*/ */
@Translation(type = TransConstant.POST_ID_TO_NAME) @Translation(type = TransConstant.POST_ID_TO_NAME)
private Long postId; private String postIds;
/** /**
* 服务项目编码 * 服务项目编码

View File

@ -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;
}

View File

@ -81,4 +81,12 @@ public class PsSalaryVo implements Serializable {
* 未完成金额 * 未完成金额
*/ */
private BigDecimal unfinistContractMoney; private BigDecimal unfinistContractMoney;
/**
* 已完成合同编码
*/
private String finishContractCode;
/**
* 未完成合同编码
*/
private String unfinishContractCode;
} }

View File

@ -5,8 +5,10 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pusong.business.domain.PsContractInfo; import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.PsCustomInfo; 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.PsContractInfoVo;
import com.pusong.business.domain.vo.PsCustomInfoVo; 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.DataColumn;
import com.pusong.common.mybatis.annotation.DataPermission; import com.pusong.common.mybatis.annotation.DataPermission;
import com.pusong.common.mybatis.core.mapper.BaseMapperPlus; import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
@ -35,4 +37,7 @@ public interface PsContractInfoMapper extends BaseMapperPlus<PsContractInfo, PsC
}) })
List<PsContractInfoVo> selectContractList(@Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper); List<PsContractInfoVo> selectContractList(@Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);
List<PsSalaryContract> querySalaryListByCodes(@Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);
} }

View File

@ -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<PsSalaryContract, PsSalaryContractVo> {
}

View File

@ -4,6 +4,7 @@ import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.bo.PsContractInfoQueryBo; import com.pusong.business.domain.bo.PsContractInfoQueryBo;
import com.pusong.business.domain.vo.PsContractInfoVo; import com.pusong.business.domain.vo.PsContractInfoVo;
import com.pusong.business.domain.bo.PsContractInfoBo; 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.domain.vo.ServiceScheduleVo;
import com.pusong.business.enums.ContractStatusEnum; import com.pusong.business.enums.ContractStatusEnum;
import com.pusong.common.mybatis.core.page.TableDataInfo; import com.pusong.common.mybatis.core.page.TableDataInfo;
@ -124,6 +125,8 @@ public interface IPsContractInfoService {
* @param contractCode 合同编码 * @param contractCode 合同编码
*/ */
ServiceScheduleVo queryScheduleByCode(String contractCode); ServiceScheduleVo queryScheduleByCode(String contractCode);
/** /**
* 查询符合条件的合同基本信息列表 * 查询符合条件的合同基本信息列表
* *

View File

@ -75,12 +75,11 @@ public interface IPsSalaryConfigService {
// */ // */
// Boolean updateByBo(PsSalaryConfigBo bo); // Boolean updateByBo(PsSalaryConfigBo bo);
// //
// /** /**
// * 校验并批量删除提成配置信息 * 校验并批量删除提成配置信息
// * *
// * @param ids 待删除的主键集合 * @param code 模板编码
// * @param isValid 是否进行有效性校验 * @return 是否删除成功
// * @return 是否删除成功 */
// */ Boolean deleteWithValidByIds(String code);
// Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
} }

View File

@ -1,5 +1,7 @@
package com.pusong.business.service; 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.vo.PsSalaryVo;
import com.pusong.business.domain.bo.PsSalaryBo; import com.pusong.business.domain.bo.PsSalaryBo;
import com.pusong.common.mybatis.core.page.TableDataInfo; import com.pusong.common.mybatis.core.page.TableDataInfo;
@ -27,6 +29,15 @@ public interface IPsSalaryService {
*/ */
TableDataInfo<PsSalaryVo> queryPageList(PsSalaryBo bo, PageQuery pageQuery); TableDataInfo<PsSalaryVo> queryPageList(PsSalaryBo bo, PageQuery pageQuery);
/**
* 提成关联合同查询
* @param id
* @param status
* @param pageQuery
* @return
*/
TableDataInfo<PsSalaryContractVo> queryContractPageList(Long id, String status, PageQuery pageQuery);
// /** // /**
// * 查询员工提成提成 // * 查询员工提成提成
// * // *

View File

@ -93,7 +93,7 @@ public interface IPsTaskService {
* @param id 任务主键id * @param id 任务主键id
* @return * @return
*/ */
void finishMain(Long id); String finishMain(Long id);
/** /**
* 子任务完成 * 子任务完成
* *

View File

@ -1,6 +1,7 @@
package com.pusong.business.service.impl; package com.pusong.business.service.impl;
import com.alibaba.fastjson.JSON; 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.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.pusong.business.domain.*; 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); serviceScheduleVo.setIsFinish(StringUtils.equals(ContractStatusEnum.SUCCESS.getCode(),contractInfo.getContractStatus())?1:0);
return serviceScheduleVo; return serviceScheduleVo;
} }
private QueryWrapper<PsContractInfo> buildQueryWrapper(PsContractInfoQueryBo bo) { private QueryWrapper<PsContractInfo> buildQueryWrapper(PsContractInfoQueryBo bo) {
QueryWrapper<PsContractInfo> qw = Wrappers.query(); QueryWrapper<PsContractInfo> qw = Wrappers.query();
//删除标志 //删除标志

View File

@ -136,7 +136,7 @@ public class PsContractPayServiceImpl implements IPsContractPayService {
baseMapper.insert(pay); baseMapper.insert(pay);
//发起审批 //发起审批
ApproverService service = container.getService(ApproverTypeEnum.RETURN.getCode()); 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查询回款记录 * 根据主键id查询回款记录

View File

@ -21,6 +21,7 @@ import com.pusong.business.domain.PsSalaryConfig;
import com.pusong.business.mapper.PsSalaryConfigMapper; import com.pusong.business.mapper.PsSalaryConfigMapper;
import com.pusong.business.service.IPsSalaryConfigService; import com.pusong.business.service.IPsSalaryConfigService;
import java.math.BigDecimal;
import java.util.*; import java.util.*;
/** /**
@ -55,10 +56,10 @@ public class PsSalaryConfigServiceImpl implements IPsSalaryConfigService {
private QueryWrapper<PsSalaryConfig> buildQueryWrapper(PsSalaryConfigBo bo) { private QueryWrapper<PsSalaryConfig> buildQueryWrapper(PsSalaryConfigBo bo) {
QueryWrapper<PsSalaryConfig> lqw = Wrappers.query(); QueryWrapper<PsSalaryConfig> lqw = Wrappers.query();
lqw.select("template_code","max(template_name) template_name","GROUP_CONCAT(DISTINCT service_project SEPARATOR ',') service_project" 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.like(StringUtils.isNotBlank(bo.getTemplateName()),"template_name", bo.getTemplateName());
lqw.eq(StringUtils.isNotBlank(bo.getTemplateCode()),"template_code", bo.getTemplateCode()); lqw.eq(StringUtils.isNotBlank(bo.getTemplateCode()),"template_code", bo.getTemplateCode());
lqw.groupBy(bo.getTemplateCode()); lqw.groupBy("template_code");
return lqw; return lqw;
} }
/** /**
@ -73,21 +74,28 @@ public class PsSalaryConfigServiceImpl implements IPsSalaryConfigService {
//服务类型服务项目成本 //服务类型服务项目成本
// 提成比例 // 提成比例
Map<String,Map<String,Map<String,String>>> map = new HashMap<>(); Map<String,Map<String,Map<String,String>>> map = new HashMap<>();
Set<String> serviceTypeList = new HashSet<>();
Set<String> postIdList = new HashSet<>();
list.forEach(item->{ list.forEach(item->{
//服务类型 //服务类型
String serviceType = item.getServiceProject().split("_")[0]; String serviceType = item.getServiceProject().split("_")[0];
//服务类型code拼接逗号分割 //服务类型code拼接逗号分割
vo.setServiceType(StringUtils.isBlank(vo.getServiceType())?serviceType:vo.getServiceType()+","+serviceType); serviceTypeList.add(serviceType);
//岗位id拼接 //岗位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<String, Map<String,String>> project = CollectionUtils.isNotEmpty(map.get(serviceType))?map.get(serviceType):new HashMap<>(); Map<String, Map<String,String>> project = CollectionUtils.isNotEmpty(map.get(serviceType))?map.get(serviceType):new HashMap<>();
Map<String,String> data = new HashMap<>(); Map<String,String> data = new HashMap<>();
data.put("cost",item.getCost().stripTrailingZeros().toString()); data.put("cost",item.getCost().stripTrailingZeros().toPlainString());
data.put("salaryRatio",item.getSalaryRatio().stripTrailingZeros().toString()); data.put("salaryRatio",item.getSalaryRatio().stripTrailingZeros().toPlainString());
project.put(item.getServiceProject(),data); project.put(item.getServiceProject(),data);
map.put(serviceType,project); map.put(serviceType,project);
}); });
vo.setServiceType(String.join(",",serviceTypeList));
vo.setPostId(String.join(",",postIdList));
vo.setServiceTypeMap(map); vo.setServiceTypeMap(map);
vo.setTemplateCode(templateCode); vo.setTemplateCode(templateCode);
vo.setTemplateName(list.get(0).getTemplateName()); vo.setTemplateName(list.get(0).getTemplateName());
@ -102,17 +110,32 @@ public class PsSalaryConfigServiceImpl implements IPsSalaryConfigService {
public void add(PsSalaryConfigAddVo addVo){ public void add(PsSalaryConfigAddVo addVo){
List<PsSalaryConfig> list = MapstructUtils.convert(addVo.getSalaryConfigVoList(), PsSalaryConfig.class); List<PsSalaryConfig> list = MapstructUtils.convert(addVo.getSalaryConfigVoList(), PsSalaryConfig.class);
String code = addVo.getTemplateCode() == null ? UUID.randomUUID().toString() : addVo.getTemplateCode(); 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())){//修改 if(StringUtils.isNotBlank(addVo.getTemplateCode())){//修改
baseMapper.delete(Wrappers.<PsSalaryConfig>lambdaQuery().eq(PsSalaryConfig::getTemplateCode, code)); baseMapper.delete(Wrappers.<PsSalaryConfig>lambdaQuery().eq(PsSalaryConfig::getTemplateCode, code));
log.info("修改配置成功"); 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.<PsSalaryConfig>lambdaQuery().eq(PsSalaryConfig::getTemplateCode,code)) > 0;
}
// /** // /**
// * 查询提成配置 // * 查询提成配置
// * // *

View File

@ -1,5 +1,8 @@
package com.pusong.business.service.impl; 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.core.utils.MapstructUtils;
import com.pusong.common.mybatis.core.page.TableDataInfo; import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.mybatis.core.page.PageQuery; import com.pusong.common.mybatis.core.page.PageQuery;
@ -30,6 +33,7 @@ import java.util.Collection;
public class PsSalaryServiceImpl implements IPsSalaryService { public class PsSalaryServiceImpl implements IPsSalaryService {
private final PsSalaryMapper baseMapper; 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()+"%"); 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; return lqw;
} }
/**
* 提成关联合同查询
* @param id
* @param status
* @param pageQuery
* @return
*/
public TableDataInfo<PsSalaryContractVo> queryContractPageList(Long id, String status, PageQuery pageQuery){
Page<PsSalaryContractVo> result = salaryContractMapper.selectVoPage( pageQuery.build(),Wrappers.<PsSalaryContract>lambdaQuery()
.eq(PsSalaryContract::getSalaryId ,id)
.eq(StringUtils.isNotBlank(status),PsSalaryContract::getStatus,status));
return TableDataInfo.build(result);
}
// /** // /**

View File

@ -305,7 +305,7 @@ public class PsTaskServiceImpl implements IPsTaskService {
* @param id 任务主键id * @param id 任务主键id
* @return * @return
*/ */
public void finishMain(Long id){ public String finishMain(Long id){
PsTaskMain main = baseMapper.selectById(id); PsTaskMain main = baseMapper.selectById(id);
if(!TaskStatusEnum.canFinish(main.getTaskStatus())){ if(!TaskStatusEnum.canFinish(main.getTaskStatus())){
throw new ServiceException("此任务无法执行此操作,请刷新页面后重新操作"); throw new ServiceException("此任务无法执行此操作,请刷新页面后重新操作");
@ -318,6 +318,7 @@ public class PsTaskServiceImpl implements IPsTaskService {
} }
main.setTaskStatus(TaskStatusEnum.FINISH.getCode()); main.setTaskStatus(TaskStatusEnum.FINISH.getCode());
baseMapper.updateById(main); baseMapper.updateById(main);
return main.getContractCode();
} }
/** /**
* 子任务完成 * 子任务完成

View File

@ -46,4 +46,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="queryContractList"/> <include refid="queryContractList"/>
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </select>
<select id="querySalaryListByCodes" resultType="com.pusong.business.domain.PsSalaryContract">
select
info.contract_code
,info.custom_manager
,cus.custom_name
,cus.custom_mobile
,com.company_name
,info.contract_amount
,info.start_service_date service_start_date
from ps_contract_info info
left join ps_custom_info cus on info.custom_id = cus.id
left join ps_company_info com on info.company_id = com.id
${ew.getCustomSqlSegment}
</select>
</mapper> </mapper>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pusong.business.mapper.PsSalaryContractMapper">
</mapper>