This commit is contained in:
1073413548 2024-08-23 14:32:09 +08:00
parent cd87abc8b5
commit 279dc1a373
15 changed files with 748 additions and 1 deletions

View File

@ -0,0 +1,18 @@
package com.pusong.common.core.service;
/**
* 通用 岗位服务
*
* @author Lion Li
*/
public interface PostService {
/**
* 通过岗位ID查询岗位名称
*
* @param deptIds 岗位ID串逗号分隔
* @return 岗位名称串逗号分隔
*/
String selectPostNameByIds(String deptIds);
}

View File

@ -21,6 +21,10 @@ public interface TransConstant {
* 部门id转名称
*/
String DEPT_ID_TO_NAME = "dept_id_to_name";
/**
* 岗位id转名称
*/
String POST_ID_TO_NAME = "post_id_to_name";
/**
* 字典type转label

View File

@ -0,0 +1,29 @@
package com.pusong.common.translation.core.impl;
import com.pusong.common.core.service.DeptService;
import com.pusong.common.translation.annotation.TranslationType;
import com.pusong.common.translation.constant.TransConstant;
import com.pusong.common.translation.core.TranslationInterface;
import lombok.AllArgsConstructor;
/**
* 岗位翻译实现
*
* @author Lion Li
*/
@AllArgsConstructor
@TranslationType(type = TransConstant.POST_ID_TO_NAME)
public class PostNameTranslationImpl implements TranslationInterface<String> {
private final DeptService deptService;
@Override
public String translation(Object key, String other) {
if (key instanceof String ids) {
return deptService.selectDeptNameByIds(ids);
} else if (key instanceof Long id) {
return deptService.selectDeptNameByIds(id.toString());
}
return null;
}
}

View File

@ -0,0 +1,118 @@
package com.pusong.business.controller;
import java.util.List;
import com.pusong.business.domain.vo.PsSalaryConfigInfoVo;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.pusong.common.idempotent.annotation.RepeatSubmit;
import com.pusong.common.log.annotation.Log;
import com.pusong.common.web.core.BaseController;
import com.pusong.common.mybatis.core.page.PageQuery;
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.log.enums.BusinessType;
import com.pusong.common.excel.utils.ExcelUtil;
import com.pusong.business.domain.vo.PsSalaryConfigVo;
import com.pusong.business.domain.bo.PsSalaryConfigBo;
import com.pusong.business.service.IPsSalaryConfigService;
import com.pusong.common.mybatis.core.page.TableDataInfo;
/**
* 提成配置
*
* @author Lion Li
* @date 2024-08-22
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/business/salaryConfig")
public class PsSalaryConfigController extends BaseController {
private final IPsSalaryConfigService psSalaryConfigService;
/**
* 查询提成配置列表
*/
@SaCheckPermission("business:salaryConfig:list")
@GetMapping("/list")
public TableDataInfo<PsSalaryConfigVo> list(PsSalaryConfigBo bo, PageQuery pageQuery) {
return psSalaryConfigService.queryPageList(bo, pageQuery);
}
/**
* 根据模板编码查询配置详情
*/
@Log(title = "根据模板编码查询配置详情")
@SaCheckPermission("business:salaryConfig:info")
@GetMapping("/info")
public R<PsSalaryConfigInfoVo> info(String templateCode) {
return R.ok(psSalaryConfigService.queryByTemplateCode(templateCode));
}
// /**
// * 导出提成配置列表
// */
// @SaCheckPermission("business:salaryConfig:export")
// @Log(title = "提成配置", businessType = BusinessType.EXPORT)
// @PostMapping("/export")
// public void export(PsSalaryConfigBo bo, HttpServletResponse response) {
// List<PsSalaryConfigVo> list = psSalaryConfigService.queryList(bo);
// ExcelUtil.exportExcel(list, "提成配置", PsSalaryConfigVo.class, response);
// }
//
// /**
// * 获取提成配置详细信息
// *
// * @param id 主键
// */
// @SaCheckPermission("business:salaryConfig:query")
// @GetMapping("/{id}")
// public R<PsSalaryConfigVo> getInfo(@NotNull(message = "主键不能为空")
// @PathVariable Long id) {
// return R.ok(psSalaryConfigService.queryById(id));
// }
//
// /**
// * 新增提成配置
// */
// @SaCheckPermission("business:salaryConfig:add")
// @Log(title = "提成配置", businessType = BusinessType.INSERT)
// @RepeatSubmit()
// @PostMapping()
// public R<Void> add(@Validated(AddGroup.class) @RequestBody PsSalaryConfigBo bo) {
// return toAjax(psSalaryConfigService.insertByBo(bo));
// }
//
// /**
// * 修改提成配置
// */
// @SaCheckPermission("business:salaryConfig:edit")
// @Log(title = "提成配置", businessType = BusinessType.UPDATE)
// @RepeatSubmit()
// @PutMapping()
// public R<Void> edit(@Validated(EditGroup.class) @RequestBody PsSalaryConfigBo bo) {
// return toAjax(psSalaryConfigService.updateByBo(bo));
// }
//
// /**
// * 删除提成配置
// *
// * @param ids 主键串
// */
// @SaCheckPermission("business:salaryConfig:remove")
// @Log(title = "提成配置", businessType = BusinessType.DELETE)
// @DeleteMapping("/{ids}")
// public R<Void> remove(@NotEmpty(message = "主键不能为空")
// @PathVariable Long[] ids) {
// return toAjax(psSalaryConfigService.deleteWithValidByIds(List.of(ids), true));
// }
}

