|
@@ -39,6 +39,8 @@ public class PayOrderController {
|
|
|
private CustomerManagerService customerManagerService;
|
|
|
@Resource
|
|
|
private SysDictDataService sysDictDataService;
|
|
|
+ @Resource
|
|
|
+ private LabelService labelService;
|
|
|
|
|
|
//小程序支付生成订单
|
|
|
@RequestMapping(value = "/AddPayOrderInfoNew", consumes = "application/json", method = RequestMethod.POST)
|
|
@@ -82,6 +84,7 @@ public class PayOrderController {
|
|
|
payOrderRequest.setUnionId(appUserInfos.getUnionId()); //客户UnionId;注:此处存放unionId用于获取客户电子卡参数查询
|
|
|
payOrderRequest.setCustomerName(appUserInfos.getBlogNickName()); //昵称
|
|
|
payOrderRequest.setGroupId(stationInfos.getGroupId()); //集团ID
|
|
|
+ payOrderRequest.setLabelFlag(stationInfos.getLabelFlag()); //油站是否开启标签功能
|
|
|
|
|
|
payOrder.setConsumer(appUserInfos.getBlogNickName()); //昵称
|
|
|
payOrder.setConsumerId(appUserInfos.getUserId()); //用户id
|
|
@@ -229,23 +232,143 @@ public class PayOrderController {
|
|
|
params.put("cardRuleFlagGroup", payOrderRequest.getCardRuleFlagGroup());
|
|
|
params.put("cardEnabledFlagGroup", payOrderRequest.getCardEnabledFlagGroup());
|
|
|
|
|
|
- switch (discountSetting){
|
|
|
- case "0": //不执营销方案时 计算等级优惠
|
|
|
- payOrderResultInfo = this.calculateGradeDiscount(params);
|
|
|
- break;
|
|
|
- case "1": //满减方案
|
|
|
- payOrderResultInfo = this.calculateManJianDiscount(params);
|
|
|
- break;
|
|
|
- case "2": //立减方案
|
|
|
- payOrderResultInfo = this.calculateLiJianDiscount(params);
|
|
|
- break;
|
|
|
- case "3": //独立直降
|
|
|
- payOrderResultInfo = this.calculateZhiJiangDiscount(params);
|
|
|
- break;
|
|
|
+ CustomerLabel customerLabel = new CustomerLabel();
|
|
|
+ customerLabel.setPhone(payOrderRequest.getCustomerPhone());
|
|
|
+ customerLabel.setStationId(payOrderRequest.getStationId());
|
|
|
+ //获取该用户是否在标签组内
|
|
|
+ CustomerLabel customerLabelInfo = labelService.getCustomerLabel(customerLabel);
|
|
|
+ if(payOrderRequest.getLabelFlag().equals("1") && customerLabelInfo !=null){
|
|
|
+ //表示此用户为标签用户,计算标签用户优惠
|
|
|
+ payOrderResultInfo = this.calculateLabelDiscount(params);
|
|
|
+ }else {
|
|
|
+ //不为标签用户时
|
|
|
+ switch (discountSetting){
|
|
|
+ case "0": //不执营销方案时 计算等级优惠
|
|
|
+ payOrderResultInfo = this.calculateGradeDiscount(params);
|
|
|
+ break;
|
|
|
+ case "1": //满减方案
|
|
|
+ payOrderResultInfo = this.calculateManJianDiscount(params);
|
|
|
+ break;
|
|
|
+ case "2": //立减方案
|
|
|
+ payOrderResultInfo = this.calculateLiJianDiscount(params);
|
|
|
+ break;
|
|
|
+ case "3": //独立直降
|
|
|
+ payOrderResultInfo = this.calculateZhiJiangDiscount(params);
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
return payOrderResultInfo;
|
|
|
}
|
|
|
|
|
|
+ //计算标签用户优惠
|
|
|
+ public PayOrderResultInfo calculateLabelDiscount(Map<String ,Object> params){
|
|
|
+ BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString()); //油品价格
|
|
|
+ BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString()); //应收金额
|
|
|
+ BigDecimal oilLiters = new BigDecimal("0.00"); //加油升数
|
|
|
+ BigDecimal discountAmt = new BigDecimal(0); //标签方案优惠金额
|
|
|
+ BigDecimal dzkDiscountAmt = new BigDecimal(0); //电子卡优惠金额
|
|
|
+ BigDecimal amt = new BigDecimal(0);
|
|
|
+ BigDecimal discountPrice = oilPrice;
|
|
|
+
|
|
|
+ //加油升数
|
|
|
+ oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
|
|
|
+ oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_UP);
|
|
|
+ }
|
|
|
+ PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
|
|
|
+ //获取该油站的标签规则
|
|
|
+ LabelRule labelRule = new LabelRule();
|
|
|
+ labelRule.setStationId(Integer.valueOf(params.get("stationId").toString())); //油站ID
|
|
|
+ labelRule.setOilName(params.get("oilName").toString()); //oilName
|
|
|
+ List<LabelRule> labelRuleList = labelService.getLabelRuleList(labelRule);
|
|
|
+ if(labelRuleList !=null && labelRuleList.size()> 0){
|
|
|
+ //获取该油品的优惠明细
|
|
|
+ List<LabelRuleDetail> labelRuleDetailList = labelRuleList.get(0).getLabelRuleDetailList();
|
|
|
+ if(labelRuleDetailList !=null && labelRuleDetailList.size() ==1){
|
|
|
+ BigDecimal discountLitersAmt = new BigDecimal(labelRuleDetailList.get(0).getDiscountLitersAmt());
|
|
|
+ String discountTerm = labelRuleDetailList.get(0).getDiscountTerm();
|
|
|
+ switch (discountTerm){
|
|
|
+ case "1": //按加油升数
|
|
|
+ if(oilLiters.compareTo(discountLitersAmt) ==1 || oilLiters.compareTo(discountLitersAmt) ==0 ){
|
|
|
+ discountAmt = oilLiters.multiply(new BigDecimal(labelRuleDetailList.get(0).getDiscountAmt()));
|
|
|
+ discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "2": //按加油金额
|
|
|
+ if(receivableAmt.compareTo(discountLitersAmt) ==1 || receivableAmt.compareTo(discountLitersAmt) ==0 ){
|
|
|
+ discountAmt = oilLiters.multiply(new BigDecimal(labelRuleDetailList.get(0).getDiscountAmt()));
|
|
|
+ discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ dzkDiscountAmt = discountAmt; //赋值电子卡优惠金额
|
|
|
+ }
|
|
|
+ amt = receivableAmt.subtract(discountAmt); //应收金额
|
|
|
+ amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
|
|
|
+ discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP); //优惠价格
|
|
|
+ }
|
|
|
+ payOrderResultInfo.setAmt(amt.toString());
|
|
|
+ payOrderResultInfo.setDiscountPrice(discountPrice.toString());
|
|
|
+ payOrderResultInfo.setDiscountAmt(discountAmt.toString());
|
|
|
+ payOrderResultInfo.setDiscountPrice(discountPrice.toString());
|
|
|
+ payOrderResultInfo.setOilLiters(oilLiters.toString());
|
|
|
+ payOrderResultInfo.setReceivableAmt(receivableAmt.toString());
|
|
|
+ payOrderResultInfo.setOilPrice(oilPrice.toString());
|
|
|
+ payOrderResultInfo.setDzkAmt(amt.toString());
|
|
|
+ payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmt.toString());
|
|
|
+ payOrderResultInfo.setOilsCardFlag("0");
|
|
|
+ if(params.get("cardRuleFlagGroup").toString().equals("1")){
|
|
|
+ //表示开启共享
|
|
|
+ if(params.get("cardEnabledFlagGroup").toString().equals("1")){ //表示开启电子卡功能
|
|
|
+ payOrderResultInfo.setCardEnabledFlag("1");
|
|
|
+ }else {
|
|
|
+ payOrderResultInfo.setCardEnabledFlag("0");
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ //不共享,则查看油站电子卡是否开启
|
|
|
+ if(params.get("cardEnabledFlag").toString().equals("1")){
|
|
|
+ payOrderResultInfo.setCardEnabledFlag("1");
|
|
|
+ }else {
|
|
|
+ payOrderResultInfo.setCardEnabledFlag("0");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ logger.info("油站是否开启电子会员卡功能: " +params.get("cardEnabledFlag").toString());
|
|
|
+ if(payOrderResultInfo.getCardEnabledFlag().equals("1")){
|
|
|
+ CustomerCardSetting customerCardSetting = new CustomerCardSetting();
|
|
|
+ customerCardSetting.setStationId(Integer.valueOf(params.get("stationId").toString()));
|
|
|
+ if(params.get("cardRuleFlagGroup").toString().equals("1")){
|
|
|
+ customerCardSetting.setStationId(Integer.valueOf(params.get("groupId").toString()));
|
|
|
+ }
|
|
|
+ List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
|
|
|
+ if(cardRechargeSettingList !=null && cardRechargeSettingList.size() >0){
|
|
|
+ String isLabel = cardRechargeSettingList.get(0).getIsLabel(); //标签用户支付时是否享受标签优惠
|
|
|
+ if(isLabel.equals("1")){
|
|
|
+ //电子卡支付金额 = 应收金额 - 标签优惠金额
|
|
|
+ BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt);
|
|
|
+ dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt; //如果为负数,则默认设置0.01元
|
|
|
+ payOrderResultInfo.setDzkAmt(dzkAmt.toString());
|
|
|
+ BigDecimal dzkDiscountAmtSum = dzkDiscountAmt; //电子卡总优惠金额
|
|
|
+ payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmtSum.toString());
|
|
|
+ }else {
|
|
|
+ payOrderResultInfo.setDzkAmt(receivableAmt.toString());
|
|
|
+ payOrderResultInfo.setDzkDiscountAmt("0");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
|
|
|
+ customerElectronicCard.setStationId(Integer.valueOf(params.get("stationId").toString()));
|
|
|
+ customerElectronicCard.setCardOilsType(params.get("cardOilsType").toString());
|
|
|
+ customerElectronicCard.setUnionId(params.get("unionId").toString());
|
|
|
+ customerElectronicCard.setMobilePhone(params.get("userPhone").toString());
|
|
|
+ customerElectronicCard.setCustomerName(params.get("customerName").toString());
|
|
|
+ //查询客户余额和卡的类型
|
|
|
+ Map<String, String> map = this.selectCardBalance(customerElectronicCard, params);
|
|
|
+ payOrderResultInfo.setBalance(map.get("balance"));
|
|
|
+ payOrderResultInfo.setOilsCardFlag(map.get("oilsCardFlag"));
|
|
|
+ payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
|
|
|
+ }
|
|
|
+ return payOrderResultInfo;
|
|
|
+ }
|
|
|
+
|
|
|
//计算独立直降
|
|
|
public PayOrderResultInfo calculateZhiJiangDiscount(Map<String ,Object> params){
|
|
|
BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString()); //油品价格
|