This commit is contained in:
linfso 2025-03-16 20:26:15 +08:00
parent 6feab7ee97
commit 6a52a82e5f
5 changed files with 78 additions and 28 deletions

View File

@ -19,12 +19,14 @@ import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.xdadan.erp.common.annotation.filter.jackson.JacksonFilter; import com.xdadan.erp.common.annotation.filter.jackson.JacksonFilter;
import com.xdadan.erp.common.core.redis.RedissonService;
import com.xdadan.erp.common.utils.DateUtils; import com.xdadan.erp.common.utils.DateUtils;
import com.xdadan.erp.emis.domain.EmisCommissionDtl; import com.xdadan.erp.emis.domain.EmisCommissionDtl;
import com.xdadan.erp.emis.domain.EmisWaybill; import com.xdadan.erp.emis.domain.EmisWaybill;
import com.xdadan.erp.emis.service.EmisBaseService; import com.xdadan.erp.emis.service.EmisBaseService;
import com.xdadan.erp.emis.service.IEmisCommissionDtlService; import com.xdadan.erp.emis.service.IEmisCommissionDtlService;
import com.xdadan.erp.emis.utils.WaybillHelper; import com.xdadan.erp.emis.utils.WaybillHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
@ -54,6 +56,7 @@ import com.xdadan.erp.emis.service.IEmisCommissionProfitService;
* @author linfso * @author linfso
* @date 2024-10-24 01:46:36 * @date 2024-10-24 01:46:36
*/ */
@Slf4j
@RestController @RestController
@RequestMapping("/emis/emisCommissionProfit") @RequestMapping("/emis/emisCommissionProfit")
public class EmisCommissionProfitController extends BaseController public class EmisCommissionProfitController extends BaseController
@ -64,29 +67,67 @@ public class EmisCommissionProfitController extends BaseController
@Autowired @Autowired
private IEmisCommissionDtlService emisCommissionDtlService; private IEmisCommissionDtlService emisCommissionDtlService;
@Autowired
RedissonService redissonService;
@Autowired @Autowired
private EmisBaseService emisBaseService; private EmisBaseService emisBaseService;
@GetMapping(value = "/batchReCalcProfitByBillCode") @GetMapping(value = "/reCalcByBillCode")
public AjaxResult batchReCalcProfitByBillCode(String billCode) public AjaxResult reCalcByBillCode(String billCode)
{ {
if(!StringUtils.isEmpty(billCode)){ if(StringUtils.isEmpty(billCode)){
billCode=WaybillHelper.formatQueryValue(billCode);
String[] billCodeSortList = billCode.split(",");
if(billCodeSortList.length>0){
for (int i=0;i<billCodeSortList.length;i++){
String subBillCode=billCodeSortList[i];
try {
emisCommissionProfitService.reCalcProfitByBillCode(subBillCode);
}catch (Exception ex){
return AjaxResult.error("计算失败-单号:["+subBillCode+"]");
}
}
}
return AjaxResult.success("计算成功");
}else{
return AjaxResult.error("计算失败-单号不能为空"); return AjaxResult.error("计算失败-单号不能为空");
} }
try {
billCode = WaybillHelper.formatQueryValue(billCode);
String[] billCodeSortList = billCode.split(",");
if (billCodeSortList.length > 0) {
for (int i = 0; i < billCodeSortList.length; i++) {
String subBillCode = billCodeSortList[i];
try {
emisCommissionProfitService.reCalcProfitByBillCode(subBillCode);
} catch (Exception ex) {
return AjaxResult.error("计算失败-单号:[" + subBillCode + "]");
}
}
emisCommissionProfitService.reCalcEmpProfitSumMoney(null, null);
}
return AjaxResult.success("计算成功");
}
catch(Exception ex){
ex.printStackTrace();
return AjaxResult.error("计算异常:"+ex.getMessage());
}
}
@GetMapping(value = "/reCalcByBillMonth")
public AjaxResult reCalcByBillMonth(String billMonth)
{
if(StringUtils.isEmpty(billMonth)){
return AjaxResult.error("月份不能为空");
}
String lockKey="reCalcByBillMonth";
log.info("reCalcByBillMonth start");
// 加锁查询
redissonService.lock(lockKey,300);
try{
EmisWaybill emisWaybill = new EmisWaybill();
emisWaybill.getParams().put("noNeedBlProfit","Y");
emisCommissionProfitService.autoDoBillProfit(emisWaybill);
}catch(Exception ex){
ex.printStackTrace();
log.error("reCalcByBillMonth exception:"+ex.getMessage());
return AjaxResult.error("计算异常:"+ex.getMessage());
}
log.info("reCalcByBillMonth end");
redissonService.unlock(lockKey);
return AjaxResult.success("计算成功");
} }
/** /**

View File

@ -111,13 +111,9 @@ public class EmisCommonController extends EmisBaseController
@Autowired @Autowired
private IEmisTmsCostFeeService emisTmsCostFeeService; private IEmisTmsCostFeeService emisTmsCostFeeService;
@Autowired @Autowired
RedissonService redissonService; RedissonService redissonService;
/** /**
* 获取中心可用简单数 * 获取中心可用简单数
* @param prefix * @param prefix

View File

@ -56,6 +56,14 @@ public interface IEmisCommissionProfitService
*/ */
public void reCalcProfitByBatchNo(String batchNo); public void reCalcProfitByBatchNo(String batchNo);
/**
* 计算汇总数据
* @param empName
* @param billMonth
* @return
*/
public int reCalcEmpProfitSumMoney(String empName,String billMonth);
/** /**
* 查询员工提成表列表 * 查询员工提成表列表
* *

View File

@ -35,7 +35,6 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils; import org.apache.commons.collections4.ListUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.xdadan.erp.emis.service.IEmisCommissionProfitService; import com.xdadan.erp.emis.service.IEmisCommissionProfitService;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -76,11 +75,9 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements
/** /**
* 自动计算提成 * 自动计算提成
*/ */
@Async
@Override @Override
public void autoDoBillProfit(EmisWaybill emisWaybill) { public void autoDoBillProfit(EmisWaybill emisWaybill) {
Map<String,Map<String,String> > profitMap = new HashMap<>();
// 获取需要出账的运单列表 // 获取需要出账的运单列表
List<EmisWaybill> list = emisWaybillMapper.selectWaitDoProfitList(emisWaybill); List<EmisWaybill> list = emisWaybillMapper.selectWaitDoProfitList(emisWaybill);
// 多线程并发处理 // 多线程并发处理
@ -121,11 +118,9 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements
/** /**
* 自动计算批次提成 * 自动计算批次提成
*/ */
@Async
@Override @Override
public void autoDoBatchProfit(EmisTmsSiteBatch tmsSiteBatch) { public void autoDoBatchProfit(EmisTmsSiteBatch tmsSiteBatch) {
Map<String,Map<String,String> > profitMap = new HashMap<>();
// 获取需要出账的运单列表 // 获取需要出账的运单列表
List<EmisTmsSiteBatch> list = emisTmsSiteBatchMapper.selectWaitDoProfitList(tmsSiteBatch); List<EmisTmsSiteBatch> list = emisTmsSiteBatchMapper.selectWaitDoProfitList(tmsSiteBatch);
// 多线程并发处理 // 多线程并发处理
@ -311,6 +306,10 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements
try { try {
// 获取运单信息 // 获取运单信息
EmisWaybill waybill = getWaybillByBillCode(billCode); EmisWaybill waybill = getWaybillByBillCode(billCode);
if(waybill==null){
redissonService.unlock(lockKey);
return;
}
// 先删除该运单已经计算的提成 // 先删除该运单已经计算的提成
emisCommissionDtlMapper.deleteEmisCommissionDtlByBillCode(billCode); emisCommissionDtlMapper.deleteEmisCommissionDtlByBillCode(billCode);
@ -374,7 +373,8 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements
} }
private int reCalcEmpProfitSumMoney(String empName,String billMonth){ @Override
public int reCalcEmpProfitSumMoney(String empName,String billMonth){
String lockKey="reCalcEmpProfitSumMoney_"+empName+billMonth; String lockKey="reCalcEmpProfitSumMoney_"+empName+billMonth;
// 加锁查询 // 加锁查询
log.info("reCalcEmpProfitSumMoney start:"+empName+billMonth); log.info("reCalcEmpProfitSumMoney start:"+empName+billMonth);

View File

@ -147,7 +147,12 @@
batch_no batch_no
FROM FROM
emis_tms_site_batch a emis_tms_site_batch a
WHERE a.del_flag = '0' AND a.bl_profit = '0' WHERE a.del_flag = '0'
<if test="params.noNeedBlProfit == null">
AND a.bl_profit = '0'
</if>
<if test="params.billMonth != null and params.billMonth != ''"> <if test="params.billMonth != null and params.billMonth != ''">
and DATE_FORMAT(a.etd,'%Y%m')= #{params.billMonth} and DATE_FORMAT(a.etd,'%Y%m')= #{params.billMonth}
</if> </if>