This commit is contained in:
1073413548 2024-08-26 11:20:24 +08:00
parent 09a4124c76
commit 27cbaf2144
12 changed files with 294 additions and 205 deletions

View File

@ -8,6 +8,7 @@ import java.lang.management.ManagementFactory;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@ -184,4 +185,16 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
return Date.from(zdt.toInstant());
}
public static String toString(LocalDate date,String from){
// 创建一个DateTimeFormatter实例来定义日期格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(from);
// 使用formatter转换LocalDate到字符串
return date.format(formatter);
}
public static String toString(LocalDate date){
return toString(date,"yyyy-MM-dd");
}
}

View File

@ -4,14 +4,15 @@ 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.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.enums.ContractStatusEnum;
import com.pusong.business.mapper.PsContractInfoMapper;
import com.pusong.business.mapper.PsSalaryConfigMapper;
import com.pusong.business.mapper.PsSalaryMapper;
import com.pusong.business.service.IPsContractBusinessService;
import com.pusong.business.service.impl.PsTaskServiceImpl;
import com.pusong.common.core.utils.DateUtils;
import com.pusong.system.domain.SysUser;
import com.pusong.system.domain.SysUserPost;
@ -26,13 +27,10 @@ import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -49,11 +47,12 @@ public class CalSalaryBatch {
private SysUserPostMapper sysUserPostMapper;
@Resource
private PsSalaryConfigMapper psSalaryConfigMapper;
private PsSalaryMapper psSalaryMapper;
/**
* 每月1日凌晨1点执行
*/
@Scheduled(cron = "0 0 1 1 * ?")
public void excute(){
public void execute(){
log.info("员工提成批处理开始");
LocalDate now = LocalDate.now();
LocalDate lastDayOfLastMonth = now.with(TemporalAdjusters.firstDayOfMonth());//这个月第一天0分0秒
@ -95,7 +94,13 @@ public class CalSalaryBatch {
BigDecimal salary = calSalary(busin, configMap.get(post.getPostId()));
log.info("进行计算提成计算{}",salary);
log.info("进行存表");
PsSalary psSalary = new PsSalary();
psSalary.setSalaryMoney(salary);
psSalary.setSalaryMonth(DateUtils.toString(firstDayOfLastMonth,"yyyy-MM"));
psSalary.setSalaryDate(DateUtils.toDate(firstDayOfLastMonth));
psSalary.setPostId(post.getPostId());
psSalary.setUserId(userId);
// psSalaryMapper.insert(psSalary);
}
log.info("员工提成批处理结束");

View File

@ -37,7 +37,7 @@ public class PsSalaryController extends BaseController {
private final IPsSalaryService psSalaryService;
/**
* 查询员工提成提成列表
* 提成列表查询
*/
@SaCheckPermission("business:salary:list")
@GetMapping("/list")
@ -45,61 +45,61 @@ public class PsSalaryController extends BaseController {
return psSalaryService.queryPageList(bo, pageQuery);
}
/**
* 导出员工提成提成列表
*/
@SaCheckPermission("business:salary:export")
@Log(title = "员工提成提成", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(PsSalaryBo bo, HttpServletResponse response) {
List<PsSalaryVo> list = psSalaryService.queryList(bo);
ExcelUtil.exportExcel(list, "员工提成提成", PsSalaryVo.class, response);
}
/**
* 获取员工提成提成详细信息
*
* @param id 主键
*/
@SaCheckPermission("business:salary:query")
@GetMapping("/{id}")
public R<PsSalaryVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(psSalaryService.queryById(id));
}
/**
* 新增员工提成提成
*/
@SaCheckPermission("business:salary:add")
@Log(title = "员工提成提成", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody PsSalaryBo bo) {
return toAjax(psSalaryService.insertByBo(bo));
}
/**
* 修改员工提成提成
*/
@SaCheckPermission("business:salary:edit")
@Log(title = "员工提成提成", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody PsSalaryBo bo) {
return toAjax(psSalaryService.updateByBo(bo));
}
/**
* 删除员工提成提成
*
* @param ids 主键串
*/
@SaCheckPermission("business:salary:remove")
@Log(title = "员工提成提成", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(psSalaryService.deleteWithValidByIds(List.of(ids), true));
}
// /**
// * 导出员工提成提成列表
// */
// @SaCheckPermission("business:salary:export")
// @Log(title = "员工提成提成", businessType = BusinessType.EXPORT)
// @PostMapping("/export")
// public void export(PsSalaryBo bo, HttpServletResponse response) {
// List<PsSalaryVo> list = psSalaryService.queryList(bo);
// ExcelUtil.exportExcel(list, "员工提成提成", PsSalaryVo.class, response);
// }
//
// /**
// * 获取员工提成提成详细信息
// *
// * @param id 主键
// */
// @SaCheckPermission("business:salary:query")
// @GetMapping("/{id}")
// public R<PsSalaryVo> getInfo(@NotNull(message = "主键不能为空")
// @PathVariable Long id) {
// return R.ok(psSalaryService.queryById(id));
// }
//
// /**
// * 新增员工提成提成
// */
// @SaCheckPermission("business:salary:add")
// @Log(title = "员工提成提成", businessType = BusinessType.INSERT)
// @RepeatSubmit()
// @PostMapping()
// public R<Void> add(@Validated(AddGroup.class) @RequestBody PsSalaryBo bo) {
// return toAjax(psSalaryService.insertByBo(bo));
// }
//
// /**
// * 修改员工提成提成
// */
// @SaCheckPermission("business:salary:edit")
// @Log(title = "员工提成提成", businessType = BusinessType.UPDATE)
// @RepeatSubmit()
// @PutMapping()
// public R<Void> edit(@Validated(EditGroup.class) @RequestBody PsSalaryBo bo) {
// return toAjax(psSalaryService.updateByBo(bo));
// }
//
// /**
// * 删除员工提成提成
// *
// * @param ids 主键串
// */
// @SaCheckPermission("business:salary:remove")
// @Log(title = "员工提成提成", businessType = BusinessType.DELETE)
// @DeleteMapping("/{ids}")
// public R<Void> remove(@NotEmpty(message = "主键不能为空")
// @PathVariable Long[] ids) {
// return toAjax(psSalaryService.deleteWithValidByIds(List.of(ids), true));
// }
}

View File

@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.io.Serial;
import java.util.Date;
/**
* 员工提成提成对象 ps_salary
@ -36,13 +37,47 @@ public class PsSalary extends TenantEntity {
/**
* 员工提成金额
*/
private BigDecimal serviceProject;
private BigDecimal salaryMoney;
/**
* 提成月份
*/
private String salaryRatio;
private String salaryMonth;
/**
* 提成日期
*/
private Date salaryDate;
/**
* 岗位di
*/
private Long postId;
/**
* 合同数量
*/
private Integer contractNum;
/**
* 已完成数量
*/
private Integer finistContractNum;
/**
* 未完成数量
*/
private Integer unfinistContractNum;
/**
* 合同总金额
*/
private BigDecimal contractMoney;
/**
* 已完成金额
*/
private BigDecimal finistContractMoney;
/**
* 未完成金额
*/
private BigDecimal unfinistContractMoney;
/**
* 2逻辑删除 0 默认有效
*/

View File

@ -1,5 +1,6 @@
package com.pusong.business.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pusong.business.domain.PsSalary;
import com.pusong.common.core.validate.AddGroup;
import com.pusong.common.core.validate.EditGroup;
@ -9,6 +10,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.util.Date;
/**
* 员工提成提成业务对象 ps_salary
@ -22,28 +24,24 @@ import java.math.BigDecimal;
public class PsSalaryBo extends BaseEntity {
/**
* 主键id
* 姓名
*/
@NotNull(message = "主键id不能为空", groups = { EditGroup.class })
private Long id;
private String name;
/**
* 员工id
* 开始时间
*/
@NotNull(message = "员工id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long userId;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date startDate;
/**
* 员工提成金额
* 结束时间
*/
@NotNull(message = "员工提成金额不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal serviceProject;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endDate;
/**
* 提成月份
*/
@NotBlank(message = "提成月份不能为空", groups = { AddGroup.class, EditGroup.class })
private String salaryRatio;
}

View File

@ -32,26 +32,22 @@ public class PsSalaryVo implements Serializable {
/**
* 主键id
*/
@ExcelProperty(value = "主键id")
private Long id;
/**
* 员工id
*/
@ExcelProperty(value = "员工id")
private Long userId;
/**
* 员工提成金额
*/
@ExcelProperty(value = "员工提成金额")
private BigDecimal serviceProject;
private BigDecimal salaryMoney;
/**
* 提成月份
* 提成日期
*/
@ExcelProperty(value = "提成月份")
private String salaryRatio;
private String salaryDate;
}

View File

@ -1,8 +1,17 @@
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接口
@ -12,4 +21,10 @@ import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
*/
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);
}

View File

@ -24,11 +24,11 @@ public interface PsTaskMainMapper extends BaseMapper<PsTaskMain> {
@DataColumn(key = "deptName", value = "main.create_dept"),
@DataColumn(key = "userName", value = "main.create_by")
})
Page<PsTaskMainVo> queryTaskPageList(@Param("page") Page<PsContractInfo> page, @Param(Constants.WRAPPER) Wrapper<PsTaskMain> queryWrapper);
Page<PsTaskMainVo> queryTaskPageList(@Param("page") Page<PsTaskMain> page, @Param(Constants.WRAPPER) Wrapper<PsTaskMain> queryWrapper);
@DataPermission({
@DataColumn(key = "deptName", value = "appo.create_dept"),
@DataColumn(key = "userName", value = "appo.executor")
})
Page<PsTaskMainVo> queryChildTaskPageList(@Param("page") Page<PsContractInfo> page, @Param(Constants.WRAPPER) Wrapper<PsTaskMain> queryWrapper);
Page<PsTaskMainVo> queryChildTaskPageList(@Param("page") Page<PsTaskMain> page, @Param(Constants.WRAPPER) Wrapper<PsTaskMain> queryWrapper);
}