View File

@ -0,0 +1,60 @@
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.io.Serial;
/**
* 提成配置对象 ps_salary_config
*
* @author Lion Li
* @date 2024-08-22
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ps_salary_config")
public class PsSalaryConfig extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@TableId(value = "id")
private Long id;
/**
* 岗位id
*/
private Long postId;
/**
* 服务项目编码
*/
private String serviceProject;
/**
* 提成比例
*/
private BigDecimal salaryRatio;
/**
* 2逻辑删除 0 默认有效
*/
@TableLogic
private Long delFlag;
/**
* 模板编码
*/
private String templateCode;
/**
* 模板名称
*/
private String templateName;
}

View File

@ -0,0 +1,54 @@
package com.pusong.business.domain.bo;
import com.pusong.business.domain.PsSalaryConfig;
import com.pusong.common.core.validate.AddGroup;
import com.pusong.common.core.validate.EditGroup;
import com.pusong.common.mybatis.core.domain.BaseEntity;
import com.pusong.common.translation.annotation.Translation;
import com.pusong.common.translation.constant.TransConstant;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
/**
* 提成配置业务对象 ps_salary_config
*
* @author Lion Li
* @date 2024-08-22
*/
@Data
@EqualsAndHashCode
@AutoMapper(target = PsSalaryConfig.class)
public class PsSalaryConfigBo {
/**
* 模板编码
*/
@NotNull(message = "模板编码不能为空", groups = { EditGroup.class })
private String templateCode;
/**
* 岗位id
*/
@NotNull(message = "岗位id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long postId;
/**
* 服务项目编码
*/
@NotBlank(message = "服务项目编码不能为空", groups = { AddGroup.class, EditGroup.class })
private String serviceProject;
/**
* 提成比例
*/
@NotNull(message = "提成比例不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal salaryRatio;
/**
* 模板名称
*/
private String templateName;
}

View File

@ -0,0 +1,61 @@
package com.pusong.business.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pusong.business.domain.PsSalaryConfig;
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.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 提成配置视图对象 ps_salary_config
*
* @author Lion Li
* @date 2024-08-22
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = PsSalaryConfig.class)
public class PsSalaryConfigInfoVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 岗位id多个用逗号分割
*/
private String postId;
/**
* 岗位名称多个用逗号分割
*/
@Translation(type = TransConstant.POST_ID_TO_NAME,mapper = "postId")
private String postName;
/**
* 服务类型id多个用逗号分割
*/
private String serviceTypeId;
/**
* 模板编码
*/
private String templateCode;
/**
* 模板名称
*/
private String templateName;
/**
* 服务类型Map
*/
private Map<String,Map<String,Object>> serviceTypeMap;
}

View File

@ -0,0 +1,72 @@
package com.pusong.business.domain.vo;
import java.math.BigDecimal;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pusong.business.domain.PsSalaryConfig;
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_config
*
* @author Lion Li
* @date 2024-08-22
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = PsSalaryConfig.class)
public class PsSalaryConfigVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 岗位id
*/
@Translation(type = TransConstant.POST_ID_TO_NAME)
private Long postId;
/**
* 服务项目编码
*/
@Translation(type = TransConstant.DICT_TYPE_TO_LABEL,other = "service_project")
private String serviceProject;
/**
* 提成比例
*/
private BigDecimal salaryRatio;
/**
* 模板编码
*/
private String templateCode;
/**
* 模板名称
*/
private String templateName;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private Date createTime ;
/**
* 创建人
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME)
private Long createBy ;
}

View File

@ -0,0 +1,51 @@
package com.pusong.business.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.pusong.business.domain.PsContractInfo;
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.util.Map;
/**
* 任务进度Vo
*/
@Data
@ExcelIgnoreUnannotated
public class TaskPlanVo {
/**
* 任务状态
*/
private String state;
/**
* 内勤执行者
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME)
private Long inExector;
/**
* 外勤执行者
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME)
private Long outExector;
/**
* 特勤执行者
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME)
private Long secExector;
/**
* 内勤任务状态
*/
private String inState;
/**
* 外勤任务状态
*/
private String outState;
/**
* 特勤任务状态
*/
private String secState;
}

