From 04705ed0bf086e37b1ecd85b2c8ec0bd1b8a6b7b Mon Sep 17 00:00:00 2001 From: "autumn.g@foxmail.com" Date: Fri, 2 Feb 2024 17:01:07 +0800 Subject: [PATCH] =?UTF-8?q?update=E4=BC=9A=E5=91=98=E8=AE=A1=E8=B4=B9?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jsowell/pile/dto/QueryMemberGroupDTO.java | 16 +++ .../pile/mapper/MemberGroupMapper.java | 11 +- .../mapper/PileBillingTemplateMapper.java | 7 + .../pile/service/MemberGroupService.java | 2 + .../service/PileBillingTemplateService.java | 5 + .../service/impl/MemberGroupServiceImpl.java | 32 ++++- .../impl/PileBillingTemplateServiceImpl.java | 5 + .../programlogic/AbstractProgramLogic.java | 123 +++++++++++++++++- .../DelayMerchantProgramLogic.java | 4 +- .../mapper/pile/MemberGroupMapper.xml | 15 ++- .../mapper/pile/PileBillingTemplateMapper.xml | 35 ++++- 11 files changed, 243 insertions(+), 12 deletions(-) create mode 100644 jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryMemberGroupDTO.java diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryMemberGroupDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryMemberGroupDTO.java new file mode 100644 index 000000000..9942f8364 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryMemberGroupDTO.java @@ -0,0 +1,16 @@ +package com.jsowell.pile.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class QueryMemberGroupDTO { + private String memberId; + + private String groupCode; + + private String merchantId; + + private String stationId; +} diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/MemberGroupMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/MemberGroupMapper.java index 4db2e36d4..059fe4348 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/MemberGroupMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/MemberGroupMapper.java @@ -77,6 +77,8 @@ public interface MemberGroupMapper { */ MemberDiscountVO queryMemberDiscount(@Param("merchantId") String merchantId, @Param("stationId") String stationId, @Param("memberId") String memberId); + MemberGroupVO queryByGroupCodeAndMemberId(@Param("groupCode") String groupCode, @Param("memberId") String memberId); + List queryMemberList(@Param("groupCode") String groupCode); MemberGroup selectByGroupCode(String groupCode); @@ -85,5 +87,12 @@ public interface MemberGroupMapper { MemberGroupVO queryByMerchantId(String merchantId); - MemberDiscountVO queryMemberDiscountV2(@Param("groupCode") String groupCode, @Param("memberId") String memberId); + /** + * 查询集团编号 + * @param merchantId 运营商id + * @param stationId 站点id + * @param memberId 会员id + * @return + */ + String queryMemberGroupCode(@Param("merchantId") String merchantId, @Param("stationId") String stationId, @Param("memberId") String memberId); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileBillingTemplateMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileBillingTemplateMapper.java index c0843c6cb..c96570eff 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileBillingTemplateMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileBillingTemplateMapper.java @@ -171,4 +171,11 @@ public interface PileBillingTemplateMapper { void updateStatusByStationId(@Param("stationId") String stationId, @Param("status") String status); void updateStatusByTemplateId(@Param("templateId") String templateId, @Param("status") String status); + + /** + * 查询站点的集团会员优惠计费模板 + * @param stationId + * @return + */ + BillingTemplateVO queryPreferentialBillingTemplate(String stationId); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/MemberGroupService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/MemberGroupService.java index 3f0b4b04a..fff875ac2 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/MemberGroupService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/MemberGroupService.java @@ -70,6 +70,8 @@ public interface MemberGroupService { */ MemberDiscountVO queryMemberDiscount(String merchantId, String stationId, String memberId); + MemberDiscountVO queryMemberDiscountV2(String merchantId, String stationId, String memberId); + int addMember(MemberGroupDTO dto); List queryMemberList(MemberGroupDTO dto); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileBillingTemplateService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileBillingTemplateService.java index 2b54e442c..7638be1df 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileBillingTemplateService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileBillingTemplateService.java @@ -180,4 +180,9 @@ public interface PileBillingTemplateService { * @return */ int createPreferentialBillingTemplate(CreateOrUpdateBillingTemplateDTO dto); + + /** + * 查询优惠计费模板 + */ + BillingTemplateVO queryPreferentialBillingTemplate(String stationId); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberGroupServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberGroupServiceImpl.java index 829ef396c..9f7726c34 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberGroupServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberGroupServiceImpl.java @@ -12,11 +12,9 @@ import com.jsowell.pile.domain.MemberGroup; import com.jsowell.pile.domain.MemberGroupRelation; import com.jsowell.pile.dto.MemberGroupDTO; import com.jsowell.pile.mapper.MemberGroupMapper; -import com.jsowell.pile.service.MemberBasicInfoService; -import com.jsowell.pile.service.MemberGroupRelationService; -import com.jsowell.pile.service.MemberGroupService; -import com.jsowell.pile.service.PileMerchantInfoService; +import com.jsowell.pile.service.*; import com.jsowell.pile.vo.uniapp.MemberVO; +import com.jsowell.pile.vo.web.BillingTemplateVO; import com.jsowell.pile.vo.web.MemberDiscountVO; import com.jsowell.pile.vo.web.MemberGroupVO; import lombok.extern.slf4j.Slf4j; @@ -49,6 +47,9 @@ public class MemberGroupServiceImpl implements MemberGroupService { @Autowired private PileMerchantInfoService pileMerchantInfoService; + @Autowired + private PileBillingTemplateService pileBillingTemplateService; + /** * 查询会员组 * @@ -188,6 +189,25 @@ public class MemberGroupServiceImpl implements MemberGroupService { return MemberDiscountVO; } + public MemberDiscountVO queryMemberDiscountV2(String merchantId, String stationId, String memberId) { + String groupCode = memberGroupMapper.queryMemberGroupCode(merchantId, stationId, memberId); + if (StringUtils.isBlank(groupCode)) { + return null; + } + // 查询站点的集团会员计费模板 + BillingTemplateVO billingTemplate = pileBillingTemplateService.queryPreferentialBillingTemplate(stationId); + if (billingTemplate == null) { + return null; + } + MemberDiscountVO memberDiscountVOBuilder = MemberDiscountVO.builder() + .merchantId(merchantId) + .stationId(stationId) + .groupCode(groupCode) + .billingTemplateVO(billingTemplate) + .build(); + return memberDiscountVOBuilder; + } + /** * 后管保存集团会员关系 * @param dto @@ -229,8 +249,8 @@ public class MemberGroupServiceImpl implements MemberGroupService { return 0; } // 检查memberId是否在集团中 - MemberDiscountVO vo = memberGroupMapper.queryMemberDiscountV2(memberGroupVO.getGroupCode(), memberId); - if (vo == null) { + MemberGroupVO groupVO = memberGroupMapper.queryByGroupCodeAndMemberId(memberGroupVO.getGroupCode(), memberId); + if (groupVO == null) { // 校验通过,关系存入数据库 加入到集团 return saveMemberGroupRelation(memberId, memberGroupVO.getGroupCode()); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBillingTemplateServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBillingTemplateServiceImpl.java index f1c1df7a1..895ebe30f 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBillingTemplateServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBillingTemplateServiceImpl.java @@ -465,6 +465,11 @@ public class PileBillingTemplateServiceImpl implements PileBillingTemplateServic return 1; } + @Override + public BillingTemplateVO queryPreferentialBillingTemplate(String stationId) { + return pileBillingTemplateMapper.queryPreferentialBillingTemplate(stationId); + } + @Override public List selectBillingTemplateByStationIdList(List stationIdList) { if (CollectionUtils.isEmpty(stationIdList)) { diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index 453ed0903..b258f8376 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -715,8 +715,9 @@ public abstract class AbstractProgramLogic implements InitializingBean { BigDecimal discountElectricityAmount = BigDecimal.ZERO; // 服务费折扣金额 BigDecimal discountServiceAmount = BigDecimal.ZERO; - + // 优惠后服务费金额 初始值为优惠前金额 BigDecimal afterServiceAmountDiscount = orderDetail.getTotalServiceAmount(); + // 优惠后电费金额 初始值为优惠前金额 BigDecimal afterElectricityAmountDiscount = orderDetail.getTotalElectricityAmount(); // 查询会员在此站点会员折扣 @@ -783,8 +784,128 @@ public abstract class AbstractProgramLogic implements InitializingBean { protected void calculateOrderDiscountsV2(OrderBasicInfo orderBasicInfo, OrderDetail orderDetail) { String memberId = orderBasicInfo.getMemberId(); // 会员id String stationId = orderBasicInfo.getStationId(); // 站点id + String merchantId = orderBasicInfo.getMerchantId(); // 运营商id + // 原始电费金额 + BigDecimal originalTotalElectricityAmount = orderDetail.getTotalElectricityAmount(); + // 原始服务费金额 + BigDecimal originalTotalServiceAmount = orderDetail.getTotalServiceAmount(); + // 电费折扣金额 初始值为0 + BigDecimal electricityAmountDiscount = BigDecimal.ZERO; + // 服务费折扣金额 初始值为0 + BigDecimal serviceAmountDiscount = BigDecimal.ZERO; + // 优惠后电费金额 初始值为优惠前金额 + BigDecimal afterDiscountElectricityAmount = BigDecimal.ZERO; + // 优惠后服务费金额 初始值为优惠前金额 + BigDecimal afterDiscountServiceAmount = BigDecimal.ZERO; + // 查询会员在该站点享受的优惠 + MemberDiscountVO memberDiscountVO = memberGroupService.queryMemberDiscountV2(merchantId, stationId, memberId); + if (memberDiscountVO == null) { + // 如果没有优惠,则优惠后金额 等于优惠前金额 + afterDiscountServiceAmount = orderDetail.getTotalServiceAmount(); + afterDiscountElectricityAmount = orderDetail.getTotalElectricityAmount(); + } else { + BillingTemplateVO billingTemplateVO = memberDiscountVO.getBillingTemplateVO(); + + // 尖时段用电量 + BigDecimal sharpUsedElectricity = orderDetail.getSharpUsedElectricity(); + if (sharpUsedElectricity != null) { + // 计算该时段电费 = 电费单价 x 用电量 + BigDecimal sharpElectricityAmount = billingTemplateVO.getSharpElectricityPrice() + .multiply(sharpUsedElectricity) + .setScale(2, RoundingMode.DOWN); + // 计算该时段服务费 + BigDecimal sharpServiceAmount = billingTemplateVO.getSharpServicePrice() + .multiply(sharpUsedElectricity) + .setScale(2, RoundingMode.DOWN); + + // 汇总 + afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(sharpElectricityAmount); + afterDiscountServiceAmount = afterDiscountServiceAmount.add(sharpServiceAmount); + } + + // 峰时段用电量 + BigDecimal peakUsedElectricity = orderDetail.getPeakUsedElectricity(); + if (peakUsedElectricity != null) { + // 计算该时段电费 = 电费单价 x 用电量 + BigDecimal peakElectricityAmount = billingTemplateVO.getPeakElectricityPrice() + .multiply(peakUsedElectricity) + .setScale(2, RoundingMode.DOWN); + // 计算该时段服务费 + BigDecimal peakServiceAmount = billingTemplateVO.getPeakServicePrice() + .multiply(peakUsedElectricity) + .setScale(2, RoundingMode.DOWN); + + // 汇总 + afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(peakElectricityAmount); + afterDiscountServiceAmount = afterDiscountServiceAmount.add(peakServiceAmount); + } + + // 平时段用电量 + BigDecimal flatUsedElectricity = orderDetail.getFlatUsedElectricity(); + if (flatUsedElectricity != null) { + // 计算该时段电费 = 电费单价 x 用电量 + BigDecimal flatElectricityAmount = billingTemplateVO.getFlatElectricityPrice() + .multiply(flatUsedElectricity) + .setScale(2, RoundingMode.DOWN); + // 计算该时段服务费 + BigDecimal flatServiceAmount = billingTemplateVO.getFlatServicePrice() + .multiply(flatUsedElectricity) + .setScale(2, RoundingMode.DOWN); + + // 汇总 + afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(flatElectricityAmount); + afterDiscountServiceAmount = afterDiscountServiceAmount.add(flatServiceAmount); + } + + // 谷时段用电量 + BigDecimal valleyUsedElectricity = orderDetail.getValleyUsedElectricity(); + if (valleyUsedElectricity != null) { + // 计算该时段电费 = 电费单价 x 用电量 + BigDecimal valleyElectricityAmount = billingTemplateVO.getValleyElectricityPrice() + .multiply(valleyUsedElectricity) + .setScale(2, RoundingMode.DOWN); + // 计算该时段服务费 + BigDecimal valleyServiceAmount = billingTemplateVO.getValleyServicePrice() + .multiply(valleyUsedElectricity) + .setScale(2, RoundingMode.DOWN); + + // 汇总 + afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(valleyElectricityAmount); + afterDiscountServiceAmount = afterDiscountServiceAmount.add(valleyServiceAmount); + } + + // 计算优惠了多少钱 + // 电费折扣金额 + electricityAmountDiscount = originalTotalElectricityAmount.subtract(afterDiscountElectricityAmount); + // 服务费折扣金额 + serviceAmountDiscount = originalTotalServiceAmount.subtract(afterDiscountServiceAmount); + } + + /* + 更新 数据 + */ + // 订单折扣金额 + BigDecimal discountAmount = electricityAmountDiscount.add(serviceAmountDiscount); + orderBasicInfo.setDiscountAmount(discountAmount); + + // 更新结算金额 结算金额 = 消费金额 - 虚拟金额 - 优惠金额 + BigDecimal newSettleAmount = orderBasicInfo.getSettleAmount().subtract(discountAmount); + orderBasicInfo.setSettleAmount(newSettleAmount); + + // 优惠后总消费金额 = 折扣后电费 + 折扣后服务费 + BigDecimal totalConsumeAmount = afterDiscountServiceAmount.add(afterDiscountElectricityAmount); + + // 更新退款金额 = 支付金额 - 优惠后总消费金额 + BigDecimal refundAmount = orderBasicInfo.getPayAmount().subtract(totalConsumeAmount).setScale(2, RoundingMode.DOWN); + orderBasicInfo.setRefundAmount(refundAmount); + // 电费折扣金额 + orderDetail.setDiscountElectricityAmount(electricityAmountDiscount); + // 服务费折扣金额 + orderDetail.setDiscountServiceAmount(serviceAmountDiscount); + logger.info("计算订单折扣, orderCode:{}, memberId:{}, 订单折扣金额:{}, 电费折扣金额:{}, 服务费折扣金额:{}, 优惠后总消费金额:{}", + orderBasicInfo.getOrderCode(), memberId, discountAmount, electricityAmountDiscount, serviceAmountDiscount, totalConsumeAmount); } /** diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java index b0f76c777..adf05ea45 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java @@ -373,7 +373,9 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { // 获取更新数据后的orderDetail对象/更新订单详情 查询订单详情 修改订单数据 OrderDetail orderDetail = returnUpdateOrderDetail(orderBasicInfo, data); // 计算订单折扣 calculateOrderDiscounts - calculateOrderDiscounts(orderBasicInfo, orderDetail); + // calculateOrderDiscounts(orderBasicInfo, orderDetail); + // calculateOrderDiscountsV2(orderBasicInfo, orderDetail); + // 更新数据库 OrderTransactionDTO dto = new OrderTransactionDTO(); dto.setOrderBasicInfo(orderBasicInfo); diff --git a/jsowell-pile/src/main/resources/mapper/pile/MemberGroupMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/MemberGroupMapper.xml index a592849a8..4118c8293 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/MemberGroupMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/MemberGroupMapper.xml @@ -199,7 +199,7 @@ and t1.merchant_id = #{merchantId,jdbcType=VARCHAR} - SELECT t1.group_code AS groupCode, t1.group_type AS groupType, @@ -214,4 +214,17 @@ and t1.group_code = #{groupCode,jdbcType=VARCHAR} and t2.member_id = #{memberId,jdbcType=VARCHAR} + + \ No newline at end of file diff --git a/jsowell-pile/src/main/resources/mapper/pile/PileBillingTemplateMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/PileBillingTemplateMapper.xml index e6c73352f..7e7002413 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/PileBillingTemplateMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/PileBillingTemplateMapper.xml @@ -505,8 +505,8 @@ left JOIN pile_billing_detail t4 ON t4.template_code = t2.template_code AND t4.time_type = '2' left JOIN pile_billing_detail t5 ON t5.template_code = t2.template_code AND t5.time_type = '3' left JOIN pile_billing_detail t6 ON t6.template_code = t2.template_code AND t6.time_type = '4' - WHERE - t2.station_id = #{stationId,jdbcType=VARCHAR} + WHERE t2.del_flag = '0' + and t2.station_id = #{stationId,jdbcType=VARCHAR} order by t2.publish_time DESC limit 1 @@ -596,4 +596,35 @@ set status = #{status,jdbcType=VARCHAR} where id = #{templateId,jdbcType=VARCHAR} + + \ No newline at end of file