人员合同数据列表接口开发

This commit is contained in:
LIUFL 2024-09-11 17:39:18 +08:00
parent 12c07f1e8a
commit ae55723f8b
7 changed files with 220 additions and 2 deletions

View File

@ -22,6 +22,9 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
import java.util.List;
import java.util.Map;
/**
* 员工提成提成
*
@ -58,6 +61,17 @@ public class HomeController extends BaseController {
public R<ReturnMoneyInfoVo> returnMoney(@RequestParam() Integer type) {
return R.ok(homeService.returnMoney(type));
}
/**
* 首页大盘数据人员合同金额统计
* @param type 1本月 2上月 3本季度 4本年 5所有
* @return
*/
@SaCheckPermission("business:salary:list")
@GetMapping("/getUserContractAmounts")
public R<List> getUserContractAmounts(@RequestParam() Integer type, @RequestParam() Long deptId) {
return R.ok(homeService.getUserContractAmountsByDeptId(type,deptId));
}
/**
* 首页大盘数据各渠道成交
* @param type 1本月 2上月 3本季度 4本年 5所有

View File

@ -0,0 +1,33 @@
package com.pusong.business.domain.vo.home;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class UserContractAmountInfo {
/**
* 用户id
*/
private Long userId;
/**
* 用户名字
*/
private String nickName;
/**
* 合同编号
*/
private String contractCode;
/**
* 是否为续签合同 0 1
*/
private String isDue;
/**
* 合同类型
*/
private String businessType;
/**
* 合同价格
*/
private BigDecimal contractAmount;
}

View File

@ -0,0 +1,59 @@
package com.pusong.business.domain.vo.home;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class UserContractAmountVo {
/**
* 用户id
*/
private Long userId;
private String dateStr;
/**
* 用户名字
*/
private String nickName;
/**
* 与其他人合同金额的占比
*/
private String amountPer;
/**
* 用户所有合同总金额
*/
private BigDecimal sumAmount=new BigDecimal(0);
/**
* 托管类型合同总金额 类型号:4
*/
private BigDecimal tuoGuanAmount=new BigDecimal(0);
/**
* 续费类型合同总金额
*/
private BigDecimal xuFeiAmount=new BigDecimal(0);
/**
* 软件定制类型合同总金额 类型号:9
*/
private BigDecimal softwareDevAmount=new BigDecimal(0);
/**
* 其他类型合同总金额
*/
private BigDecimal otherAmount=new BigDecimal(0);
public void addSumAmount(BigDecimal amount){
sumAmount=sumAmount.add(amount);
}
public void addTuoGuanAmount(BigDecimal amount){
tuoGuanAmount=tuoGuanAmount.add(amount);
}
public void addXuFeiAmount(BigDecimal amount){
xuFeiAmount=xuFeiAmount.add(amount);
}
public void addSoftwareDevAmount(BigDecimal amount){
softwareDevAmount=softwareDevAmount.add(amount);
}
public void addOtherAmount(BigDecimal amount) {
otherAmount=otherAmount.add(amount);
}
}

View File

@ -10,6 +10,7 @@ import com.pusong.business.domain.vo.PsContractInfoVo;
import com.pusong.business.domain.vo.PsCustomInfoVo;
import com.pusong.business.domain.vo.PsSalaryContractVo;
import com.pusong.business.domain.vo.home.ChannelPayInfo;
import com.pusong.business.domain.vo.home.UserContractAmountInfo;
import com.pusong.common.mybatis.annotation.DataColumn;
import com.pusong.common.mybatis.annotation.DataPermission;
import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
@ -44,6 +45,7 @@ public interface PsContractInfoMapper extends BaseMapperPlus<PsContractInfo, PsC
List<PsSalaryContract> querySalaryListByCodes(@Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);
List<Map<String,Object>> homePageReturnMoneyInfo(@Param("queryParam") Map<String, Object> queryParam);
List<UserContractAmountInfo> getUserContractTypeAmountsByDeptId(@Param("queryParam") Map<String, Object> queryParam);
//首页查询各个渠道成交的合同

View File