View File

@ -0,0 +1,15 @@
package com.pusong.business.mapper;
import com.pusong.business.domain.PsSalaryConfig;
import com.pusong.business.domain.vo.PsSalaryConfigVo;
import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 提成配置Mapper接口
*
* @author Lion Li
* @date 2024-08-22
*/
public interface PsSalaryConfigMapper extends BaseMapperPlus<PsSalaryConfig, PsSalaryConfigVo> {
}

View File

@ -0,0 +1,77 @@
package com.pusong.business.service;
import com.pusong.business.domain.vo.PsSalaryConfigInfoVo;
import com.pusong.business.domain.vo.PsSalaryConfigVo;
import com.pusong.business.domain.bo.PsSalaryConfigBo;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 提成配置Service接口
*
* @author Lion Li
* @date 2024-08-22
*/
public interface IPsSalaryConfigService {
/**
* 分页查询提成配置列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 提成配置分页列表
*/
TableDataInfo<PsSalaryConfigVo> queryPageList(PsSalaryConfigBo bo, PageQuery pageQuery);
/**
* 查询提成配置详情
*
* @param templateCode 模板编码
* @return PsSalaryConfigVo
*/
PsSalaryConfigInfoVo queryByTemplateCode(String templateCode);
// /**
// * 查询提成配置
// *
// * @param id 主键
// * @return 提成配置
// */
// PsSalaryConfigVo queryById(Long id);
// /**
// * 查询符合条件的提成配置列表
// *
// * @param bo 查询条件
// * @return 提成配置列表
// */
// List<PsSalaryConfigVo> queryList(PsSalaryConfigBo bo);
//
// /**
// * 新增提成配置
// *
// * @param bo 提成配置
// * @return 是否新增成功
// */
// Boolean insertByBo(PsSalaryConfigBo bo);
//
// /**
// * 修改提成配置
// *
// * @param bo 提成配置
// * @return 是否修改成功
// */
// Boolean updateByBo(PsSalaryConfigBo bo);
//
// /**
// * 校验并批量删除提成配置信息
// *
// * @param ids 待删除的主键集合
// * @param isValid 是否进行有效性校验
// * @return 是否删除成功
// */
// Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -58,6 +58,7 @@ public class PayContractApproverServiceImpl extends ApproverAbstractServiceImpl
List<PsContractPayVo> list = payService.queryListByContractCode(info.getContractCode(), PayBuinessStatusEnum.PAY.getCode(), PayStatusEnum.SUCCESS);
//如果没有过回款记录初始化任务主表,并修改合同状态
log.info("查询回款记录数量{}任务状态{}", list.size(),info.getContractStatus());
if(CollectionUtils.isEmpty(list) && StringUtils.equals(ContractStatusEnum.CREATE.getCode(),info.getContractStatus())){
log.info("合同未回款过,初始化任务主表");
PsTaskMain psTaskMain = new PsTaskMain();

View File

@ -0,0 +1,157 @@
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.vo.PsSalaryConfigInfoVo;
import com.pusong.common.core.utils.MapstructUtils;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.springframework.stereotype.Service;
import com.pusong.business.domain.bo.PsSalaryConfigBo;
import com.pusong.business.domain.vo.PsSalaryConfigVo;
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;
/**
* 提成配置Service业务层处理
*
* @author Lion Li
* @date 2024-08-22
*/
@RequiredArgsConstructor
@Service
public class PsSalaryConfigServiceImpl implements IPsSalaryConfigService {
private final PsSalaryConfigMapper baseMapper;
/**
* 分页查询提成配置列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 提成配置分页列表
*/
@Override
public TableDataInfo<PsSalaryConfigVo> queryPageList(PsSalaryConfigBo bo, PageQuery pageQuery) {
QueryWrapper<PsSalaryConfig> lqw = buildQueryWrapper(bo);
Page<PsSalaryConfigVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
if (CollectionUtils.isEmpty(result.getRecords())) {return TableDataInfo.build(result);}
return TableDataInfo.build(result);
}
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");
lqw.like(StringUtils.isNotBlank(bo.getTemplateName()),"template_name", bo.getTemplateName());
lqw.eq(StringUtils.isNotBlank(bo.getTemplateCode()),"template_code", bo.getTemplateCode());
lqw.groupBy(bo.getTemplateCode());
return lqw;
}
/**
* 查询提成配置详情
*
* @param templateCode 模板编码
* @return PsSalaryConfigVo
*/
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<>();
list.forEach(item->{
// if(vo.setServiceTypeId());
// item.getServiceProject()
// vo.setPostId();
});
vo.setTemplateCode(templateCode);
vo.setTemplateName(list.get(0).getTemplateName());
return vo;
}
// /**
// * 查询提成配置
// *
// * @param id 主键
// * @return 提成配置
// */
// @Override
// public PsSalaryConfigVo queryById(Long id){
// return baseMapper.selectVoById(id);
// }
// /**
// * 查询符合条件的提成配置列表
// *
// * @param bo 查询条件
// * @return 提成配置列表
// */
// @Override
// public List<PsSalaryConfigVo> queryList(PsSalaryConfigBo bo) {
// QueryWrapper<PsSalaryConfig> lqw = buildQueryWrapper(bo);
// return baseMapper.selectVoList(lqw);
// }
//
//
//
// /**
// * 新增提成配置
// *
// * @param bo 提成配置
// * @return 是否新增成功
// */
// @Override
// public Boolean insertByBo(PsSalaryConfigBo bo) {
// PsSalaryConfig add = MapstructUtils.convert(bo, PsSalaryConfig.class);
// validEntityBeforeSave(add);
// boolean flag = baseMapper.insert(add) > 0;
// return flag;
// }
//
// /**
// * 修改提成配置
// *
// * @param bo 提成配置
// * @return 是否修改成功
// */
// @Override
// public Boolean updateByBo(PsSalaryConfigBo bo) {
// PsSalaryConfig update = MapstructUtils.convert(bo, PsSalaryConfig.class);
// validEntityBeforeSave(update);
// return baseMapper.updateById(update) > 0;
// }
//
// /**
// * 保存前的数据校验
// */
// private void validEntityBeforeSave(PsSalaryConfig entity){
// //TODO 做一些数据校验,如唯一约束
// }
//
// /**
// * 校验并批量删除提成配置信息
// *
// * @param ids 待删除的主键集合
// * @param isValid 是否进行有效性校验
// * @return 是否删除成功
// */
// @Override
// public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
// if(isValid){
// //TODO 做一些业务上的校验,判断是否需要校验
// }
// return baseMapper.deleteBatchIds(ids) > 0;
// }
}

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.PsSalaryConfigMapper">
</mapper>

