demand: 现金销售查询增加展示理赔金额。 现金销售支持查询理赔账单列表。 销售剩余额度计算支持过滤理赔账单, 运单录入销售额度计算支持过滤理赔账单。 定时计算销售额度/实时计算支持计算销售理赔金额
committer: heyu
This commit is contained in:
parent
8cce2fa7f4
commit
1ddddfd496
@ -14,6 +14,7 @@ package com.xdadan.erp.web.emis;
|
||||
import java.util.List;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import com.xdadan.erp.emis.domain.EmisWaybill;
|
||||
import com.xdadan.erp.emis.domain.exception.EmisBizError;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
@ -36,6 +37,7 @@ import com.xdadan.erp.common.utils.poi.ExcelUtil;
|
||||
|
||||
import com.xdadan.erp.emis.domain.EmisCreditSalesmen;
|
||||
import com.xdadan.erp.emis.service.IEmisCreditSalesmenService;
|
||||
import com.xdadan.erp.emis.domain.EmisSettleBill;
|
||||
|
||||
/**
|
||||
* 销售信用额度Controller
|
||||
@ -62,6 +64,16 @@ public class EmisCreditSalesmenController extends BaseController
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询销售理赔账单列表
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('emis:emisCreditSalesmen:getSalesSatisfyDetail')")
|
||||
@GetMapping("/getSalesSatisfyDetail")
|
||||
public TableDataInfo getSalesSatisfyDetail(EmisWaybill emisWaybill) {
|
||||
startPage();
|
||||
List<EmisSettleBill> list = emisCreditSalesmenService.selectSalesSatisfyDetailList(emisWaybill);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查是否重复
|
||||
|
||||
@ -49,6 +49,8 @@ public class EmisCreditSalesmen extends BaseEntity
|
||||
private BigDecimal overTermMoney;
|
||||
/* 账期内额度 */
|
||||
private BigDecimal inTermMoney;
|
||||
/* 理赔金额 */
|
||||
private BigDecimal satisfyMoney;
|
||||
/* 币种 */
|
||||
private String currency;
|
||||
/* 运输方式 */
|
||||
|
||||
@ -17,6 +17,8 @@ import java.util.Map;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.xdadan.erp.emis.domain.EmisCreditSalesmen;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import com.xdadan.erp.emis.domain.EmisSettleBill;
|
||||
import com.xdadan.erp.emis.domain.EmisWaybill;
|
||||
|
||||
/**
|
||||
* @ClassName EmisCreditSalesmenMapper
|
||||
@ -98,4 +100,12 @@ public interface EmisCreditSalesmenMapper extends BaseMapper<EmisCreditSalesmen>
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteEmisCreditSalesmenByIds(Long[] ids);
|
||||
|
||||
/**
|
||||
* 查询销售理赔详情列表
|
||||
*
|
||||
* @param emisWaybill 运单查询条件
|
||||
* @return 结算账单集合
|
||||
*/
|
||||
public List<EmisSettleBill> selectSalesSatisfyDetailList(EmisWaybill emisWaybill);
|
||||
}
|
||||
|
||||
@ -54,6 +54,7 @@ package com.xdadan.erp.emis.service;
|
||||
import java.time.format.DateTimeParseException;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.*;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -418,7 +419,8 @@ public class EmisBaseService {
|
||||
}
|
||||
}
|
||||
|
||||
BigDecimal totalCreditMoney = baseCreditMoney.add(tempAdjust);
|
||||
BigDecimal satisfyMoney = creditSalesmen.getSatisfyMoney() != null ? creditSalesmen.getSatisfyMoney() : BigDecimal.ZERO;
|
||||
BigDecimal totalCreditMoney = baseCreditMoney.add(tempAdjust).add(satisfyMoney);
|
||||
log.debug("客户[{}]的临时额度总额计算完成: 基础额度[{}] + 临时调整[{}] = 总额[{}]",
|
||||
creditSalesmen.getAccCode(), baseCreditMoney, tempAdjust, totalCreditMoney);
|
||||
return totalCreditMoney;
|
||||
@ -1662,11 +1664,15 @@ public class EmisBaseService {
|
||||
BigDecimal inTermMoney = getInTermMoney(emisWaybillList);
|
||||
// 超期金额
|
||||
BigDecimal overTermMoney = new BigDecimal(useMoney.subtract(inTermMoney).stripTrailingZeros().toPlainString());
|
||||
// 计算理赔金额
|
||||
BigDecimal satisfyMoney = calculateSatisfyMoney(emisWaybillList);
|
||||
|
||||
EmisCreditSalesmen emisCreditSalesmen = new EmisCreditSalesmen();
|
||||
emisCreditSalesmen.setId(item.getId());
|
||||
emisCreditSalesmen.setUseMoney(useMoney);
|
||||
emisCreditSalesmen.setOverTermMoney(overTermMoney);
|
||||
emisCreditSalesmen.setInTermMoney(inTermMoney);
|
||||
emisCreditSalesmen.setSatisfyMoney(satisfyMoney);
|
||||
emisCreditSalesmenMapper.updateEmisCreditSalesmen(emisCreditSalesmen);
|
||||
log.info("success.autoDoCredit , emisCreditSalesmen,{}", JSON.toJSONString(emisCreditSalesmen));
|
||||
}catch (Exception ex){
|
||||
@ -1715,6 +1721,61 @@ public class EmisBaseService {
|
||||
return inTermMoney;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据运单列表计算理赔金额
|
||||
* 根据emisWaybillList.billCode查emis_settle_sub_bill获取settle_bill_no
|
||||
* 关联emis_settle_bill获取总的satisfy_money并返回
|
||||
* 一个settle_bill_no对应多个billCode
|
||||
*
|
||||
* @param emisWaybillList 运单列表
|
||||
* @return 理赔金额总额
|
||||
*/
|
||||
protected BigDecimal calculateSatisfyMoney(List<EmisWaybill> emisWaybillList) {
|
||||
if (CollectionUtil.isEmpty(emisWaybillList)) {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
// 获取所有运单号
|
||||
List<String> billCodeList = emisWaybillList.stream()
|
||||
.map(EmisWaybill::getBillCode)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
log.info("开始计算理赔金额,运单号列表: {}", billCodeList);
|
||||
|
||||
// 根据billCode查询emis_settle_sub_bill获取settle_bill_no
|
||||
List<EmisSettleSubBill> emisSettleSubBillList = emisSettleSubBillMapper.querysSettleSubBillByBillCodeList(billCodeList);
|
||||
if (CollectionUtil.isEmpty(emisSettleSubBillList)) {
|
||||
log.info("未找到对应的结算子账单记录");
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
// 获取所有settle_bill_no
|
||||
Set<String> settleBillNoSet = emisSettleSubBillList.stream()
|
||||
.map(EmisSettleSubBill::getSettleBillNo)
|
||||
.filter(StringUtils::isNotEmpty)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
if (CollectionUtil.isEmpty(settleBillNoSet)) {
|
||||
log.info("未找到对应的结算账单号");
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
log.info("找到的结算账单号: {}", settleBillNoSet);
|
||||
|
||||
// 根据settle_bill_no查询emis_settle_bill获取satisfy_money
|
||||
BigDecimal totalSatisfyMoney = BigDecimal.ZERO;
|
||||
for (String settleBillNo : settleBillNoSet) {
|
||||
EmisSettleBill settleBill = emisSettleBillMapper.selectSettleBillBySettleBillNo(settleBillNo);
|
||||
if (settleBill != null && settleBill.getSatisfyMoney() != null) {
|
||||
totalSatisfyMoney = totalSatisfyMoney.add(settleBill.getSatisfyMoney());
|
||||
log.debug("结算账单[{}]的理赔金额: {}", settleBillNo, settleBill.getSatisfyMoney());
|
||||
}
|
||||
}
|
||||
|
||||
log.info("理赔金额计算完成,总额: {}", totalSatisfyMoney);
|
||||
return totalSatisfyMoney;
|
||||
}
|
||||
|
||||
public List<EmisWaybill> filterOverTermEmisWaybillList(List<EmisWaybill> list) {
|
||||
log.info("cd filterOverTermEmisWaybillList , emisWaybillList,{}", list);
|
||||
if (CollectionUtil.isEmpty(list)) {
|
||||
@ -4723,6 +4784,7 @@ public class EmisBaseService {
|
||||
EmisWaybillBatchStatus batchStatus = new EmisWaybillBatchStatus();
|
||||
batchStatus.setBillCode(waybill.getBillCode());
|
||||
batchStatus.setSiteBatchStatus("1"); // 1表示匹配成功
|
||||
// batchStatus.setBlManual("1");
|
||||
Date now = new Date();
|
||||
batchStatus.setCreateBy("system");
|
||||
batchStatus.setCreateTime(now);
|
||||
|
||||
@ -12,6 +12,8 @@ package com.xdadan.erp.emis.service;
|
||||
import java.util.List;
|
||||
import com.xdadan.erp.emis.domain.EmisCreditSalesmen;
|
||||
import com.xdadan.erp.emis.domain.exception.EmisBizError;
|
||||
import com.xdadan.erp.emis.domain.EmisSettleBill;
|
||||
import com.xdadan.erp.emis.domain.EmisWaybill;
|
||||
|
||||
/**
|
||||
* @ClassName EmisCreditSalesmenService
|
||||
@ -76,4 +78,12 @@ public interface IEmisCreditSalesmenService
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteEmisCreditSalesmenById(Long id);
|
||||
|
||||
/**
|
||||
* 查询销售理赔详情列表
|
||||
*
|
||||
* @param emisWaybill 运单查询条件
|
||||
* @return 结算账单集合
|
||||
*/
|
||||
public List<EmisSettleBill> selectSalesSatisfyDetailList(EmisWaybill emisWaybill);
|
||||
}
|
||||
|
||||
@ -30,6 +30,7 @@ import org.springframework.stereotype.Service;
|
||||
import com.xdadan.erp.emis.domain.EmisCreditSalesmen;
|
||||
import com.xdadan.erp.emis.mapper.EmisCreditSalesmenMapper;
|
||||
import com.xdadan.erp.emis.service.IEmisCreditSalesmenService;
|
||||
import com.xdadan.erp.emis.domain.EmisSettleBill;
|
||||
|
||||
/**
|
||||
* 销售信用额度Service业务层处理
|
||||
@ -145,6 +146,9 @@ public class EmisCreditSalesmenServiceImpl extends EmisBaseService implements IE
|
||||
emisCreditSalesmen.setOverTermMoney(overTermMoney);
|
||||
emisCreditSalesmen.setInTermMoney(inTermMoney);
|
||||
|
||||
// 理赔金额
|
||||
BigDecimal satisfyMoney = calculateSatisfyMoney(emisWaybillList);
|
||||
emisCreditSalesmen.setSatisfyMoney(satisfyMoney);
|
||||
log.error("=====>useMoneyMap=1111====>{}", JSON.toJSONString(useMoneyMap));
|
||||
log.error("=====>useMoney=1111====>{}", useMoney.toString());
|
||||
|
||||
@ -173,4 +177,15 @@ public class EmisCreditSalesmenServiceImpl extends EmisBaseService implements IE
|
||||
return emisCreditSalesmenMapper.deleteEmisCreditSalesmenById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询销售理赔详情列表
|
||||
*
|
||||
* @param emisWaybill 运单查询条件
|
||||
* @return 结算账单集合
|
||||
*/
|
||||
@Override
|
||||
public List<EmisSettleBill> selectSalesSatisfyDetailList(EmisWaybill emisWaybill) {
|
||||
log.info("开始查询销售理赔详情列表");
|
||||
return emisCreditSalesmenMapper.selectSalesSatisfyDetailList(emisWaybill);
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,6 +12,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="useMoney" column="use_money" />
|
||||
<result property="overTermMoney" column="over_term_money" />
|
||||
<result property="inTermMoney" column="in_term_money" />
|
||||
<result property="satisfyMoney" column="satisfy_money" />
|
||||
<result property="currency" column="currency" />
|
||||
<result property="transType" column="trans_type" />
|
||||
<result property="startDate" column="start_date" />
|
||||
@ -20,7 +21,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectEmisCreditSalesmenVo">
|
||||
select id, acc_code, salesmen, credit_money, use_money, currency, trans_type, start_date, end_date, bl_open, remark, tenant_id, del_flag, create_by, create_time, update_by, update_time, create_site, update_site from emis_credit_salesmen
|
||||
select id, acc_code, salesmen, credit_money, use_money, over_term_money, in_term_money, satisfy_money, currency, trans_type, start_date, end_date, bl_open, remark, tenant_id, del_flag, create_by, create_time, update_by, update_time, create_site, update_site from emis_credit_salesmen
|
||||
</sql>
|
||||
|
||||
<select id="selectEmisCreditSalesmenList" parameterType="EmisCreditSalesmen" resultMap="EmisCreditSalesmenResult">
|
||||
@ -38,7 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
a.use_money, a.over_term_money, a.in_term_money, a.currency,
|
||||
a.trans_type, a.start_date, a.end_date, a.bl_open,
|
||||
a.remark, a.tenant_id, a.del_flag, a.create_by,
|
||||
a.create_time, a.update_by, a.update_time, a.create_site, a.update_site
|
||||
a.create_time, a.update_by, a.update_time, a.create_site, a.update_site, a.satisfy_money
|
||||
from emis_credit_salesmen a
|
||||
<where>
|
||||
del_flag='0'
|
||||
@ -146,7 +147,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
</select>
|
||||
|
||||
<select id="selectEmisCreditSalesmenById" parameterType="Long" resultMap="EmisCreditSalesmenResult">
|
||||
select id, acc_code, salesmen, credit_money, use_money, over_term_money, in_term_money, currency, trans_type, start_date, end_date, bl_open, remark, tenant_id, del_flag, create_by, create_time, update_by, update_time, create_site, update_site
|
||||
select id, acc_code, salesmen, credit_money, use_money, over_term_money, in_term_money, satisfy_money, currency, trans_type, start_date, end_date, bl_open, remark, tenant_id, del_flag, create_by, create_time, update_by, update_time, create_site, update_site
|
||||
from emis_credit_salesmen a
|
||||
where a.id = #{id}
|
||||
</select>
|
||||
@ -188,6 +189,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="useMoney != null">use_money,</if>
|
||||
<if test="overTermMoney != null">over_term_money,</if>
|
||||
<if test="inTermMoney != null">in_term_Money,</if>
|
||||
<if test="satisfyMoney != null">satisfy_money,</if>
|
||||
<if test="currency != null and currency != ''">currency,</if>
|
||||
<if test="transType != null and transType != ''">trans_type,</if>
|
||||
<if test="startDate != null">start_date,</if>
|
||||
@ -210,6 +212,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="useMoney != null">#{useMoney},</if>
|
||||
<if test="overTermMoney != null">#{overTermMoney},</if>
|
||||
<if test="inTermMoney != null">#{inTermMoney},</if>
|
||||
<if test="satisfyMoney != null">#{satisfyMoney},</if>
|
||||
<if test="currency != null and currency != ''">#{currency},</if>
|
||||
<if test="transType != null and transType != ''">#{transType},</if>
|
||||
<if test="startDate != null">#{startDate},</if>
|
||||
@ -234,6 +237,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="useMoney != null">use_money = #{useMoney},</if>
|
||||
<if test="overTermMoney != null">over_term_money = #{overTermMoney},</if>
|
||||
<if test="inTermMoney != null">in_term_Money = #{inTermMoney},</if>
|
||||
<if test="satisfyMoney != null">satisfy_money = #{satisfyMoney},</if>
|
||||
<if test="currency != null and currency != ''">currency = #{currency},</if>
|
||||
<if test="transType != null and transType != ''">trans_type = #{transType},</if>
|
||||
<if test="startDate != null">start_date = #{startDate},</if>
|
||||
@ -267,4 +271,112 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
<!-- 查询销售理赔详情列表 -->
|
||||
<select id="selectSalesSatisfyDetailList" parameterType="EmisWaybill" resultType="EmisSettleBill">
|
||||
SELECT DISTINCT
|
||||
sb.id,
|
||||
sb.settle_bill_no as settleBillNo,
|
||||
sb.settle_bill_name as settleBillName,
|
||||
sb.settle_type as settleType,
|
||||
sb.settle_start_date as settleStartDate,
|
||||
sb.settle_end_date as settleEndDate,
|
||||
sb.bill_month as billMonth,
|
||||
sb.rec_money as recMoney,
|
||||
sb.reced_money as recedMoney,
|
||||
sb.invoiced_money as invoicedMoney,
|
||||
sb.cust_no as custNo,
|
||||
sb.cust_name as custName,
|
||||
sb.customer_code as customerCode,
|
||||
sb.customer_name as customerName,
|
||||
sb.site_code as siteCode,
|
||||
sb.site_name as siteName,
|
||||
sb.satisfy_money as satisfyMoney,
|
||||
sb.allowance_money as allowanceMoney,
|
||||
sb.deduction_money as deductionMoney,
|
||||
sb.other_money as otherMoney,
|
||||
sb.satisfy_reason as satisfyReason,
|
||||
sb.allowance_reason as allowanceReason,
|
||||
sb.deduction_reason as deductionReason,
|
||||
sb.other_reason as otherReason,
|
||||
sb.open_bill_status as openBillStatus,
|
||||
sb.payment_status as paymentStatus,
|
||||
sb.charge_status as chargeStatus,
|
||||
sb.send_piece_sum as sendPieceSum,
|
||||
sb.piece_number as pieceNumber,
|
||||
sb.fee_weight as feeWeight,
|
||||
sb.uncollected_amount as uncollectedAmount,
|
||||
sb.send_money_sum as sendMoneySum,
|
||||
sb.refund_amount as refundAmount,
|
||||
sb.refund_money as refundMoney,
|
||||
sb.payee,
|
||||
sb.salesmen,
|
||||
sb.credit_period as creditPeriod,
|
||||
sb.credit_period_type as creditPeriodType,
|
||||
sb.settle_day as settleDay,
|
||||
sb.payment_due_date as paymentDueDate,
|
||||
sb.bl_send_oms as blSendOms,
|
||||
sb.bl_confirm_center as blConfirmCenter,
|
||||
sb.confirm_center_date as confirmCenterDate,
|
||||
sb.confirm_center_note as confirmCenterNote,
|
||||
sb.confirm_center_man_code as confirmCenterManCode,
|
||||
sb.confirm_center_code as confirmCenterCode,
|
||||
sb.bl_confirm_site as blConfirmSite,
|
||||
sb.confirm_site_date as confirmSiteDate,
|
||||
sb.confirm_site_man_code as confirmSiteManCode,
|
||||
sb.confirm_site_note as confirmSiteNote,
|
||||
sb.confirm_site_code as confirmSiteCode,
|
||||
sb.remark,
|
||||
sb.del_flag as delFlag,
|
||||
sb.create_by as createBy,
|
||||
sb.create_time as createTime,
|
||||
sb.update_by as updateBy,
|
||||
sb.update_time as updateTime,
|
||||
sb.create_site as createSite,
|
||||
sb.update_site as updateSite
|
||||
FROM emis_settle_bill sb
|
||||
INNER JOIN emis_settle_sub_bill ssb ON sb.settle_bill_no = ssb.settle_bill_no
|
||||
INNER JOIN emis_waybill w ON ssb.bill_code = w.bill_code
|
||||
WHERE sb.del_flag = '0'
|
||||
AND ssb.del_flag = '0'
|
||||
AND w.del_flag = '0'
|
||||
and w.order_status !='0' and w.order_status!='2'
|
||||
AND sb.satisfy_money > 0
|
||||
<if test="paymentType != null and paymentType != ''">
|
||||
AND FIND_IN_SET(w.payment_type, #{paymentType})
|
||||
</if>
|
||||
<if test="payee != null and payee != ''">
|
||||
AND sb.payee = #{payee}
|
||||
</if>
|
||||
<if test="paymentStatus != null and paymentStatus != ''">
|
||||
AND FIND_IN_SET(w.payment_status, #{paymentStatus})
|
||||
</if>
|
||||
<if test="params.problemQueryType != null and params.problemQueryType == 1 and params.problemQueryIds != null and params.problemQueryIds !=''">
|
||||
and exists (
|
||||
select 1 from emis_waybill_problem_info ewpi where w.bill_code=ewpi.bill_code and ewpi.del_flag='0' and FIND_IN_SET( ewpi.`problem_type`, #{params.problemQueryIds} )
|
||||
)
|
||||
</if>
|
||||
|
||||
<if test="params.problemQueryType != null and params.problemQueryType == 2 and params.problemQueryIds != null and params.problemQueryIds !=''">
|
||||
and not exists (
|
||||
select 1 from emis_waybill_problem_info ewpi where w.bill_code=ewpi.bill_code and ewpi.del_flag='0' and FIND_IN_SET( ewpi.`problem_type`, #{params.problemQueryIds} )
|
||||
)
|
||||
</if>
|
||||
<!-- <if test="params.queryTabType != null and params.queryTabType != ''">-->
|
||||
<!-- AND w.query_tab_type = #{params.queryTabType}-->
|
||||
<!-- </if>-->
|
||||
<!-- <if test="params.querySendType != null and params.querySendType != ''">-->
|
||||
<!-- AND w.query_send_type = #{params.querySendType}-->
|
||||
<!-- </if>-->
|
||||
<if test="params.beginSendDate != null and params.beginSendDate != ''">
|
||||
AND w.send_date <![CDATA[ >= ]]> #{params.beginSendDate}
|
||||
</if>
|
||||
<if test="params.endSendDate != null and params.endSendDate != ''">
|
||||
AND w.send_date <![CDATA[ <= ]]> #{params.endSendDate}
|
||||
</if>
|
||||
<if test="carryType != null and carryType != ''">
|
||||
AND FIND_IN_SET(w.carry_type, #{carryType})
|
||||
</if>
|
||||
ORDER BY sb.create_time DESC
|
||||
</select>
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue
Block a user