生成合同
This commit is contained in:
parent
1abd107478
commit
f42d14706b
@ -4,16 +4,22 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
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.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.service.IPsContractBusinessService;
|
||||
import com.pusong.common.core.utils.DateUtils;
|
||||
import com.pusong.common.core.utils.StringUtils;
|
||||
import com.pusong.system.domain.SysUser;
|
||||
import com.pusong.system.domain.SysUserPost;
|
||||
import com.pusong.system.mapper.SysUserMapper;
|
||||
@ -31,7 +37,9 @@ import java.time.temporal.TemporalAdjusters;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
|
||||
@Component
|
||||
@ -47,7 +55,10 @@ public class CalSalaryBatch {
|
||||
private SysUserPostMapper sysUserPostMapper;
|
||||
@Resource
|
||||
private PsSalaryConfigMapper psSalaryConfigMapper;
|
||||
@Resource
|
||||
private PsSalaryMapper psSalaryMapper;
|
||||
@Resource
|
||||
private PsContractPayMapper payMapper;
|
||||
/**
|
||||
* 每月1日凌晨1点执行
|
||||
*/
|
||||
@ -65,21 +76,26 @@ public class CalSalaryBatch {
|
||||
|
||||
log.info("查询本月所有已完成的合同");
|
||||
List<PsContractInfo> contractInfos = psContractInfoMapper.selectList(Wrappers.<PsContractInfo>lambdaQuery()
|
||||
.eq(PsContractInfo::getContractStatus, ContractStatusEnum.SUCCESS.getCode())
|
||||
.ne(PsContractInfo::getIsCancel, CommonStatusEnum.SUCCESS.getCode())
|
||||
.between(PsContractInfo::getFinishDate, firstDayOfLastMonth, lastDayOfLastMonth));
|
||||
log.info("查询本月所有已完成的合同{}", contractInfos.size());
|
||||
log.info("查询本月所有的合同{}", contractInfos.size());
|
||||
if(CollectionUtils.isEmpty(contractInfos)){
|
||||
log.info("本月无已完成合同");
|
||||
contractInfos = new ArrayList<>();
|
||||
}
|
||||
//转换 客户经理有的合同编码
|
||||
Map<Long, List<String>> map = contractInfos.stream().collect(Collectors.groupingBy(PsContractInfo::getCustomManager,
|
||||
Collectors.mapping(PsContractInfo::getContractCode,Collectors.toList())));
|
||||
List<PsContractInfo> finists = contractInfos.stream().filter(item -> StringUtils.equals(item.getContractStatus(), ContractStatusEnum.SUCCESS.getCode())).toList();
|
||||
List<PsContractInfo> unfinists = contractInfos.stream().filter(item -> !StringUtils.equals(item.getContractStatus(), ContractStatusEnum.SUCCESS.getCode())).toList();
|
||||
log.info("本月已完成合同数量{},未完成数量{}", finists.size(),unfinists.size());
|
||||
|
||||
//转换 客户经理有的合同编码
|
||||
Map<Long, List<PsContractInfo>> finistMap = finists.stream().collect(Collectors.groupingBy(PsContractInfo::getCustomManager,Collectors.toList()));
|
||||
Map<Long, List<PsContractInfo>> unfinistMap = unfinists.stream().collect(Collectors.groupingBy(PsContractInfo::getCustomManager,Collectors.toList()));;
|
||||
//查询所有岗位配置信息
|
||||
List<PsSalaryConfig> configs = psSalaryConfigMapper.selectList();
|
||||
Map<Long, Map<String, BigDecimal>> configMap = configs.stream().collect(Collectors.groupingBy(PsSalaryConfig::getPostId,
|
||||
Collectors.toMap(PsSalaryConfig::getServiceProject, PsSalaryConfig::getSalaryRatio)));
|
||||
Map<Long, Map<String, BigDecimal>> costMap = configs.stream().collect(Collectors.groupingBy(PsSalaryConfig::getPostId,
|
||||
Collectors.toMap(PsSalaryConfig::getServiceProject, PsSalaryConfig::getCost)));
|
||||
//循环计算每个员工的提成
|
||||
for (SysUser user : list){
|
||||
Long userId = user.getUserId();
|
||||
@ -89,9 +105,17 @@ public class CalSalaryBatch {
|
||||
if(post == null){continue;}
|
||||
log.info("查询员工岗位{}",post.getPostId());
|
||||
//服务列表
|
||||
List<PsContractBusinessVo> busin = businessService.selectBusinessList(map.get(userId));
|
||||
List<String> codeList = finistMap.get(userId).stream().map(PsContractInfo::getContractCode).toList();
|
||||
List<PsContractBusinessVo> busin = businessService.selectBusinessList(codeList);
|
||||
//所有合同的退款列表
|
||||
codeList.addAll(unfinistMap.get(userId).stream().map(PsContractInfo::getContractCode).toList());
|
||||
|
||||
log.info("进行计算提成计算");
|
||||
BigDecimal salary = calSalary(busin, configMap.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).
|
||||
eq(PsContractPay::getPayStatus, PayStatusEnum.SUCCESS.getCode()).eq(PsContractPay::getBusinessType,"2"));
|
||||
//salary- 退费金额*服务项目最高提成
|
||||
salary = salary.subtract(this.calReturnSalary(payList,configMap.get(post.getPostId())));
|
||||
log.info("进行计算提成计算{}",salary);
|
||||
log.info("进行存表");
|
||||
PsSalary psSalary = new PsSalary();
|
||||
@ -100,37 +124,67 @@ public class CalSalaryBatch {
|
||||
psSalary.setSalaryDate(DateUtils.toDate(firstDayOfLastMonth));
|
||||
psSalary.setPostId(post.getPostId());
|
||||
psSalary.setUserId(userId);
|
||||
// psSalaryMapper.insert(psSalary);
|
||||
//已完成合同数量
|
||||
int finishNum = CollectionUtils.isEmpty(finistMap.get(userId))?0:finistMap.get(userId).size();
|
||||
//未完成合同数量
|
||||
int unFinishNum = CollectionUtils.isEmpty(unfinistMap.get(userId))?0:unfinistMap.get(userId).size();
|
||||
psSalary.setContractNum(finishNum+unFinishNum);
|
||||
psSalary.setFinistContractNum(finishNum);
|
||||
psSalary.setUnfinistContractNum(unFinishNum);
|
||||
//已完成合同金额
|
||||
BigDecimal finishMoney = CollectionUtils.isEmpty(finistMap.get(userId))?BigDecimal.ZERO:
|
||||
finistMap.get(userId).stream().map(PsContractInfo::getContractAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
//未完成合同金额
|
||||
BigDecimal unFinishMoney = CollectionUtils.isEmpty(unfinistMap.get(userId))?BigDecimal.ZERO:
|
||||
unfinistMap.get(userId).stream().map(PsContractInfo::getContractAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);;
|
||||
psSalary.setContractMoney(finishMoney.add(unFinishMoney));
|
||||
psSalary.setFinistContractMoney(finishMoney);
|
||||
psSalary.setUnfinistContractMoney(unFinishMoney);
|
||||
psSalaryMapper.insert(psSalary);
|
||||
}
|
||||
|
||||
log.info("员工提成批处理结束");
|
||||
}
|
||||
|
||||
/**
|
||||
* (服务项目1收费-服务项目1成本)*服务项目1提成比例+(服务项目2收费-服务项目2成本)*服务项目2提成比例
|
||||
* +(服务项目3收费-服务项目3成本)*服务项目3提成比例
|
||||
*
|
||||
* @param businessVo 服务项目
|
||||
* @param configMap 配置map
|
||||
* @param costMap 成本map
|
||||
* @return
|
||||
*/
|
||||
private BigDecimal calSalary(List<PsContractBusinessVo> businessVo,Map<String, BigDecimal> configMap){
|
||||
private BigDecimal calSalary(List<PsContractBusinessVo> businessVo,Map<String, BigDecimal> configMap,
|
||||
Map<String, BigDecimal> costMap){
|
||||
String cbStr = "0.0";
|
||||
String rateStr = "0.1";
|
||||
|
||||
BigDecimal salary = BigDecimal.ZERO;
|
||||
for(PsContractBusinessVo item : businessVo){
|
||||
|
||||
//如果详情没有填写金额的话按照详情中最低的提成比例进行计算(按照详情算)
|
||||
if(item.getDetailVoList().get(0).getAmount() == null
|
||||
|| BigDecimal.ZERO.compareTo(item.getDetailVoList().get(0).getAmount()) == 0){
|
||||
BigDecimal rate = new BigDecimal("0.1");
|
||||
BigDecimal rate = new BigDecimal(cbStr);
|
||||
BigDecimal cb = new BigDecimal(rateStr);
|
||||
for (PsContractBusinessDetailVo detail:item.getDetailVoList()){
|
||||
BigDecimal rateConfig = configMap.get(detail.getBusinessProject()) == null?new BigDecimal("0.1"):configMap.get(detail.getBusinessProject());
|
||||
rate = rate.compareTo(rateConfig)>0?rate:rateConfig;
|
||||
rate = rate.compareTo(rateConfig)<0?rate:rateConfig;
|
||||
cb = cb.add(costMap.get(detail.getBusinessProject()) == null ? new BigDecimal(cbStr):costMap.get(detail.getBusinessProject()));
|
||||
}
|
||||
//服务类型金额
|
||||
BigDecimal amount = item.getBusinessAmount();
|
||||
//服务类型金额 - 成本
|
||||
BigDecimal amount = item.getBusinessAmount().subtract(cb);
|
||||
// ×比例
|
||||
salary = salary.add(amount.multiply(rate));
|
||||
}else{//(按照类型算)
|
||||
for (PsContractBusinessDetailVo detail:item.getDetailVoList()){
|
||||
//比例
|
||||
BigDecimal rateConfig = configMap.get(detail.getBusinessProject()) == null?new BigDecimal("0.1"):configMap.get(detail.getBusinessProject());
|
||||
salary = salary.add(detail.getAmount().multiply(rateConfig));
|
||||
//成本
|
||||
BigDecimal rateCost = costMap.get(detail.getBusinessProject()) == null ? new BigDecimal(cbStr):costMap.get(detail.getBusinessProject());
|
||||
//(项目金额-成本)) *比例
|
||||
salary = salary.add(detail.getAmount().subtract(rateCost).multiply(rateConfig));
|
||||
}
|
||||
}
|
||||
|
||||
@ -138,4 +192,28 @@ public class CalSalaryBatch {
|
||||
return salary;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 算退费金额
|
||||
* @param payList
|
||||
* @param configMap
|
||||
* @return
|
||||
*/
|
||||
private BigDecimal calReturnSalary(List<PsContractPay> payList,Map<String, BigDecimal> configMap){
|
||||
String cbStr = "0.0";
|
||||
BigDecimal retur = BigDecimal.ZERO;
|
||||
if(CollectionUtils.isEmpty(payList)){return retur;}
|
||||
for(PsContractPay pay : payList){
|
||||
List<PsContractBusinessVo> list = businessService.selectBusinessList(List.of(pay.getContractCode()));
|
||||
BigDecimal rate = new BigDecimal(cbStr);
|
||||
for(PsContractBusinessVo item : list){
|
||||
for (PsContractBusinessDetailVo detail:item.getDetailVoList()){
|
||||
BigDecimal rateConfig = configMap.get(detail.getBusinessProject()) == null?new BigDecimal("0.1"):configMap.get(detail.getBusinessProject());
|
||||
rate = rate.compareTo(rateConfig)>0?rate:rateConfig;
|
||||
}
|
||||
}
|
||||
retur = retur.add(pay.getMoney().multiply(rate));
|
||||
}
|
||||
return retur;
|
||||
}
|
||||
}
|
||||
|
@ -87,6 +87,18 @@ public class PsContractOperateController extends BaseController {
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 回传合同
|
||||
*/
|
||||
@SaCheckPermission("business:contractOperate:confirm")
|
||||
@PostMapping(value = "/confirm", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
||||
public R<Void> confirm(@RequestPart("file") MultipartFile file,@NotBlank String contractCode )throws Exception {
|
||||
operateService.confirm( file, contractCode);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//
|
||||
|
@ -0,0 +1,49 @@
|
||||
package com.pusong.business.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.pusong.business.domain.bo.PsCustomCallbackBo;
|
||||
import com.pusong.business.domain.bo.PsCustomInfoBo;
|
||||
import com.pusong.business.domain.bo.PsCustomPriceBo;
|
||||
import com.pusong.business.domain.vo.PsCustomInfoVo;
|
||||
import com.pusong.business.domain.vo.PsCustomerRecordVo;
|
||||
import com.pusong.business.service.IPsCustomInfoService;
|
||||
import com.pusong.common.core.domain.R;
|
||||
import com.pusong.common.core.validate.AddGroup;
|
||||
import com.pusong.common.core.validate.EditGroup;
|
||||
import com.pusong.common.idempotent.annotation.RepeatSubmit;
|
||||
import com.pusong.common.log.annotation.Log;
|
||||
import com.pusong.common.log.enums.BusinessType;
|
||||
import com.pusong.common.mybatis.core.page.PageQuery;
|
||||
import com.pusong.common.mybatis.core.page.TableDataInfo;
|
||||
import com.pusong.common.web.core.BaseController;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 客户基本信息
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2024-07-25
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/business/home")
|
||||
public class PsHomeController extends BaseController {
|
||||
|
||||
private final IPsCustomInfoService psCustomInfoService;
|
||||
/**
|
||||
* 查询登陆人下所有的客户名称和id
|
||||
*/
|
||||
@SaCheckPermission("business:customInfo:list")
|
||||
@GetMapping("/listByLoginUser")
|
||||
public R<List<PsCustomInfoVo>> listByLoginUser() {
|
||||
return R.ok(psCustomInfoService.listByLoginUser());
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -2,6 +2,7 @@ package com.pusong.business.controller;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.pusong.business.domain.bo.PsSalaryConfigAddVo;
|
||||
import com.pusong.business.domain.vo.PsSalaryConfigInfoVo;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
@ -56,6 +57,17 @@ public class PsSalaryConfigController extends BaseController {
|
||||
return R.ok(psSalaryConfigService.queryByTemplateCode(templateCode));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增提成配置
|
||||
*/
|
||||
@Log(title = "新增提成配置")
|
||||
@SaCheckPermission("business:salaryConfig:add")
|
||||
@PostMapping("/add")
|
||||
public R<Void> add(PsSalaryConfigAddVo addVo) {
|
||||
psSalaryConfigService.add(addVo);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// /**
|
||||
|
@ -10,6 +10,7 @@ import com.pusong.common.core.domain.R;
|
||||
import com.pusong.common.core.validate.QueryGroup;
|
||||
import com.pusong.common.log.annotation.Log;
|
||||
import com.pusong.common.log.enums.BusinessType;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@ -75,7 +76,7 @@ public class PsTaskController extends BaseController {
|
||||
@Log(title = "根据任务id查询任务的公司信息和资料信息")
|
||||
@SaCheckPermission("business:task:list")
|
||||
@GetMapping("/info")
|
||||
public R<PsTaskMainVo> info(@NotNull Long id) {
|
||||
public R<PsTaskMainVo> info(@NotBlank String id) {
|
||||
return R.ok(psTaskMainService.queryInfo(id));
|
||||
}
|
||||
|
||||
|
@ -55,4 +55,12 @@ public class ServiceConfigController {
|
||||
configService.delete(dictCode);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据合同编码查询资料配置信息
|
||||
*/
|
||||
@PostMapping("/getByContractCode")
|
||||
public R<List<String>> getByContractCode(String contractCode) {
|
||||
return R.ok(configService.getByContractCode(contractCode));
|
||||
}
|
||||
}
|
||||
|
@ -146,6 +146,9 @@ public class PsContractInfo extends TenantEntity {
|
||||
* 合同完成时间
|
||||
*/
|
||||
private Date finishDate;
|
||||
|
||||
/**
|
||||
* 确认单
|
||||
*/
|
||||
private Long confirmOssid;
|
||||
|
||||
}
|
||||
|
@ -37,7 +37,10 @@ public class PsSalaryConfig extends TenantEntity {
|
||||
* 服务项目编码
|
||||
*/
|
||||
private String serviceProject;
|
||||
|
||||
/**
|
||||
* 成本
|
||||
*/
|
||||
private BigDecimal cost;
|
||||
/**
|
||||
* 提成比例
|
||||
*/
|
||||
|
@ -0,0 +1,36 @@
|
||||
package com.pusong.business.domain.bo;
|
||||
|
||||
import com.pusong.business.domain.PsSalary;
|
||||
import com.pusong.business.domain.PsSalaryConfig;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode
|
||||
@AutoMapper(target = PsSalaryConfig.class)
|
||||
public class PsSalaryConfigAddVo {
|
||||
|
||||
/**
|
||||
* 模板编码
|
||||
*/
|
||||
private String templateCode;
|
||||
/**
|
||||
* 模板名称
|
||||
*/
|
||||
private String templateName;
|
||||
/**
|
||||
* 岗位id
|
||||
*/
|
||||
private Long postId;
|
||||
|
||||
/**
|
||||
* 提成详细
|
||||
*/
|
||||
@NotEmpty
|
||||
private List<SalaryConfigVo> salaryConfigVoList;
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package com.pusong.business.domain.bo;
|
||||
|
||||
import com.pusong.business.domain.PsSalaryConfig;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode
|
||||
@AutoMapper(target = PsSalaryConfig.class)
|
||||
public class SalaryConfigVo {
|
||||
|
||||
/**
|
||||
* 服务项目编码
|
||||
*/
|
||||
private String serviceProject;
|
||||
/**
|
||||
* 成本
|
||||
*/
|
||||
private BigDecimal cost;
|
||||
/**
|
||||
* 提成比例
|
||||
*/
|
||||
private BigDecimal salaryRatio;
|
||||
}
|
@ -208,4 +208,10 @@ public class PsContractInfoVo implements Serializable {
|
||||
* 发票ossid
|
||||
*/
|
||||
private String invoiceOssid;
|
||||
|
||||
/**
|
||||
* 确认单
|
||||
*/
|
||||
private Long confirmOssid;
|
||||
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@ -66,6 +67,7 @@ public class PsCustomerRecordVo implements Serializable {
|
||||
/**
|
||||
* 销售经理
|
||||
*/
|
||||
@Translation(type = TransConstant.USER_ID_TO_NICKNAME)
|
||||
private String customManager;
|
||||
/**
|
||||
* 所属区域
|
||||
@ -104,7 +106,7 @@ public class PsCustomerRecordVo implements Serializable {
|
||||
/**
|
||||
* 当前服务人名字
|
||||
*/
|
||||
@Translation(type = TransConstant.USER_ID_TO_NICKNAME,mapper = "executor")
|
||||
@Translation(type = TransConstant.USER_ID_TO_NICKNAME,mapper = "executors")
|
||||
private String executorName;
|
||||
|
||||
/**
|
||||
@ -112,6 +114,24 @@ public class PsCustomerRecordVo implements Serializable {
|
||||
*/
|
||||
private String signDesc;
|
||||
|
||||
/**
|
||||
* 合同完成日期
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
|
||||
private Date finishDate;
|
||||
|
||||
/**
|
||||
* 审批状态
|
||||
*/
|
||||
private String approverStatus;
|
||||
|
||||
/**
|
||||
* 客户创建时间
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
|
||||
private Date createTime;
|
||||
/**
|
||||
* 合同总金额
|
||||
*/
|
||||
private BigDecimal contractAmount;
|
||||
}
|
||||
|
@ -57,5 +57,5 @@ public class PsSalaryConfigInfoVo implements Serializable {
|
||||
/**
|
||||
* 服务类型Map
|
||||
*/
|
||||
private Map<String,Map<String,Object>> serviceTypeMap;
|
||||
private Map<String,Map<String,Map<String,String>>> serviceTypeMap;
|
||||
}
|
||||
|
@ -6,6 +6,8 @@ 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;
|
||||
|
||||
@ -37,7 +39,13 @@ public class PsSalaryVo implements Serializable {
|
||||
/**
|
||||
* 员工id
|
||||
*/
|
||||
@Translation(type = TransConstant.USER_ID_TO_NICKNAME)
|
||||
private Long userId;
|
||||
/**
|
||||
* 员工岗位
|
||||
*/
|
||||
@Translation(type = TransConstant.POST_ID_TO_NAME)
|
||||
private Long postId;
|
||||
|
||||
/**
|
||||
* 员工提成金额
|
||||
@ -49,5 +57,28 @@ public class PsSalaryVo implements Serializable {
|
||||
*/
|
||||
private String salaryDate;
|
||||
|
||||
|
||||
/**
|
||||
* 合同数量
|
||||
*/
|
||||
private Integer contractNum;
|
||||
/**
|
||||
* 已完成数量
|
||||
*/
|
||||
private Integer finistContractNum;
|
||||
/**
|
||||
* 未完成数量
|
||||
*/
|
||||
private Integer unfinistContractNum;
|
||||
/**
|
||||
* 合同总金额
|
||||
*/
|
||||
private BigDecimal contractMoney;
|
||||
/**
|
||||
* 已完成金额
|
||||
*/
|
||||
private BigDecimal finistContractMoney;
|
||||
/**
|
||||
* 未完成金额
|
||||
*/
|
||||
private BigDecimal unfinistContractMoney;
|
||||
}
|
||||
|
@ -125,4 +125,9 @@ public class PsTaskMainVo implements Serializable {
|
||||
* 特勤是否派单1是0否
|
||||
*/
|
||||
private String secAppo;
|
||||
/**
|
||||
* 任务备注
|
||||
*/
|
||||
private String taskDesc;
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,7 @@ import java.util.List;
|
||||
public enum TaskStatusEnum {
|
||||
INIT("10","任务初始化(待派单)"),
|
||||
ING("20","进行中"),
|
||||
OA("25","完成审批中"),
|
||||
// OA("25","完成审批中"),
|
||||
FINISH("30","完成"),
|
||||
PAUSE("40","暂停"),
|
||||
CANCEL("50","作废"),
|
||||
@ -56,7 +56,7 @@ public enum TaskStatusEnum {
|
||||
public static Boolean canFinish(String taskStatus){
|
||||
//不能点:作废 完成 审批中
|
||||
if(StringUtils.equals(taskStatus,CANCEL.getCode()) || StringUtils.equals(taskStatus,FINISH.getCode())
|
||||
|| StringUtils.equals(taskStatus,OA.getCode())|| StringUtils.equals(taskStatus,CANCELAPPO.getCode())){
|
||||
|| /*StringUtils.equals(taskStatus,OA.getCode())||*/ StringUtils.equals(taskStatus,CANCELAPPO.getCode())){
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@ -70,6 +70,7 @@ public enum TaskStatusEnum {
|
||||
@AllArgsConstructor
|
||||
public enum AppointStatusEnum {
|
||||
ING("20","进行中"),
|
||||
OA("25","完成审批中"),
|
||||
FINISH("30","完成"),
|
||||
PAUSE("40","暂停"),
|
||||
CANCEL("50","作废");
|
||||
|
@ -1,17 +1,8 @@
|
||||
package com.pusong.business.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
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.PsSalary;
|
||||
import com.pusong.business.domain.PsTaskMain;
|
||||
import com.pusong.business.domain.vo.PsSalaryVo;
|
||||
import com.pusong.business.domain.vo.PsTaskMainVo;
|
||||
import com.pusong.common.mybatis.annotation.DataColumn;
|
||||
import com.pusong.common.mybatis.annotation.DataPermission;
|
||||
import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* 员工提成提成Mapper接口
|
||||
@ -21,10 +12,4 @@ import org.apache.ibatis.annotations.Param;
|
||||
*/
|
||||
public interface PsSalaryMapper extends BaseMapperPlus<PsSalary, PsSalaryVo> {
|
||||
|
||||
@DataPermission({
|
||||
@DataColumn(key = "deptName", value = "use.create_dept"),
|
||||
@DataColumn(key = "userName", value = "use.create_by")
|
||||
})
|
||||
Page<PsSalaryVo> selectSalaryList(@Param("page") Page<PsSalary> page, @Param(Constants.WRAPPER) Wrapper<PsSalary> queryWrapper);
|
||||
|
||||
}
|
||||
|
@ -33,4 +33,11 @@ public interface IPsContractOperateService {
|
||||
* @param contractCode 合同编码
|
||||
*/
|
||||
void rollbackContract( MultipartFile file, String contractCode);
|
||||
|
||||
/**
|
||||
* 确认单
|
||||
* @param file 回传合同文件
|
||||
* @param contractCode 合同编码
|
||||
*/
|
||||
void confirm( MultipartFile file, String contractCode);
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.pusong.business.service;
|
||||
|
||||
import com.pusong.business.domain.bo.PsSalaryConfigAddVo;
|
||||
import com.pusong.business.domain.vo.PsSalaryConfigInfoVo;
|
||||
import com.pusong.business.domain.vo.PsSalaryConfigVo;
|
||||
import com.pusong.business.domain.bo.PsSalaryConfigBo;
|
||||
@ -35,6 +36,14 @@ public interface IPsSalaryConfigService {
|
||||
* @return PsSalaryConfigVo
|
||||
*/
|
||||
PsSalaryConfigInfoVo queryByTemplateCode(String templateCode);
|
||||
|
||||
/**
|
||||
* 查询提成配置详情
|
||||
*
|
||||
* @param addVo 提成模板信息
|
||||
* @return PsSalaryConfigVo
|
||||
*/
|
||||
void add(PsSalaryConfigAddVo addVo);
|
||||
// /**
|
||||
// * 查询提成配置
|
||||
// *
|
||||
|
@ -56,7 +56,7 @@ public interface IPsTaskService {
|
||||
* @param id 任务主表主键
|
||||
* @return 公司及资料信息
|
||||
*/
|
||||
PsTaskMainVo queryInfo(Long id);
|
||||
PsTaskMainVo queryInfo(String id);
|
||||
/**
|
||||
* 根据合同编码查询任务
|
||||
*
|
||||
|
@ -40,4 +40,10 @@ public interface IServiceConfigService {
|
||||
* @return
|
||||
*/
|
||||
void delete(Long dictCode);
|
||||
|
||||
/**
|
||||
* 根据合同编码查询资料配置信息
|
||||
* @param contractCode
|
||||
*/
|
||||
List<String> getByContractCode(String contractCode);
|
||||
}
|
@ -15,7 +15,7 @@ public interface ApproverService {
|
||||
* @param desc 审批说明
|
||||
* @param updateData 修改后的数据
|
||||
*/
|
||||
public void apply( String bussinessId,String contractCode, String desc, Object updateData);
|
||||
public void apply( String bussinessId,String contractCode, String desc, String updateData);
|
||||
/**
|
||||
* 成功
|
||||
*/
|
||||
|
@ -50,7 +50,7 @@ public abstract class ApproverAbstractServiceImpl implements ApproverService {
|
||||
* @param desc
|
||||
* @param updateData
|
||||
*/
|
||||
public void apply(String bussinessId,String contractCode, String desc, Object updateData){
|
||||
public void apply(String bussinessId,String contractCode, String desc, String updateData){
|
||||
List<PsApproverRecord> list = approverRecordMapper.selectList(Wrappers.<PsApproverRecord>lambdaQuery().eq(PsApproverRecord::getDelFlag, "0")
|
||||
.eq(PsApproverRecord::getBusinessId, bussinessId).eq(PsApproverRecord::getBusinessType,approverType())
|
||||
.eq(PsApproverRecord::getApproverStatus, ApproverStatusEnum.INIT.getCode()));
|
||||
@ -63,7 +63,7 @@ public abstract class ApproverAbstractServiceImpl implements ApproverService {
|
||||
record.setContractCode(contractCode);
|
||||
record.setBusinessType(approverType());
|
||||
record.setApplyDesc(desc);
|
||||
record.setUpdateData(updateData == null?null:JSON.toJSONString(updateData));
|
||||
record.setUpdateData(updateData);
|
||||
record.setApplyDate(new Date());
|
||||
record.setApproverStatus(ApproverStatusEnum.INIT.getCode());
|
||||
approverRecordMapper.insert(record);
|
||||
@ -83,6 +83,7 @@ public abstract class ApproverAbstractServiceImpl implements ApproverService {
|
||||
public Page<PsApproverRecordVo> queryList(PsApproverRecordBo bo, PageQuery pageQuery){
|
||||
QueryWrapper<PsApproverRecord> lqw = Wrappers.<PsApproverRecord>query().eq("app.business_type",approverType())
|
||||
.eq(bo.getId()!=null,"app.id",bo.getId())
|
||||
.eq("app.del_flag","0")
|
||||
.orderByAsc("app.approver_status").orderByAsc("app.approver_date");
|
||||
Page<PsApproverRecordVo> res = recordMapper.selectPageApproverList(pageQuery.build(), lqw);
|
||||
if(CollectionUtils.isNotEmpty(res.getRecords())){
|
||||
|
@ -2,10 +2,12 @@ package com.pusong.business.service.approver.impl;
|
||||
|
||||
import com.pusong.business.domain.PsApproverRecord;
|
||||
import com.pusong.business.domain.PsContractInfo;
|
||||
import com.pusong.business.domain.PsTaskAppoint;
|
||||
import com.pusong.business.domain.PsTaskMain;
|
||||
import com.pusong.business.enums.ApproverTypeEnum;
|
||||
import com.pusong.business.enums.ContractStatusEnum;
|
||||
import com.pusong.business.enums.TaskStatusEnum;
|
||||
import com.pusong.business.mapper.PsTaskAppointMapper;
|
||||
import com.pusong.business.mapper.PsTaskMainMapper;
|
||||
import com.pusong.business.service.IPsContractInfoService;
|
||||
import com.pusong.business.service.impl.PsContractInfoServiceImpl;
|
||||
@ -24,8 +26,8 @@ public class TaskFinishApproverServiceImpl extends ApproverAbstractServiceImpl {
|
||||
public String approverType() {
|
||||
return ApproverTypeEnum.TASKFINISH.getCode();
|
||||
}
|
||||
private final PsTaskMainMapper taskMainMapper;
|
||||
private final IPsContractInfoService contractInfoService;
|
||||
private final PsTaskAppointMapper taskAppointMapper;
|
||||
|
||||
|
||||
/**
|
||||
* 1 审批成功 任务的状态变为成功
|
||||
@ -33,9 +35,9 @@ public class TaskFinishApproverServiceImpl extends ApproverAbstractServiceImpl {
|
||||
*/
|
||||
@Override
|
||||
public void success(PsApproverRecord psApproverRecord) {
|
||||
PsTaskMain info = taskMainMapper.selectById(psApproverRecord.getBusinessId());
|
||||
info.setTaskStatus(TaskStatusEnum.FINISH.getCode());
|
||||
taskMainMapper.updateById(info);
|
||||
PsTaskAppoint info = taskAppointMapper.selectById(psApproverRecord.getBusinessId());
|
||||
info.setAppointStatus(TaskStatusEnum.FINISH.getCode());
|
||||
taskAppointMapper.updateById(info);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -44,8 +46,8 @@ public class TaskFinishApproverServiceImpl extends ApproverAbstractServiceImpl {
|
||||
*/
|
||||
@Override
|
||||
public void fail(PsApproverRecord psApproverRecord) {
|
||||
PsTaskMain info = taskMainMapper.selectById(psApproverRecord.getBusinessId());
|
||||
info.setTaskStatus(TaskStatusEnum.ING.getCode());
|
||||
taskMainMapper.updateById(info);
|
||||
PsTaskAppoint info = taskAppointMapper.selectById(psApproverRecord.getBusinessId());
|
||||
info.setAppointStatus(TaskStatusEnum.ING.getCode());
|
||||
taskAppointMapper.updateById(info);
|
||||
}
|
||||
}
|
||||
|
@ -75,7 +75,7 @@ public class IPsContractOperateServiceImpl implements IPsContractOperateService
|
||||
SysOssVo vo = ossService.upload(file);
|
||||
//发起回传合同审批
|
||||
ApproverService service = container.getService(ApproverTypeEnum.ROLBACK.getCode());
|
||||
service.apply(contractCode,contractCode,null, vo.getOssId());
|
||||
service.apply(contractCode,contractCode,null, vo.getOssId()+"");
|
||||
//修改合同信息
|
||||
PsContractInfo psContractInfo = new PsContractInfo();
|
||||
psContractInfo.setContractCode(contractCode);
|
||||
@ -92,5 +92,35 @@ public class IPsContractOperateServiceImpl implements IPsContractOperateService
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 确认单
|
||||
* @param file 确认单
|
||||
* @param contractCode 合同编码
|
||||
*/
|
||||
@Transactional
|
||||
public void confirm( MultipartFile file, String contractCode){
|
||||
PsContractInfoVo info = contractInfoService.queryContractByCode(contractCode);
|
||||
//后续添加校验可再次添加
|
||||
SysOssVo vo = ossService.upload(file);
|
||||
//修改合同信息
|
||||
PsContractInfo psContractInfo = new PsContractInfo();
|
||||
psContractInfo.setContractCode(contractCode);
|
||||
psContractInfo.setConfirmOssid(vo.getOssId());
|
||||
contractInfoService.updateByCode(psContractInfo);
|
||||
//若已存在确认单,则删除
|
||||
if(info.getRollBackPdf() != null){
|
||||
try{
|
||||
ossService.deleteWithValidByIds(List.of(info.getConfirmOssid()),null);
|
||||
}catch (Exception e){
|
||||
log.error("删除确认单失败",e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -189,14 +189,29 @@ public class IServiceConfigServiceImpl implements IServiceConfigService {
|
||||
if(CollectionUtils.isNotEmpty(list)){throw new ServiceException("服务子项目已使用不可修改");}
|
||||
}
|
||||
}
|
||||
public static void main(String[] args) {
|
||||
String a = "7_3";
|
||||
String b = "7";
|
||||
System.out.println(a.substring(b.length()+1));
|
||||
List<Integer> list = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13);
|
||||
/**
|
||||
* 根据合同编码查询资料配置信息
|
||||
* @param contractCode
|
||||
*/
|
||||
public List<String> getByContractCode(String contractCode){
|
||||
SysDictDataBo dictData = new SysDictDataBo();
|
||||
dictData.setInDictType(List.of(SERVICE_PROJECT));
|
||||
List<SysDictDataVo> configList = dictDataService.selectDictDataList(dictData);
|
||||
//分组排序
|
||||
Map<String, String> map = configList.stream().collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getRemark));
|
||||
PsContractBusinessDetailBo bo = new PsContractBusinessDetailBo();
|
||||
bo.setContractCode(contractCode);
|
||||
List<PsContractBusinessDetailVo> list = detailService.queryList(bo);
|
||||
List<String> restList = new ArrayList<>();
|
||||
list.forEach(item ->{
|
||||
if (item==6){return;}
|
||||
System.out.println(item);
|
||||
String bp = map.get(item.getBusinessProject());
|
||||
if(StringUtils.isNotBlank(bp)){
|
||||
String cb = JSON.parseObject(bp).getString("cb");
|
||||
if(StringUtils.isNotBlank(cb)){
|
||||
restList.addAll(List.of(cb.split(",")));
|
||||
}
|
||||
}
|
||||
});
|
||||
return restList;
|
||||
}
|
||||
}
|
||||
|
@ -72,6 +72,7 @@ public class PsContractBusinessDetailServiceImpl implements IPsContractBusinessD
|
||||
LambdaQueryWrapper<PsContractBusinessDetail> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getBusinessProject()), PsContractBusinessDetail::getBusinessProject, bo.getBusinessProject());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getExtentInfo()), PsContractBusinessDetail::getExtentInfo, bo.getExtentInfo());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getContractCode()), PsContractBusinessDetail::getContractCode, bo.getContractCode());
|
||||
lqw.eq(PsContractBusinessDetail::getDelFlag, "0");
|
||||
return lqw;
|
||||
}
|
||||
|
@ -126,7 +126,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());
|
||||
service.apply(pay.getId()+"",pay.getContractCode(),payBo.getPayDesc(), pay.getMoney().stripTrailingZeros().toString());
|
||||
}
|
||||
/**
|
||||
* 根据主键id查询回款记录
|
||||
@ -159,8 +159,8 @@ public class PsContractPayServiceImpl implements IPsContractPayService {
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<PsRefundVo> queryRefundList(PageQuery pageQuery,String payStatus){
|
||||
QueryWrapper<PsContractPay> qw = new QueryWrapper<PsContractPay>().in("pay.pay_stauts", List.of(PayStatusEnum.PAYING.getCode(),PayStatusEnum.SUCCESS.getCode()))
|
||||
.eq(StringUtils.isNotBlank(payStatus), "pay.pay_stauts", payStatus);
|
||||
QueryWrapper<PsContractPay> qw = new QueryWrapper<PsContractPay>().in("pay.pay_status", List.of(PayStatusEnum.PAYING.getCode(),PayStatusEnum.SUCCESS.getCode()))
|
||||
.eq(StringUtils.isNotBlank(payStatus), "pay.pay_status", payStatus);
|
||||
Page<PsRefundVo> list = baseMapper.queryRefundList(pageQuery.build(), qw);
|
||||
list.getRecords().forEach(info->{
|
||||
List<PsContractPayVo> payList = queryListByContractCode(info.getContractCode(),null,PayStatusEnum.SUCCESS);
|
||||
|
@ -418,7 +418,7 @@ public class PsCustomInfoServiceImpl implements IPsCustomInfoService {
|
||||
baseMapper.updateById(psCustomInfo);
|
||||
//发起审批
|
||||
ApproverService service = approverContainer.getService(ApproverTypeEnum.PUBLIC.getCode());
|
||||
service.apply(customerId+"",null,null,LoginHelper.getUserId());
|
||||
service.apply(customerId+"",null,null,LoginHelper.getUserId()+"");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2,6 +2,7 @@ package com.pusong.business.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||
import com.pusong.business.domain.bo.PsSalaryConfigAddVo;
|
||||
import com.pusong.business.domain.vo.PsSalaryConfigInfoVo;
|
||||
import com.pusong.common.core.utils.MapstructUtils;
|
||||
import com.pusong.common.mybatis.core.page.TableDataInfo;
|
||||
@ -11,6 +12,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.pusong.business.domain.bo.PsSalaryConfigBo;
|
||||
import com.pusong.business.domain.vo.PsSalaryConfigVo;
|
||||
@ -18,10 +21,7 @@ import com.pusong.business.domain.PsSalaryConfig;
|
||||
import com.pusong.business.mapper.PsSalaryConfigMapper;
|
||||
import com.pusong.business.service.IPsSalaryConfigService;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 提成配置Service业务层处理
|
||||
@ -33,6 +33,7 @@ import java.util.Collection;
|
||||
@Service
|
||||
public class PsSalaryConfigServiceImpl implements IPsSalaryConfigService {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(PsSalaryConfigServiceImpl.class);
|
||||
private final PsSalaryConfigMapper baseMapper;
|
||||
|
||||
|
||||
@ -69,7 +70,9 @@ public class PsSalaryConfigServiceImpl implements IPsSalaryConfigService {
|
||||
public PsSalaryConfigInfoVo queryByTemplateCode(String templateCode){
|
||||
List<PsSalaryConfig> list = baseMapper.selectList(Wrappers.<PsSalaryConfig>lambdaQuery().eq(PsSalaryConfig::getTemplateCode, templateCode).eq(PsSalaryConfig::getDelFlag, 0));
|
||||
PsSalaryConfigInfoVo vo = new PsSalaryConfigInfoVo();
|
||||
Map<String,Map<String,String>> map = new HashMap<>();
|
||||
//服务类型:服务项目:成本
|
||||
// :提成比例
|
||||
Map<String,Map<String,Map<String,String>>> map = new HashMap<>();
|
||||
list.forEach(item->{
|
||||
//服务类型
|
||||
String serviceType = item.getServiceProject().split("_")[0];
|
||||
@ -78,14 +81,38 @@ public class PsSalaryConfigServiceImpl implements IPsSalaryConfigService {
|
||||
//岗位id拼接
|
||||
vo.setPostId((StringUtils.isBlank(vo.getPostId())?"":vo.getPostId()+",")+item.getPostId());
|
||||
//服务项目:提成比例
|
||||
Map<String, String> project = CollectionUtils.isNotEmpty(map.get(serviceType))?map.get(serviceType):new HashMap<>();
|
||||
project.put(item.getServiceProject(),item.getSalaryRatio().stripTrailingZeros().toString());
|
||||
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());
|
||||
project.put(item.getServiceProject(),data);
|
||||
map.put(serviceType,project);
|
||||
});
|
||||
vo.setServiceTypeMap(map);
|
||||
vo.setTemplateCode(templateCode);
|
||||
vo.setTemplateName(list.get(0).getTemplateName());
|
||||
return vo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增或修改提成配置详情
|
||||
*
|
||||
* @param addVo 提成模板信息
|
||||
*/
|
||||
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("修改配置成功");
|
||||
}
|
||||
baseMapper.insertBatch(list);
|
||||
}
|
||||
// /**
|
||||
// * 查询提成配置
|
||||
// *
|
||||
|
@ -41,15 +41,14 @@ public class PsSalaryServiceImpl implements IPsSalaryService {
|
||||
@Override
|
||||
public TableDataInfo<PsSalaryVo> queryPageList(PsSalaryBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<PsSalary> lqw = buildQueryWrapper(bo);
|
||||
Page<PsSalaryVo> result = baseMapper.selectSalaryList(pageQuery.build(), lqw);
|
||||
Page<PsSalaryVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
private LambdaQueryWrapper<PsSalary> buildQueryWrapper(PsSalaryBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<PsSalary> lqw = Wrappers.lambdaQuery();
|
||||
// lqw.eq(bo.getUserId() != null, PsSalary::getUserId, bo.getUserId());
|
||||
// lqw.eq(bo.getServiceProject() != null, PsSalary::getServiceProject, bo.getServiceProject());
|
||||
// lqw.eq(StringUtils.isNotBlank(bo.getSalaryRatio()), PsSalary::getSalaryRatio, bo.getSalaryRatio());
|
||||
lqw.le(bo.getEndDate() != null,PsSalary::getSalaryDate,bo.getEndDate());
|
||||
lqw.ge(bo.getStartDate() != null,PsSalary::getSalaryDate,bo.getStartDate());
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.pusong.business.domain.PsCompanyInfo;
|
||||
import com.pusong.business.domain.PsContractInfo;
|
||||
import com.pusong.business.domain.PsTaskAppoint;
|
||||
import com.pusong.business.domain.bo.AppointBo;
|
||||
import com.pusong.business.domain.bo.MediaCompanySaveBo;
|
||||
@ -18,6 +19,7 @@ import com.pusong.business.enums.TaskStatusEnum;
|
||||
import com.pusong.business.enums.TaskStatusEnum.*;
|
||||
import com.pusong.business.enums.TaskTypeEnum;
|
||||
import com.pusong.business.mapper.PsContractBusinessMapper;
|
||||
import com.pusong.business.mapper.PsContractInfoMapper;
|
||||
import com.pusong.business.mapper.PsTaskAppointMapper;
|
||||
import com.pusong.business.service.IPsCompanyInfoService;
|
||||
import com.pusong.business.service.IPsContractInfoService;
|
||||
@ -69,8 +71,8 @@ public class PsTaskServiceImpl implements IPsTaskService {
|
||||
private final ISysOssService ossService;
|
||||
@Resource
|
||||
private ApproverContainer approverContainer;
|
||||
@Autowired
|
||||
private InfoEndpoint infoEndpoint;
|
||||
@Resource
|
||||
private PsContractInfoMapper contractInfoMapper;
|
||||
|
||||
/**
|
||||
* 新增主任务
|
||||
@ -113,6 +115,7 @@ public class PsTaskServiceImpl implements IPsTaskService {
|
||||
public TableDataInfo<PsTaskMainVo> queryChildPageList(PsTaskQueryBo bo, PageQuery pageQuery){
|
||||
QueryWrapper<PsTaskMain> lqw = buildQueryWrapper(bo);
|
||||
lqw.eq("appo.appoint_type",bo.getAppointType());
|
||||
lqw.eq(bo.getId() != null,"appo.id",bo.getId());
|
||||
Page<PsTaskMainVo> page = baseMapper.queryChildTaskPageList(pageQuery.build(), lqw);
|
||||
for (PsTaskMainVo vo : page.getRecords()) {
|
||||
if(vo.getStartDate() != null){
|
||||
@ -150,13 +153,24 @@ public class PsTaskServiceImpl implements IPsTaskService {
|
||||
* @param id 任务主表主键
|
||||
* @return 公司及资料信息
|
||||
*/
|
||||
public PsTaskMainVo queryInfo(Long id){
|
||||
public PsTaskMainVo queryInfo(String id){
|
||||
//查询任务信息
|
||||
PsTaskMain mainTask = baseMapper.selectById(id);
|
||||
Long customId ;
|
||||
Long companyId ;
|
||||
if(mainTask == null){
|
||||
PsContractInfo con = contractInfoMapper.selectOne(Wrappers.<PsContractInfo>lambdaQuery().eq(PsContractInfo::getContractCode, id));
|
||||
customId = con.getCustomId();
|
||||
companyId = con.getCompanyId();
|
||||
}else{
|
||||
customId = mainTask.getCustomId();
|
||||
companyId = mainTask.getCompanyId();
|
||||
}
|
||||
|
||||
//查询公司信息
|
||||
PsCompanyInfoVo companyInfoVo = companyInfoService.queryById(mainTask.getCompanyId());
|
||||
PsCompanyInfoVo companyInfoVo = companyInfoService.queryById(companyId);
|
||||
//查询资料信息
|
||||
List<PsTaskMediaVo> list = mediaService.queryMediaList(mainTask.getCustomId(),mainTask.getCompanyId());
|
||||
List<PsTaskMediaVo> list = mediaService.queryMediaList(customId,companyId);
|
||||
PsTaskMainVo psTaskMainVo = new PsTaskMainVo();
|
||||
psTaskMainVo.setCompanyInfoVo(companyInfoVo);
|
||||
psTaskMainVo.setTaskMediaVoList(list);
|
||||
@ -282,9 +296,8 @@ public class PsTaskServiceImpl implements IPsTaskService {
|
||||
if(CollectionUtils.isNotEmpty(list)){
|
||||
throw new ServiceException("操作失败,子任务未完成");
|
||||
}
|
||||
ApproverService service = approverContainer.getService(ApproverTypeEnum.TASKFINISH.getCode());
|
||||
service.apply(id+"",main.getContractCode(),null,null);
|
||||
main.setTaskStatus(TaskStatusEnum.OA.getCode());
|
||||
main.setTaskStatus(TaskStatusEnum.FINISH.getCode());
|
||||
baseMapper.updateById(main);
|
||||
}
|
||||
/**
|
||||
* 子任务完成
|
||||
@ -300,7 +313,9 @@ public class PsTaskServiceImpl implements IPsTaskService {
|
||||
if(!AppointStatusEnum.canFinish(appoint.getAppointStatus())){
|
||||
throw new ServiceException("此任务无法执行此操作,请刷新页面后重新操作");
|
||||
}
|
||||
appoint.setAppointStatus(AppointStatusEnum.FINISH.getCode());
|
||||
ApproverService service = approverContainer.getService(ApproverTypeEnum.TASKFINISH.getCode());
|
||||
service.apply(id+"",appoint.getContractCode(),desc,appoint.getAppointType());
|
||||
appoint.setAppointStatus(AppointStatusEnum.OA.getCode());
|
||||
appoint.setTaskDesc(desc);
|
||||
appointMapper.updateById(appoint);
|
||||
}
|
||||
@ -359,7 +374,11 @@ public class PsTaskServiceImpl implements IPsTaskService {
|
||||
QueryWrapper<PsTaskMain> lqw = new QueryWrapper<PsTaskMain>();
|
||||
lqw.eq("main.del_flag","0");
|
||||
lqw.ne("main.task_status",TaskStatusEnum.CANCEL.getCode());
|
||||
if(StringUtils.equals(bo.getType(),"1")){
|
||||
lqw.in(StringUtils.isNotBlank(bo.getType()),"main.task_type",List.of("1","2"));
|
||||
}else{
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getType()),"main.task_type",bo.getType());
|
||||
}
|
||||
lqw.eq(bo.getId() != null,"main.id",bo.getId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getCompanyName()), "com.company_name", bo.getCompanyName());//公司地址
|
||||
lqw.like(StringUtils.isNotBlank(bo.getCustomerNum()), "com.customer_num", bo.getCustomerNum());//纳税人识别号
|
||||
@ -390,6 +409,7 @@ public class PsTaskServiceImpl implements IPsTaskService {
|
||||
}
|
||||
SysOssVo vo = ossService.upload(file);
|
||||
info.setInvoice(vo.getOssId()+"");
|
||||
info.setTaskStatus(TaskStatusEnum.FINISH.getCode());
|
||||
baseMapper.updateById(info);
|
||||
}
|
||||
/**
|
||||
|
@ -15,6 +15,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
, cus.custom_name
|
||||
, cus.custom_mobile
|
||||
, info.roll_back_pdf
|
||||
, info.contract_amount
|
||||
, (select GROUP_CONCAT(business.business_type SEPARATOR ',')
|
||||
from ps_contract_business business where business.contract_code = info.contract_code) as business_type_name
|
||||
, info.contract_amount
|
||||
|
@ -33,7 +33,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<select id="selectPageCustomerRecordList" resultType="com.pusong.business.domain.vo.PsCustomerRecordVo">
|
||||
select
|
||||
custom.id,
|
||||
con.contractCode,
|
||||
custom.create_time,
|
||||
custom.custom_status,
|
||||
con.contract_code,
|
||||
custom.custom_name,
|
||||
custom.custom_mobile,
|
||||
(select GROUP_CONCAT(business.business_type SEPARATOR ',')
|
||||
@ -41,16 +43,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
task.start_date,
|
||||
com.finance_account_no,
|
||||
custom.custom_manager,
|
||||
custom.company_adress,
|
||||
custom.company_name,
|
||||
custom.customer_num,
|
||||
custom.customer_cert,
|
||||
custom.legal_person_name,
|
||||
custom.legal_person_idcard,
|
||||
custom.legal_person_phone,
|
||||
com.company_adress,
|
||||
com.company_name,
|
||||
com.customer_num,
|
||||
com.customer_cert,
|
||||
com.legal_person_name,
|
||||
com.legal_person_idcard,
|
||||
com.legal_person_phone,
|
||||
(select GROUP_CONCAT(appoint.executor SEPARATOR ',')
|
||||
from ps_task_appoint appoint where appoint.task_id = task.id) as executors,
|
||||
info.sign_desc
|
||||
con.sign_desc,
|
||||
con.contract_amount,
|
||||
con.finish_date,
|
||||
(select par.approver_status from ps_approver_record par where par.contract_code = con.contract_code and business_type = 'free' limit 0,1) approver_status
|
||||
from
|
||||
ps_custom_info custom
|
||||
left join
|
||||
|
@ -4,19 +4,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.pusong.business.mapper.PsSalaryMapper">
|
||||
|
||||
|
||||
<select id="selectSalaryList" resultType="com.pusong.business.domain.vo.PsSalaryVo">
|
||||
select
|
||||
ps.user_id,
|
||||
ps.salary_money ,
|
||||
su.nick_name,
|
||||
sp.post_name,
|
||||
(select count(*) from ps_contract_info info where info.custom_manager = ps.user_id and info.contract_status != '10' and info.is_cancel != '03') all_contract,
|
||||
(select count(*) from ps_contract_info inf where inf.custom_manager = ps.user_id and inf.contract_status == '50' and inf.is_cancel != '03') finish_contract,
|
||||
(select count(*) from ps_contract_info pci where pci.custom_manager = ps.user_id and pci.contract_status not in ('10','50') and pci.is_cancel != '03') unfinish_contract
|
||||
from ps_salary ps
|
||||
left join sys_user su on su.user_id = ps.user_id
|
||||
left join sys_post sp on ps.post_id = sp.post_id
|
||||
${ew.getCustomSqlSegment}
|
||||
</select>
|
||||
</mapper>
|
||||
|
@ -88,6 +88,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
appo.executor as executors,
|
||||
appo.appoint_status,
|
||||
appo.id,
|
||||
appo.task_desc,
|
||||
(select GROUP_CONCAT(business.business_type SEPARATOR ',')
|
||||
from ps_contract_business business where business.contract_code = con.contract_code) as business_type_name
|
||||
from ps_task_appoint appo
|
||||
|
Loading…
Reference in New Issue
Block a user