View File

@ -16,13 +16,7 @@ import java.util.List;
*/
public interface IPsSalaryService {
/**
* 查询员工提成提成
*
* @param id 主键
* @return 员工提成提成
*/
PsSalaryVo queryById(Long id);
/**
* 分页查询员工提成提成列表
@ -33,36 +27,43 @@ public interface IPsSalaryService {
*/
TableDataInfo<PsSalaryVo> queryPageList(PsSalaryBo bo, PageQuery pageQuery);
/**
* 查询符合条件的员工提成提成列表
*
* @param bo 查询条件
* @return 员工提成提成列表
*/
List<PsSalaryVo> queryList(PsSalaryBo bo);
/**
* 新增员工提成提成
*
* @param bo 员工提成提成
* @return 是否新增成功
*/
Boolean insertByBo(PsSalaryBo bo);
/**
* 修改员工提成提成
*
* @param bo 员工提成提成
* @return 是否修改成功
*/
Boolean updateByBo(PsSalaryBo bo);
/**
* 校验并批量删除员工提成提成信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
// /**
// * 查询员工提成提成
// *
// * @param id 主键
// * @return 员工提成提成
// */
// PsSalaryVo queryById(Long id);
// /**
// * 查询符合条件的员工提成提成列表
// *
// * @param bo 查询条件
// * @return 员工提成提成列表
// */
// List<PsSalaryVo> queryList(PsSalaryBo bo);
//
// /**
// * 新增员工提成提成
// *
// * @param bo 员工提成提成
// * @return 是否新增成功
// */
// Boolean insertByBo(PsSalaryBo bo);
//
// /**
// * 修改员工提成提成
// *
// * @param bo 员工提成提成
// * @return 是否修改成功
// */
// Boolean updateByBo(PsSalaryBo bo);
//
// /**
// * 校验并批量删除员工提成提成信息
// *
// * @param ids 待删除的主键集合
// * @param isValid 是否进行有效性校验
// * @return 是否删除成功
// */
// Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -31,17 +31,6 @@ public class PsSalaryServiceImpl implements IPsSalaryService {
private final PsSalaryMapper baseMapper;
/**
* 查询员工提成提成
*
* @param id 主键
* @return 员工提成提成
*/
@Override
public PsSalaryVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询员工提成提成列表
*
@ -52,80 +41,101 @@ public class PsSalaryServiceImpl implements IPsSalaryService {
@Override
public TableDataInfo<PsSalaryVo> queryPageList(PsSalaryBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<PsSalary> lqw = buildQueryWrapper(bo);
Page<PsSalaryVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
Page<PsSalaryVo> result = baseMapper.selectSalaryList(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的员工提成提成列表
*
* @param bo 查询条件
* @return 员工提成提成列表
*/
@Override
public List<PsSalaryVo> queryList(PsSalaryBo bo) {
LambdaQueryWrapper<PsSalary> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
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.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());
return lqw;
}
/**
* 新增员工提成提成
*
* @param bo 员工提成提成
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(PsSalaryBo bo) {
PsSalary add = MapstructUtils.convert(bo, PsSalary.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改员工提成提成
*
* @param bo 员工提成提成
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(PsSalaryBo bo) {
PsSalary update = MapstructUtils.convert(bo, PsSalary.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(PsSalary entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除员工提成提成信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
// /**
// * 查询员工提成提成
// *
// * @param id 主键
// * @return 员工提成提成
// */
// @Override
// public PsSalaryVo queryById(Long id){
// return baseMapper.selectVoById(id);
// }
//
// /**
// * 查询符合条件的员工提成提成列表
// *
// * @param bo 查询条件
// * @return 员工提成提成列表
// */
// @Override
// public List<PsSalaryVo> queryList(PsSalaryBo bo) {
// LambdaQueryWrapper<PsSalary> lqw = buildQueryWrapper(bo);
// return baseMapper.selectVoList(lqw);
// }
//
// 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());
// return lqw;
// }
//
// /**
// * 新增员工提成提成
// *
// * @param bo 员工提成提成
// * @return 是否新增成功
// */
// @Override
// public Boolean insertByBo(PsSalaryBo bo) {
// PsSalary add = MapstructUtils.convert(bo, PsSalary.class);
// validEntityBeforeSave(add);
// boolean flag = baseMapper.insert(add) > 0;
// if (flag) {
// bo.setId(add.getId());
// }
// return flag;
// }
//
// /**
// * 修改员工提成提成
// *
// * @param bo 员工提成提成
// * @return 是否修改成功
// */
// @Override
// public Boolean updateByBo(PsSalaryBo bo) {
// PsSalary update = MapstructUtils.convert(bo, PsSalary.class);
// validEntityBeforeSave(update);
// return baseMapper.updateById(update) > 0;
// }
//
// /**
// * 保存前的数据校验
// */
// private void validEntityBeforeSave(PsSalary 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

@ -4,4 +4,19 @@ 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" resultMap="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>

View File

@ -21,6 +21,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
main.start_date,
main.task_status,
main.contract_code,
main.invoice,
con.is_proxy con_is_proxy,
con.custom_scene con_custom_scene,
con.custom_manager con_custom_manager,