Commit dea8d07f by jianan

新单跟进85

parent 3bafe133
package com.yd.csf.api.controller;
import com.alibaba.excel.EasyExcel;
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.yd.auth.core.dto.AuthUserDto;
......@@ -12,11 +13,12 @@ import com.yd.csf.api.dto.CommissionExcelDTO;
import com.yd.csf.service.common.ErrorCode;
import com.yd.csf.service.dto.*;
import com.yd.csf.service.model.Commission;
import com.yd.csf.service.model.CommissionEditRecord;
import com.yd.csf.service.model.CommissionExpected;
import com.yd.csf.service.service.CommissionEditRecordService;
import com.yd.csf.service.service.CommissionExpectedService;
import com.yd.csf.service.service.CommissionService;
import com.yd.csf.service.vo.CommissionStatisticsVO;
import com.yd.csf.service.vo.CommissionVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.commons.collections4.CollectionUtils;
......@@ -56,6 +58,9 @@ public class ApiCommissionController {
@Resource
private CommissionExpectedService commissionExpectedService;
@Resource
private CommissionEditRecordService commissionEditRecordService;
@PostMapping("/upload/excel")
@Operation(summary = "上传保单来佣Excel文件")
......@@ -251,6 +256,23 @@ public class ApiCommissionController {
}
/**
* 来佣操作记录列表
*
* @param commissionBizId
* @return
*/
@GetMapping("/edit/records")
@Operation(summary = "来佣操作记录列表")
public Result<List<CommissionEditRecord>> getCommissionEditRecords(@RequestParam("commissionBizId") String commissionBizId) {
if (StringUtils.isBlank(commissionBizId)) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), ErrorCode.PARAMS_ERROR.getMessage());
}
return Result.success(commissionEditRecordService.list(new LambdaQueryWrapper<CommissionEditRecord>()
.eq(CommissionEditRecord::getCommissionBizId, commissionBizId)
.orderByAsc(CommissionEditRecord::getSeq)));
}
/**
* 计算统计数据 总金额、总入账金额、待入账金额、已入账比例(已入账金额/总金额)、总保单数
*/
@PostMapping("/statistics")
......
......@@ -17,6 +17,8 @@ import com.yd.csf.service.common.ErrorCode;
import com.yd.csf.service.dto.*;
import com.yd.csf.service.model.Fortune;
import com.yd.csf.service.model.FortuneAccount;
import com.yd.csf.service.model.FortuneAccountEditRecord;
import com.yd.csf.service.service.FortuneAccountEditRecordService;
import com.yd.csf.service.service.FortuneAccountService;
import com.yd.csf.service.service.FortuneService;
import io.swagger.v3.oas.annotations.Operation;
......@@ -59,6 +61,9 @@ public class ApiFortuneController {
@Resource
private FortuneAccountService fortuneAccountService;
@Resource
private FortuneAccountEditRecordService fortuneAccountEditRecordService;
@PostMapping("/upload/excel")
@Operation(summary = "上传保单发佣Excel文件")
......@@ -307,6 +312,22 @@ public class ApiFortuneController {
}
/**
* 修订记录
*
* @param fortuneAccountBizId
* @return
*/
@PostMapping("/editRecords/fortuneAccount")
@Operation(summary = "修订记录")
public Result<List<FortuneAccountEditRecord>> getFortuneAccountEditRecords(@RequestParam("fortuneAccountBizId") String fortuneAccountBizId) {
if (StringUtils.isBlank(fortuneAccountBizId)) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), "fortuneAccountBizId不能为空");
}
return Result.success(fortuneAccountEditRecordService.list(new QueryWrapper<FortuneAccountEditRecord>()
.eq("fortune_account_biz_id", fortuneAccountBizId)));
}
/**
* 完成出账
*
* @param completeFortuneAccountRequest
......
package com.yd.csf.service.dao;
import com.yd.csf.service.model.CommissionEditRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author Zhang Jianan
* @description 针对表【commission_edit_record(来佣修改记录表)】的数据库操作Mapper
* @createDate 2025-11-24 16:45:37
* @Entity generator.domain.CommissionEditRecord
*/
public interface CommissionEditRecordMapper extends BaseMapper<CommissionEditRecord> {
}
package com.yd.csf.service.dao;
import com.yd.csf.service.model.FortuneAccountEditRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author Zhang Jianan
* @description 针对表【fortune_account_edit_record(薪资修订记录表)】的数据库操作Mapper
* @createDate 2025-11-25 11:14:20
* @Entity generator.domain.FortuneAccountEditRecord
*/
public interface FortuneAccountEditRecordMapper extends BaseMapper<FortuneAccountEditRecord> {
}
......@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import lombok.Data;
/**
......@@ -71,6 +72,11 @@ public class Commission implements Serializable {
private String currency;
/**
* 结算汇率
*/
private String exchangeRate;
/**
* 来佣日期
*/
private Date commissionDate;
......
package com.yd.csf.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 来佣修改记录表
* @TableName commission_edit_record
*/
@TableName(value ="commission_edit_record")
@Data
public class CommissionEditRecord implements Serializable {
/**
* 主键
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 保单来佣业务id
*/
private String commissionBizId;
/**
* 操作人userid
*/
private String userBizId;
/**
* 操作人
*/
private String userName;
/**
* 序号
*/
private Integer seq;
/**
* 变更字段
*/
private String field;
/**
* 变更前信息
*/
private Object beforeChange;
/**
* 变更后信息
*/
private Object afterChange;
/**
* 通用备注
*/
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
private Integer isDeleted;
/**
* 创建时间
*/
private Date createTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.yd.csf.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 薪资修订记录表
* @TableName fortune_account_edit_record
*/
@TableName(value ="fortune_account_edit_record")
@Data
public class FortuneAccountEditRecord implements Serializable {
/**
* 主键
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 薪资记录业务id
*/
private String fortuneAccountBizId;
/**
* 修订人userid
*/
private String userBizId;
/**
* 修订人
*/
private String userName;
/**
* 修订内容
*/
private String editContent;
/**
* 通用备注
*/
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
private Integer isDeleted;
/**
* 创建时间
*/
private Date createTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.yd.csf.service.service;
import com.yd.csf.service.model.CommissionEditRecord;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author Zhang Jianan
* @description 针对表【commission_edit_record(来佣修改记录表)】的数据库操作Service
* @createDate 2025-11-24 16:45:37
*/
public interface CommissionEditRecordService extends IService<CommissionEditRecord> {
}
package com.yd.csf.service.service;
import com.yd.csf.service.model.FortuneAccountEditRecord;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author Zhang Jianan
* @description 针对表【fortune_account_edit_record(薪资修订记录表)】的数据库操作Service
* @createDate 2025-11-25 11:14:20
*/
public interface FortuneAccountEditRecordService extends IService<FortuneAccountEditRecord> {
}
package com.yd.csf.service.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.csf.service.model.CommissionEditRecord;
import com.yd.csf.service.service.CommissionEditRecordService;
import com.yd.csf.service.dao.CommissionEditRecordMapper;
import org.springframework.stereotype.Service;
/**
* @author Zhang Jianan
* @description 针对表【commission_edit_record(来佣修改记录表)】的数据库操作Service实现
* @createDate 2025-11-24 16:45:37
*/
@Service
public class CommissionEditRecordServiceImpl extends ServiceImpl<CommissionEditRecordMapper, CommissionEditRecord>
implements CommissionEditRecordService{
}
package com.yd.csf.service.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yd.auth.core.dto.AuthUserDto;
import com.yd.auth.core.utils.SecurityUtil;
......@@ -20,6 +21,7 @@ import com.yd.csf.service.service.*;
import com.yd.csf.service.dao.CommissionMapper;
import com.yd.csf.service.vo.CommissionStatisticsVO;
import com.yd.csf.service.vo.CommissionVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
......@@ -29,7 +31,6 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.*;
import java.util.stream.Collectors;
......@@ -39,6 +40,7 @@ import java.util.stream.Collectors;
* @createDate 2025-09-19 16:08:05
*/
@Service
@Slf4j
public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commission>
implements CommissionService {
......@@ -54,6 +56,8 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
private CommissionExpectedService commissionExpectedService;
@Resource
private IExpectedFortuneService iExpectedFortuneService;
@Resource
private CommissionEditRecordService commissionEditRecordService;
@Override
......@@ -108,7 +112,16 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
if (commission == null) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "未找到该来佣记录");
}
// 获取当前登录用户
AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser();
String loginUserId = currentLoginUser.getId().toString();
// 保存修改记录
saveUpdateCommissionRecord(commission, commissionUpdateRequest, currentLoginUser);
// 更新属性
BeanUtils.copyProperties(commissionUpdateRequest, commission, "id", "commissionBizId");
// 查询预计来佣
CommissionExpected commissionExpected = queryByCommission(commission);
if (commissionExpected != null) {
......@@ -121,15 +134,84 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commission.setRemark("未找到当前来佣对应的预计来佣,比对失败");
}
// 获取当前登录用户
AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser();
String loginUserId = currentLoginUser.getId().toString();
commission.setUpdaterId(loginUserId);
commission.setUpdateTime(new Date());
return this.updateById(commission);
}
private void saveUpdateCommissionRecord(Commission commission, CommissionUpdateRequest commissionUpdateRequest, AuthUserDto currentLoginUser) {
// 保存修改记录
List<CommissionEditRecord> commissionEditRecords = new ArrayList<>();
if (!Objects.equals(commission.getPolicyNo(), commissionUpdateRequest.getPolicyNo())) {
CommissionEditRecord commissionRecord = getCommissionEditRecord("保单号", commission.getPolicyNo(), commissionUpdateRequest.getPolicyNo(), commission.getCommissionBizId(), currentLoginUser);
commissionEditRecords.add(commissionRecord);
}
if (!Objects.equals(commission.getReconciliationCompany(), commissionUpdateRequest.getReconciliationCompany())) {
CommissionEditRecord commissionRecord = getCommissionEditRecord("对账公司", commission.getReconciliationCompany(), commissionUpdateRequest.getReconciliationCompany(), commission.getCommissionBizId(), currentLoginUser);
commissionEditRecords.add(commissionRecord);
}
if (!Objects.equals(commission.getCommissionPeriod(), commissionUpdateRequest.getCommissionPeriod())) {
CommissionEditRecord commissionRecord = getCommissionEditRecord("佣金期数", commission.getCommissionPeriod(), commissionUpdateRequest.getCommissionPeriod(), commission.getCommissionBizId(), currentLoginUser);
commissionEditRecords.add(commissionRecord);
}
if (!Objects.equals(commission.getTotalPeriod(), commissionUpdateRequest.getTotalPeriod())) {
CommissionEditRecord commissionRecord = getCommissionEditRecord("总来佣期数", commission.getTotalPeriod(), commissionUpdateRequest.getTotalPeriod(), commission.getCommissionBizId(), currentLoginUser);
commissionEditRecords.add(commissionRecord);
}
if (!Objects.equals(commission.getCommissionName(), commissionUpdateRequest.getCommissionName())) {
CommissionEditRecord commissionRecord = getCommissionEditRecord("来佣名称", commission.getCommissionName(), commissionUpdateRequest.getCommissionName(), commission.getCommissionBizId(), currentLoginUser);
commissionEditRecords.add(commissionRecord);
}
if (commission.getAmount().compareTo(commissionUpdateRequest.getAmount()) != 0) {
CommissionEditRecord commissionRecord = getCommissionEditRecord("来佣金额", commission.getAmount(), commissionUpdateRequest.getAmount(), commission.getCommissionBizId(), currentLoginUser);
commissionEditRecords.add(commissionRecord);
}
if (!Objects.equals(commission.getCurrency(), commissionUpdateRequest.getCurrency())) {
CommissionEditRecord commissionRecord = getCommissionEditRecord("币种", commission.getCurrency(), commissionUpdateRequest.getCurrency(), commission.getCommissionBizId(), currentLoginUser);
commissionEditRecords.add(commissionRecord);
}
if (!Objects.equals(commission.getExchangeRate(), commissionUpdateRequest.getExchangeRate())) {
CommissionEditRecord commissionRecord = getCommissionEditRecord("结算汇率", commission.getExchangeRate(), commissionUpdateRequest.getExchangeRate(), commission.getCommissionBizId(), currentLoginUser);
commissionEditRecords.add(commissionRecord);
}
if (!Objects.equals(commission.getCommissionDate(), commissionUpdateRequest.getCommissionDate())) {
CommissionEditRecord commissionRecord = getCommissionEditRecord("来佣日期",
DateUtil.formatDate(commission.getCommissionDate()),
DateUtil.formatDate(commissionUpdateRequest.getCommissionDate()), commission.getCommissionBizId(), currentLoginUser);
commissionEditRecords.add(commissionRecord);
}
if (!Objects.equals(commission.getStatus(), commissionUpdateRequest.getStatus())) {
CommissionEditRecord commissionRecord = getCommissionEditRecord("来佣比对状态", commission.getStatus(), commissionUpdateRequest.getStatus(), commission.getCommissionBizId(), currentLoginUser);
commissionEditRecords.add(commissionRecord);
}
if (!Objects.equals(commission.getRemark(), commissionUpdateRequest.getRemark())) {
CommissionEditRecord commissionRecord = getCommissionEditRecord("备注", commission.getRemark(), commissionUpdateRequest.getRemark(), commission.getCommissionBizId(), currentLoginUser);
commissionEditRecords.add(commissionRecord);
}
if (CollectionUtils.isNotEmpty(commissionEditRecords)) {
// 变更序号从1开始
commissionEditRecords.forEach(commissionRecord -> commissionRecord.setSeq(commissionEditRecords.indexOf(commissionRecord) + 1));
commissionEditRecordService.saveBatch(commissionEditRecords);
}
}
private static CommissionEditRecord getCommissionEditRecord(String field, Object commissionPropertyValue, Object requestPropertyValue, String commissionBizId, AuthUserDto currentLoginUser) {
CommissionEditRecord commissionRecord = new CommissionEditRecord();
commissionRecord.setField(field);
commissionRecord.setBeforeChange(commissionPropertyValue);
commissionRecord.setAfterChange(requestPropertyValue);
commissionRecord.setCommissionBizId(commissionBizId);
commissionRecord.setUserBizId(currentLoginUser.getId().toString());
commissionRecord.setUserName(currentLoginUser.getUsername());
commissionRecord.setCreateTime(new Date());
return commissionRecord;
}
private CommissionExpected queryByCommission(Commission commission) {
QueryWrapper<CommissionExpected> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("policy_no", commission.getPolicyNo());
......
package com.yd.csf.service.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.csf.service.model.FortuneAccountEditRecord;
import com.yd.csf.service.service.FortuneAccountEditRecordService;
import com.yd.csf.service.dao.FortuneAccountEditRecordMapper;
import org.springframework.stereotype.Service;
/**
* @author Zhang Jianan
* @description 针对表【fortune_account_edit_record(薪资修订记录表)】的数据库操作Service实现
* @createDate 2025-11-25 11:14:20
*/
@Service
public class FortuneAccountEditRecordServiceImpl extends ServiceImpl<FortuneAccountEditRecordMapper, FortuneAccountEditRecord>
implements FortuneAccountEditRecordService{
}
package com.yd.csf.service.service.impl;
import java.util.Date;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
......@@ -15,6 +16,8 @@ import com.yd.csf.service.enums.FortuneAccountStatusEnum;
import com.yd.csf.service.enums.FortuneStatusEnum;
import com.yd.csf.service.model.Fortune;
import com.yd.csf.service.model.FortuneAccount;
import com.yd.csf.service.model.FortuneAccountEditRecord;
import com.yd.csf.service.service.FortuneAccountEditRecordService;
import com.yd.csf.service.service.FortuneAccountService;
import com.yd.csf.service.dao.FortuneAccountMapper;
import com.yd.csf.service.service.FortuneService;
......@@ -41,6 +44,9 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
@Resource
private FortuneService fortuneService;
@Resource
private FortuneAccountEditRecordService fortuneAccountEditRecordService;
private final Gson GSON = new Gson();
@Override
......@@ -185,6 +191,8 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
if (fortuneAccount == null) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), ResultCode.NULL_ERROR.getMessage());
}
// 保存修改记录
saveUpdateFortuneAccountRecord(fortuneAccount, fortuneAccountUpdateRequest);
fortuneAccount.setBroker(fortuneAccountUpdateRequest.getBroker());
fortuneAccount.setTeam(fortuneAccountUpdateRequest.getTeam());
......@@ -196,9 +204,40 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
fortuneAccount.setUpdateTime(new Date());
this.updateById(fortuneAccount);
return true;
}
private void saveUpdateFortuneAccountRecord(FortuneAccount fortuneAccount, FortuneAccountUpdateRequest fortuneAccountUpdateRequest) {
FortuneAccountEditRecord fortuneAccountEditRecord = new FortuneAccountEditRecord();
// 薪资记录业务id
fortuneAccountEditRecord.setFortuneAccountBizId(fortuneAccount.getFortuneAccountBizId());
fortuneAccountEditRecord.setIsDeleted(0);
fortuneAccountEditRecord.setCreateTime(new Date());
// 当前登录用户
AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser();
Long loginUserId = currentLoginUser.getId();
fortuneAccountEditRecord.setUserBizId(loginUserId.toString());
fortuneAccountEditRecord.setUserName(currentLoginUser.getUsername());
// 构建修改内容
StringBuilder editContentBuilder = new StringBuilder();
editContentBuilder.append("修改了薪资记录:");
editContentBuilder.append("转介人:").append(fortuneAccountUpdateRequest.getBroker()).append(";");
editContentBuilder.append("团队:").append(fortuneAccountUpdateRequest.getTeam()).append(";");
editContentBuilder.append("出账金额:").append(fortuneAccountUpdateRequest.getAmount()).append(";");
editContentBuilder.append("出账币种:").append(fortuneAccountUpdateRequest.getCurrency()).append(";");
if (StringUtils.isNotBlank(fortuneAccountUpdateRequest.getRemark())) {
editContentBuilder.append("备注:").append(fortuneAccountUpdateRequest.getRemark()).append(";");
}
fortuneAccountEditRecord.setEditContent(editContentBuilder.toString());
fortuneAccountEditRecord.setRemark(fortuneAccountUpdateRequest.getRemark());
fortuneAccountEditRecordService.save(fortuneAccountEditRecord);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean completeFortuneAccount(CompleteFortuneAccountRequest completeFortuneAccountRequest) {
......
<?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.yd.csf.service.dao.CommissionEditRecordMapper">
<resultMap id="BaseResultMap" type="com.yd.csf.service.model.CommissionEditRecord">
<id property="id" column="id" />
<result property="commissionBizId" column="commission_biz_id" />
<result property="userBizId" column="user_biz_id" />
<result property="userName" column="user_name" />
<result property="seq" column="seq" />
<result property="field" column="field" />
<result property="beforeChange" column="before_change" />
<result property="afterChange" column="after_change" />
<result property="remark" column="remark" />
<result property="isDeleted" column="is_deleted" />
<result property="createTime" column="create_time" />
</resultMap>
<sql id="Base_Column_List">
id,commission_biz_id,user_biz_id,user_name,seq,field,before_change,
after_change,remark,is_deleted,create_time
</sql>
</mapper>
<?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.yd.csf.service.dao.FortuneAccountEditRecordMapper">
<resultMap id="BaseResultMap" type="com.yd.csf.service.model.FortuneAccountEditRecord">
<id property="id" column="id" />
<result property="fortuneAccountBizId" column="fortune_account_biz_id" />
<result property="userBizId" column="user_biz_id" />
<result property="userName" column="user_name" />
<result property="editContent" column="edit_content" />
<result property="remark" column="remark" />
<result property="isDeleted" column="is_deleted" />
<result property="createTime" column="create_time" />
</resultMap>
<sql id="Base_Column_List">
id,fortune_account_biz_id,user_biz_id,user_name,edit_content,remark,
is_deleted,create_time
</sql>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment