生成合同

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_client
- sys_oss_config
- ps_salary
- ps_salary_config
- ps_salary_contract
# MyBatisPlus配置
# 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.UserNameTranslationImpl
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;
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<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);
//所有合同的退款列表
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<PsContractPay> payList = payMapper.selectList(Wrappers.<PsContractPay>lambdaQuery().in(PsContractPay::getContractCode, codeList).
List<PsContractPay> payList = new ArrayList<>();
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.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<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("员工提成批处理结束");
@ -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<PsContractBusinessVo> list = businessService.selectBusinessList(List.of(pay.getContractCode()));
BigDecimal rate = new BigDecimal(cbStr);

View File

@ -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<ServiceScheduleVo> queryScheduleByCode(@NotNull String contractCode) {
public R<ServiceScheduleVo> queryScheduleByCode(@NotBlank String contractCode) {
return R.ok(psContractInfoService.queryScheduleByCode(contractCode));
}
//
// /**
// * 获取合同基本信息详细信息

View File

@ -66,12 +66,23 @@ public class PsSalaryConfigController extends BaseController {
@Log(title = "新增提成配置")
@SaCheckPermission("business:salaryConfig:add")
@PostMapping("/add")
public R<Void> add(PsSalaryConfigAddVo addVo) {
public R<Void> 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<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 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<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.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<Void> mainFinish(@NotNull Long id) {
psTaskMainService.finishMain(id);
contractInfoService.finish(psTaskMainService.finishMain(id));
return R.ok();
}

View File

@ -83,6 +83,13 @@ public class PsSalary extends TenantEntity {
*/
@TableLogic
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.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;

View File

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

View File

@ -38,7 +38,7 @@ public class PsSalaryConfigVo implements Serializable {
* 岗位id
*/
@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 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.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<PsContractInfo, PsC
})
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.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);
/**
* 查询符合条件的合同基本信息列表
*

View File

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

View File

@ -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<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
* @return
*/
void finishMain(Long id);
String finishMain(Long id);
/**
* 子任务完成
*

View File

@ -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<PsContractInfo> buildQueryWrapper(PsContractInfoQueryBo bo) {
QueryWrapper<PsContractInfo> qw = Wrappers.query();
//删除标志

View File

@ -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查询回款记录

View File

@ -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<PsSalaryConfig> buildQueryWrapper(PsSalaryConfigBo bo) {
QueryWrapper<PsSalaryConfig> 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<String,Map<String,Map<String,String>>> map = new HashMap<>();
Set<String> serviceTypeList = new HashSet<>();
Set<String> 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<String, Map<String,String>> project = CollectionUtils.isNotEmpty(map.get(serviceType))?map.get(serviceType):new HashMap<>();
Map<String,String> 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<PsSalaryConfig> 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.<PsSalaryConfig>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);
}
}
/**
* 校验并批量删除提成配置信息
*
* @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;
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<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
* @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();
}
/**
* 子任务完成

View File

@ -46,4 +46,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="queryContractList"/>
${ew.getCustomSqlSegment}
</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>

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>