Преглед изворни кода

新增扫描珠免会员二维码,提交订单自动带出手机号,会员积分为0时不抛异常直接返回

lhm пре 3 година
родитељ
комит
3f992f2d75

+ 23 - 13
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -4622,7 +4622,11 @@ public class OrderServiceImpl implements OrderService {
             Response<Object> response;
             try {
                 // 查询会员信息
-                memberInfoByCodeResponseJson = haiKongMemberTemplate.getMemberInfoByPhone("{\"phone\":" + memberCode + "}");
+                if (memberCode.trim().length() == 11) {
+                    memberInfoByCodeResponseJson = haiKongMemberTemplate.getMemberInfoByPhone("{\"phone\":\"" + memberCode + "\"}");
+                } else {
+                    memberInfoByCodeResponseJson = haiKongMemberTemplate.getMemberInfoByCode("{\"code\":\"" + memberCode + "\"}");
+                }
                 response = JacksonUtil.fromListJson(memberInfoByCodeResponseJson, new TypeReference<Response<Object>>() {
                 });
                 if (Objects.isNull(response) || Objects.nonNull(response.getErrorCode())) {
@@ -4638,32 +4642,35 @@ public class OrderServiceImpl implements OrderService {
                 MemberInfoDTO memberInfoDTO = JacksonUtil.fromStringJson(JacksonUtil.toJson(response.getData()), MemberInfoDTO.class);
                 assert memberInfoDTO != null : String.format("会员码:【%s】会员信息错误!%s", memberCode, JacksonUtil.toJson(response));
                 // 查询会员表
+                calculateOrderDiscountPriceResponseVO.setOpenId(memberInfoDTO.getOpenId());
+                calculateOrderDiscountPriceResponseVO.setMemberPhone(memberInfoDTO.getPhone());
                 UserEntity userEntity = userService.queryByOpenId(memberInfoDTO.getOpenId());
+                String openId = memberInfoDTO.getOpenId();
                 if (Objects.isNull(userEntity)) {
                     userEntity = new UserEntity();
-                    userEntity.setOpenId(memberInfoDTO.getOpenId());
+                    userEntity.setOpenId(openId);
                     userEntity.setMemberCode(memberCode);
+                    userEntity.setMobile(openId);
                     userService.save(userEntity);
                 } else {
-                    userEntity.setOpenId(memberInfoDTO.getOpenId());
+                    userEntity.setOpenId(openId);
+                    userEntity.setMobile(openId);
                     userEntity.setMemberCode(memberCode);
                     userService.update(userEntity);
                 }
                 Integer score = memberInfoDTO.getScore();
                 if (Objects.nonNull(score) && score > 0) {
                     // 有积分
-                    afterDiscountPrice = calculatePreferentialPrice(orderTotalPrice, score, memberCode, calculateOrderDiscountPriceResponseVO, goodsDetailsDtos, promotionSkuList, mkActivitiesEntityList);
-                    LOGGER.info("会员【{}】,当前积分:{},积分抵扣后的订单金额:{},积分抵扣前的订单金额:{}", memberCode, score, afterDiscountPrice, orderTotalPrice);
+                    afterDiscountPrice = calculatePreferentialPrice(orderTotalPrice, score, memberCode, openId, calculateOrderDiscountPriceResponseVO, goodsDetailsDtos, promotionSkuList, mkActivitiesEntityList);
+                    LOGGER.info("会员【{}】,当前积分:{},积分抵扣后的订单金额:{},积分抵扣前的订单金额:{}", openId, score, afterDiscountPrice, orderTotalPrice);
                     calculateOrderDiscountPriceResponseVO.setOrderTotalPrice(afterDiscountPrice);
                     calculateOrderDiscountPriceResponseVO.setGoodsDetailsDtos(goodsDetailsDtos);
                     calculateOrderDiscountPriceResponseVO.setBeforeScore(score);
-                    calculateOrderDiscountPriceResponseVO.setOpenId(memberInfoDTO.getOpenId());
-                    calculateOrderDiscountPriceResponseVO.setMemberPhone(memberInfoDTO.getPhone());
                     // 订单完成后再添加积分消费记录,以及同步积分信息
                     return calculateOrderDiscountPriceResponseVO;
                 } else {
-                    LOGGER.error("会员【{}】积分为0,积分抵扣失败!", memberCode);
-                    throw new ServiceException(String.format("会员【%s】积分为0,积分抵扣失败!", memberCode));
+                    LOGGER.error("会员【{}】积分为0,积分抵扣失败!", openId);
+                    return calculateOrderDiscountPriceResponseVO;
                 }
             } else {
                 LOGGER.error("查询会员信息失败!响应结果:{}", memberInfoByCodeResponseJson);
@@ -4684,15 +4691,18 @@ public class OrderServiceImpl implements OrderService {
      * @param orderTotalPrice   订单商品总价
      * @param score             积分
      * @param memberCode        会员码
+     * @param openId            会员open_id:手机号
      * @param goodsDetailsDtos  订单商品详情
      * @param calculateOrderDiscountPriceResponseVO 响应数据
      * @param promotionSkuList  参与了限时特价活动并且与积分抵扣互斥的sku集合
+     * @param mkActivitiesEntityList 根据优先级排序后的活动集合
      *
      * @return                  积分抵扣后的订单总金额
      */
     private BigDecimal calculatePreferentialPrice(BigDecimal orderTotalPrice,
                                                   Integer score,
                                                   String memberCode,
+                                                  String openId,
                                                   CalculateOrderDiscountPriceResponseVO calculateOrderDiscountPriceResponseVO,
                                                   List<GoodsDetailsDto> goodsDetailsDtos,
                                                   List<String> promotionSkuList,
@@ -4764,9 +4774,9 @@ public class OrderServiceImpl implements OrderService {
             }
             Integer scoreLimit = Integer.parseInt(scoreLimitStr);
             if (score < scoreLimit) {
-                LOGGER.error("用户【{}】的积分数量为:{},最低需要{}积分才能抵扣!", memberCode, score, scoreLimit);
+                LOGGER.error("会员码【{}】用户【{}】的积分数量为:{},最低需要{}积分才能抵扣!", memberCode, openId, score, scoreLimit);
                 calculateOrderDiscountPriceResponseVO.setAfterScore(score);
-                throw new ServiceException(String.format("用户【%s】的积分数量为:%s,最低需要%s积分才能抵扣!", memberCode, score, scoreLimit));
+                throw new ServiceException(String.format("用户【%s】的积分数量为:%s,最低需要%s积分才能抵扣!", openId, score, scoreLimit));
             } else {
                 // 积分取整
                 int scoreInteger = score % scoreLimit == 0 ? score : score - (score % scoreLimit);
@@ -4888,10 +4898,10 @@ public class OrderServiceImpl implements OrderService {
                 calculateOrderDiscountPriceResponseVO.setOrderTotalPrice(orderTotalPrice);
                 // 积分抵扣的总金额
                 calculateOrderDiscountPriceResponseVO.setScoreDeductionPrice(goodsDetailScoreDeductionPrice);
-                LOGGER.info("会员【{}】,当前积分:{},抵扣订单金额后剩余积分:{}", memberCode, score, afterScore);
+                LOGGER.info("会员【{}】会员码【{}】,当前积分:{},抵扣订单金额后剩余积分:{}", openId, memberCode, score, afterScore);
             }
         } else {
-            LOGGER.info("会员【{}】的积分小于积分抵扣最低值,不参加积分抵扣!", memberCode);
+            LOGGER.info("会员【{}】会员码【{}】的积分小于积分抵扣最低值,不参加积分抵扣!", openId, memberCode);
         }
         return orderTotalPrice;
     }

+ 1 - 1
kmall-admin/src/main/webapp/WEB-INF/page/sale/sale.html

@@ -308,7 +308,7 @@
                                     <div class="modal-body">
                                         <div>
                                             <label for="customPhone" class="control-label">会员码:</label>
-                                            <i-input autocomplete="off" class="couponBarCodeInput" type="text" ref="couponBarCode" size="60%" id="couponBarCode" @on-enter="calculateOrderPriceSubmit" />
+                                            <input autocomplete="off" type="text" ref="couponBarCode" size="60%" id="couponBarCode" @on-enter="calculateOrderPriceSubmit" />
                                         </div>
                                     </div>
                                     <div class="modal-footer">

+ 12 - 6
kmall-admin/src/main/webapp/js/sale/sale.js

@@ -965,7 +965,7 @@ let vm = new Vue({
             // 每次点击提交订单的时候清空姓名和身份证信息和手机号
             vm.$refs.customName.value = "";
             vm.$refs.customIDCard.value = "";
-            vm.$refs.customPhone.value = "";
+            vm.$refs.customPhone.value = vm.userInfo.customPhone;
             vm.$refs.couponBarCode.value = "";
             if(vm.$refs.couponSn)
                 vm.$refs.couponSn.value = "";
@@ -986,11 +986,14 @@ let vm = new Vue({
 
             // console.log("点击计算=====>" + JSON.stringify(vm.goodsList));
 
-            var couponBarCode = vm.$refs.couponBarCode;
+            var couponBarCode = vm.$refs.couponBarCode.value;
             if (couponBarCode === null || couponBarCode === '') {
-                alert("无会员码,不能参加积分抵扣活动!\n计算中...");
+                confirm("无会员码,不能参加积分抵扣活动!<br/>点击确认开始计算...", function () {
+                    calculateOrderPrice();
+                });
+            } else {
+                calculateOrderPrice();
             }
-            calculateOrderPrice();
         },
         // 提交订单
         submitOrder:function(){
@@ -1338,7 +1341,6 @@ let vm = new Vue({
             this.$nextTick(() => {
                 setTimeout(() => {
                     this.$refs.couponBarCode.focus();
-                    console.log("123");
                 }, 200);
             })
         },
@@ -1346,7 +1348,6 @@ let vm = new Vue({
             this.$nextTick(() => {
                 setTimeout(() => {
                     this.$refs.payCode.focus();
-                    console.log("456");
                 }, 200);
             })
         }
@@ -2113,6 +2114,11 @@ calculateOrderPrice = function() {
                 vm.scoreLimit = r.data.scoreLimit;
                 vm.beforeScore = r.data.beforeScore;
                 vm.afterScore = r.data.afterScore;
+                vm.userInfo.customPhone = r.data.memberPhone;
+                vm.$refs.customPhone.value = r.data.memberPhone;
+                // console.log("memberPhone===>" + r.data.memberPhone);
+                // console.log("this.userInfo.customPhone===>" + vm.userInfo.customPhone);
+                // console.log("vm.$refs.customPhone.value===>" + vm.$refs.customPhone.value);
                 // console.log("计算后数据===>" + JSON.stringify(calGoodsList));
                 // console.log("替换后数据===>" + JSON.stringify(vm.goodsList));