@ -4,6 +4,8 @@ import com.pusong.business.domain.vo.home.*;
import java.util.Map;
import java.util.List;
/**
* 首页相关接口
*/
@ -12,7 +14,7 @@ public interface HomeService {
MakeAmountVo selectMakeAmount(Integer type);
ReturnMoneyInfoVo returnMoney(Integer type);
List getUserContractAmountsByDeptId(Integer type, Long deptId);
/**
* 首页大盘数据各渠道成交
* @param type

View File

@ -209,6 +209,89 @@ public class HomeServiceImpl implements HomeService {
return res;
}
/**
* 获取部门下各员工的合同总金额
* @param type 日期过滤规则
* @param deptId 部门id
* @return
*/
public List getUserContractAmountsByDeptId(Integer type,Long deptId) {
Map<String, Object> mapParam = this.getDate(type);
LocalDate startDate = (LocalDate)mapParam.get("startDate");
LocalDate endDate = (LocalDate)mapParam.get("endDate");
String date = (String)mapParam.get("date");
Map<String,Object> queryParam=new HashMap<>();
queryParam.put("startDate",startDate);
queryParam.put("endDate",endDate);
queryParam.put("contractStatus",ContractStatusEnum.INIT.getCode());
queryParam.put("isCancel",CommonStatusEnum.SUCCESS.getCode());
queryParam.put("deptId",deptId);
//查询各类合同总金额
List<UserContractAmountInfo> list=psContractInfoMapper.getUserContractTypeAmountsByDeptId(queryParam);
Map<Long,UserContractAmountVo> res=new HashMap<>();
//记录合同编码防止重复
Map<String,String> repeatContractCode=new HashMap<>();
for(UserContractAmountInfo obj:list){
UserContractAmountVo vo=res.get(obj.getUserId());
if(vo==null){
vo=new UserContractAmountVo();
vo.setUserId(obj.getUserId());
vo.setNickName(obj.getNickName());
vo.setDateStr(date);
res.put(obj.getUserId(),vo);
}
if(repeatContractCode.get(obj.getContractCode())==null){
repeatContractCode.put(obj.getContractCode(),obj.getContractCode());
vo.addSumAmount(obj.getContractAmount());
}
//托管合同金额累计
if(obj.getBusinessType()!=null&&obj.getBusinessType().equals("4")){
vo.addTuoGuanAmount(obj.getContractAmount());
} else
//软件开发合同金额累计
if (obj.getBusinessType()!=null&&obj.getBusinessType().equals("9")) {
vo.addSoftwareDevAmount(obj.getContractAmount());
} else
//其他合同金额累计
if(obj.getIsDue()==null||obj.getIsDue().equals("0")){
vo.addOtherAmount(obj.getContractAmount());
}
//续签合同金额累计
if(obj.getIsDue()!=null&&obj.getIsDue().equals("1")){
vo.addXuFeiAmount(obj.getContractAmount());
}
}
//构建表格第一行数据
UserContractAmountVo title= new UserContractAmountVo();
title.setNickName("总计");
title.setDateStr(date);
title.setOtherAmount(null);
title.setSoftwareDevAmount(null);
title.setTuoGuanAmount(null);
title.setXuFeiAmount(null);
//按总金额降序处理
List<UserContractAmountVo> listData=res.values().stream().sorted(
Comparator.comparing(UserContractAmountVo::getSumAmount,Comparator.reverseOrder())).collect(Collectors.toList());
for (UserContractAmountVo v:listData) {
title.addSumAmount(v.getSumAmount());
}
//计算金额占比
for (UserContractAmountVo v:listData) {
v.setAmountPer(v.getSumAmount().multiply(new BigDecimal("100.0")).divide(title.getSumAmount(),2, RoundingMode.HALF_UP).toPlainString()+"%");
}
listData.add(0,title);
return listData;
}
/**

View File

@ -80,12 +80,37 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
info.apply_date >= #{queryParam.startDate} and
</if>
<if test="queryParam.endDate != null">
info.apply_date &lt;= #{queryParam.endDate} and
info.apply_date &lt; #{queryParam.endDate} and
</if>
info.contract_status != #{queryParam.contractStatus} and
info.is_cancel != #{queryParam.isCancel}
</select>
<select id="getUserContractTypeAmountsByDeptId" resultType="com.pusong.business.domain.vo.home.UserContractAmountInfo">
SELECT
u.user_id as userId,
u.nick_name as nickName,
bus.business_type as businessType,
IFNULL(info.contract_amount,0) as contractAmount,
info.is_due as isDue,
info.contract_code as contractCode
FROM sys_user u
LEFT JOIN ps_contract_info info on
u.user_id=info.custom_manager
and info.contract_status != #{queryParam.contractStatus}
and info.is_cancel != #{queryParam.isCancel}
<if test="queryParam.startDate != null">
and info.apply_date >= #{queryParam.startDate}
</if>
<if test="queryParam.endDate != null">
and info.apply_date &lt; #{queryParam.endDate}
</if>
LEFT JOIN ps_contract_business bus on bus.contract_code=info.contract_code
WHERE u.dept_id=#{queryParam.deptId}
</select>
<select id="byChannel" resultType="com.pusong.business.domain.vo.home.ChannelPayInfo">
select