View File

@ -1,10 +1,14 @@
package com.pusong.system.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pusong.common.core.service.PostService;
import com.pusong.common.core.utils.SpringUtils;
import com.pusong.system.domain.vo.SysDeptVo;
import lombok.RequiredArgsConstructor;
import com.pusong.common.core.constant.UserConstants;
import com.pusong.common.core.exception.ServiceException;
@ -25,6 +29,7 @@ import com.pusong.system.mapper.SysUserPostMapper;
import com.pusong.system.service.ISysPostService;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@ -36,7 +41,7 @@ import java.util.stream.Collectors;
*/
@RequiredArgsConstructor
@Service
public class SysPostServiceImpl implements ISysPostService {
public class SysPostServiceImpl implements ISysPostService, PostService {
private final SysPostMapper baseMapper;
private final SysDeptMapper deptMapper;
@ -228,4 +233,22 @@ public class SysPostServiceImpl implements ISysPostService {
SysPost post = MapstructUtils.convert(bo, SysPost.class);
return baseMapper.updateById(post);
}
/**
* 通过岗位ID查询岗位名称
*
* @param postIds 岗位ID串逗号分隔
* @return 岗位名称串逗号分隔
*/
@Override
public String selectPostNameByIds(String postIds) {
List<String> list = new ArrayList<>();
for (Long id : StringUtils.splitTo(postIds, Convert::toLong)) {
SysPostVo vo = SpringUtils.getAopProxy(this).selectPostById(id);
if (ObjectUtil.isNotNull(vo)) {
list.add(vo.getPostName());
}
}
return String.join(StringUtils.SEPARATOR, list);
}
}