jk-GitHub-coder 4 年之前
父节点
当前提交
399574bbfb

+ 1 - 3
YijiaRestful/src/main/java/com/platform/yijia/controller/ElectronicMembershipCardController.java

@@ -79,7 +79,6 @@ public class ElectronicMembershipCardController {
             String stationCardEnabledFlag = electronicMembershipCardService.getStationCardEnabledFlag(stationId);
             //是否启用电子卡功能
             if(stationCardEnabledFlag.equals("1")){
-                //CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();       //电子会员卡
                 CustomerCardUseRecord customerCardUseRecord = new CustomerCardUseRecord();      //电子会员卡使用记录
                 CustomerCardSetting customerCardSetting = new CustomerCardSetting();        //电子卡优惠规则设置
 
@@ -151,14 +150,13 @@ public class ElectronicMembershipCardController {
                 customerCardUseRecord.setCreateTime(new Date());
                 customerCardUseRecord.setStatus("0");
 
-                CustomerElectronicCard c = new CustomerElectronicCard();
+                CustomerElectronicCard c = new CustomerElectronicCard();    //电子会员卡
                 c.setUnionId(unionId);
                 c.setCardOilsType(cardOilsType);
                 CustomerElectronicCard electronicCardInfoByUnionId = electronicMembershipCardService.getElectronicCardInfoByUnionId(c);
                 if(electronicCardInfoByUnionId !=null && electronicCardInfoByUnionId.getCustomerNo() !=null){
                     customerCardUseRecord.setCustomerNo(electronicCardInfoByUnionId.getCustomerNo());
                 }
-
                 //订单规则 时间+6位随机数
                 Random random = new Random();
                 String str="";

+ 13 - 9
YijiaRestful/src/main/java/com/platform/yijia/controller/PayOrderController.java

@@ -62,17 +62,21 @@ public class PayOrderController {
             payOrder.setConsumer(appUserInfoList.get(0).getBlogNickName()); //昵称
             payOrder.setConsumerId(appUserInfoList.get(0).getUserId()); //用户id
             //添加订单信息,返回订单号
-            String ordNo =payOrderService.AddPayOrderInfo(payOrderRequest, payOrder);
-            if(ordNo.equals("0")){
-                resultData=ResultData.error(CodeMsg.CHECK_DATA);
-            }else if(ordNo.equals("1")){
-                resultData=ResultData.error(CodeMsg.PARAMS_NUll);
+//            String ordNo =payOrderService.AddPayOrderInfo(payOrderRequest, payOrder);
+//            if(ordNo.equals("0")){
+//                resultData=ResultData.error(CodeMsg.CHECK_DATA);
+//            }else if(ordNo.equals("1")){
+//                resultData=ResultData.error(CodeMsg.PARAMS_NUll);
+//            }else {
+//                resultData=ResultData.success(ordNo);
+//            }
+            //接口修订
+            Map<String, Object> stringObjectMap = payOrderService.AddPayOrderInfoNew(payOrderRequest, payOrder);
+            if(stringObjectMap.containsKey("balanceNoEnough")){
+                resultData=ResultData.error(CodeMsg.BALANCE_NOT_EENOUGH);
             }else {
-                resultData=ResultData.success(ordNo);
+                resultData = ResultData.success(stringObjectMap);
             }
-            //接口修订
-//            Map<String, Object> stringObjectMap = payOrderService.AddPayOrderInfoNew(payOrderRequest, payOrder);
-//            resultData = ResultData.success(stringObjectMap);
         }else{
             //登录人验证失败
             resultData=ResultData.error(CodeMsg.USER_NOT_EXSIST);

+ 3 - 0
YijiaRestful/src/main/java/com/platform/yijia/dao/ElectronicMembershipCardMapper.java

@@ -44,4 +44,7 @@ public interface ElectronicMembershipCardMapper {
 
     //插入电子会员卡
     void insetElectronicCard(CustomerElectronicCard customerElectronicCard);
+
+    //根据小程序用户openId查询客户电子会员卡信息-
+    CustomerElectronicCard getElectronicCardInfoByMinaOpenId(CustomerElectronicCard customerElectronicCard);
 }

+ 1 - 0
YijiaRestful/src/main/java/com/platform/yijia/param/request/PayOrderRequest.java

@@ -11,6 +11,7 @@ public class PayOrderRequest {
     private String token;
     private String openId;
     private String amt;     //实收金额
+    private String cardOilsType;    //电子卡类型
     private Integer stationId;
     private String status;
     private String orderLiters;

+ 3 - 0
YijiaRestful/src/main/java/com/platform/yijia/service/ElectronicMembershipCardService.java

@@ -44,4 +44,7 @@ public interface ElectronicMembershipCardService {
     //插入电子会员卡
     void insetElectronicCard(CustomerElectronicCard customerElectronicCard);
 
+    //根据小程序用户openId查询客户电子会员卡信息-
+    CustomerElectronicCard getElectronicCardInfoByMinaOpenId(CustomerElectronicCard customerElectronicCard);
+
 }

+ 6 - 0
YijiaRestful/src/main/java/com/platform/yijia/service/impl/ElectronicMembershipCardServiceImpl.java

@@ -18,6 +18,12 @@ public class ElectronicMembershipCardServiceImpl implements ElectronicMembership
     @Resource
     private ElectronicMembershipCardMapper electronicMembershipCardMapper;
 
+    //根据小程序用户openId查询客户电子会员卡信息-
+    @Override
+    public CustomerElectronicCard getElectronicCardInfoByMinaOpenId(CustomerElectronicCard customerElectronicCard) {
+        return electronicMembershipCardMapper.getElectronicCardInfoByMinaOpenId(customerElectronicCard);
+    }
+
     //插入电子会员卡
     @Override
     public void insetElectronicCard(CustomerElectronicCard customerElectronicCard) {

+ 98 - 26
YijiaRestful/src/main/java/com/platform/yijia/service/impl/PayOrderServiceImpl.java

@@ -5,10 +5,7 @@ import com.platform.yijia.dao.PayOrderMapper;
 import com.platform.yijia.param.request.PayOrderRequest;
 import com.platform.yijia.pojo.*;
 
-import com.platform.yijia.service.AppUserInfoService;
-import com.platform.yijia.service.CustomerGradeServices;
-import com.platform.yijia.service.PayOrderService;
-import com.platform.yijia.service.StationService;
+import com.platform.yijia.service.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -33,6 +30,8 @@ public class PayOrderServiceImpl implements PayOrderService {
     private StationService stationService;
     @Resource
     private CustomerGradeServices customerGradeServices;
+    @Resource
+    private ElectronicMembershipCardService electronicMembershipCardService;
 
     /*
      * 添加订单信息
@@ -195,6 +194,7 @@ public class PayOrderServiceImpl implements PayOrderService {
         //System.out.println("随机生成6位数result :"+result);
         String ordNo=System.nanoTime()+result;
         payOrder.setOrderNo(ordNo);
+        resultMap.put("ordNo", ordNo);
         payOrder.setDiscountCouponAmt(payOrderRequest.getDiscountCouponAmt());  //优惠劵金额
         payOrder.setDiscountCoupon(payOrderRequest.getDiscountCoupon());        //优惠券
         payOrder.setCarNo(payOrderRequest.getCarNo());  //车牌号、
@@ -237,10 +237,15 @@ public class PayOrderServiceImpl implements PayOrderService {
             }
         }
 
+        //电子会员卡插入消费记录
+        CustomerCardUseRecord customerCardUseRecord = new CustomerCardUseRecord();
+        BigDecimal balance = null;  //电子会员卡余额
+
         //订单类型等于1时表示油品
         if(payOrderRequest.getOrderType().equals("1")){
             Double receivableAmt = payOrderRequest.getReceivableAmt();  //获取应收金额
             payOrder.setReceivableAmt(receivableAmt);
+            //计算油品订单信息
             if(receivableAmt != null){
                 Integer stationId = payOrderRequest.getStationId();         //油站ID
                 //String oilGun = payOrderRequest.getOilGun();                //油枪号
@@ -448,11 +453,35 @@ public class PayOrderServiceImpl implements PayOrderService {
                         break;
                 }
 
+                if(payOrderRequest.getPayType().equals("wx")){
+                    payOrder.setWxAmt(Double.valueOf(resultMap.get("amt").toString()));    //微信支付金额
+                }else if(payOrderRequest.getPayType().equals("dzk")){
+                    payOrder.setDzkAmt(Double.valueOf(resultMap.get("amt").toString()));
+                    CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
+                    customerElectronicCard.setCardOilsType(payOrderRequest.getCardOilsType());
+                    customerElectronicCard.setMinaOpenid(payOrderRequest.getOpenId());
+                    customerElectronicCard.setStationId(payOrderRequest.getStationId());
+                    CustomerElectronicCard cardInfo = electronicMembershipCardService.getElectronicCardInfoByMinaOpenId(customerElectronicCard);
+                    if(cardInfo !=null ){
+                        customerCardUseRecord.setOrderNo(ordNo);
+                        customerCardUseRecord.setUnionId(cardInfo.getUnionId());
+                        customerCardUseRecord.setCustomerNo(cardInfo.getCustomerNo());
+                        customerCardUseRecord.setAmt(new BigDecimal(resultMap.get("amt").toString()));
+                        customerCardUseRecord.setStatus("1");
+                        customerCardUseRecord.setCardOilsType(cardInfo.getCardOilsType());
+                        customerCardUseRecord.setBalance(cardInfo.getAmt().subtract(new BigDecimal(resultMap.get("amt").toString())));
+                        customerCardUseRecord.setStationName(cardInfo.getStationName());
+                        customerCardUseRecord.setStationId(cardInfo.getStationId());
+                        customerCardUseRecord.setUsageType("-");
+                        customerCardUseRecord.setCustomerName(payOrder.getConsumer());
+                        customerCardUseRecord.setCreateTime(new Date());
+                        balance = cardInfo.getAmt();
+                    }
+                }
                 payOrder.setOilPirce(oilPrice);
                 payOrder.setOrderLiters(resultMap.get("oilLiters").toString());
                 payOrder.setDiscountAmt(Double.valueOf(resultMap.get("discountAmt").toString()));
                 payOrder.setAmt(Double.valueOf(resultMap.get("amt").toString()));
-                payOrder.setWxAmt(Double.valueOf(resultMap.get("amt").toString()));    //微信支付金额
                 payOrder.setOilName(oilName);      //油品名称
                 //根据油品名称存储油品类型 1.柴油 2 汽油
                 switch (oilName){
@@ -475,16 +504,26 @@ public class PayOrderServiceImpl implements PayOrderService {
                         payOrder.setOilType("1");
                         break;
                 }
-                //数据落地
-                payOrderMapper.insertSelective(payOrder);
-                //根据订单号查询出订单
-                PayOrderExample example=new PayOrderExample();
-                example.or().andOrderNoEqualTo(ordNo);
-                //根据订单号查询返回列表,最好是返回对象
-                List<PayOrder> payOrderList= payOrderMapper.selectByExample(example);
-                //返回订单号
-                ordNo= payOrderList.get(0).getOrderNo();
-                resultMap.put("ordNo", ordNo);
+
+                //判断电子会员卡余额
+                if(payOrderRequest.getPayType().equals("dzk")){
+                    if(customerCardUseRecord.getAmt().compareTo(balance) == -1){
+                        electronicMembershipCardService.insetCardUseRecord(customerCardUseRecord);
+                        //更新电子会员卡余额
+                        CustomerElectronicCard c = new CustomerElectronicCard();
+                        c.setAmt(balance.subtract(customerCardUseRecord.getAmt()));
+                        c.setUnionId(customerCardUseRecord.getUnionId());
+                        c.setStationId(customerCardUseRecord.getStationId());
+                        c.setCardOilsType(customerCardUseRecord.getCardOilsType());
+                        electronicMembershipCardService.updateElectronicCardInfoByUnionId(c);
+                        payOrderMapper.insert(payOrder);
+                    }else {
+                        resultMap.put("balanceNoEnough", "余额不足!");
+                    }
+                }else {
+                    //数据落地
+                    payOrderMapper.insertSelective(payOrder);
+                }
             }
         }else if(payOrderRequest.getOrderType().equals("2")){       //订单类型等于2时表示非油品
             String oilName = payOrderRequest.getOilName();
@@ -495,22 +534,55 @@ public class PayOrderServiceImpl implements PayOrderService {
             }
             payOrder.setReceivableAmt(payOrderRequest.getReceivableAmt());  //非油品应收金额
             payOrder.setAmt(Double.valueOf(payOrderRequest.getReceivableAmt()));  //非油品金额
-            payOrder.setWxAmt(Double.valueOf(payOrderRequest.getReceivableAmt()));    //微信支付金额
             payOrder.setDiscountAmt(Double.valueOf(0));
             resultMap.put("discountAmt", 0);
             resultMap.put("amt", payOrderRequest.getReceivableAmt());
             resultMap.put("oilLiters", "0");
             resultMap.put("discountPrice", "0");
-            //数据落地
-            payOrderMapper.insertSelective(payOrder);
-            //根据订单号查询出订单
-            PayOrderExample example=new PayOrderExample();
-            example.or().andOrderNoEqualTo(ordNo);
-            //根据订单号查询返回列表,最好是返回对象
-            List<PayOrder> payOrderList= payOrderMapper.selectByExample(example);
-            //返回订单号
-            ordNo= payOrderList.get(0).getOrderNo();
-            resultMap.put("ordNo", ordNo);
+            if(payOrderRequest.getPayType().equals("wx")){
+                payOrder.setWxAmt(Double.valueOf(resultMap.get("amt").toString()));    //微信支付金额
+            }else if(payOrderRequest.getPayType().equals("dzk")){
+                payOrder.setDzkAmt(Double.valueOf(resultMap.get("amt").toString()));
+                CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
+                customerElectronicCard.setCardOilsType(payOrderRequest.getCardOilsType());
+                customerElectronicCard.setMinaOpenid(payOrderRequest.getOpenId());
+                customerElectronicCard.setStationId(payOrderRequest.getStationId());
+                CustomerElectronicCard cardInfo = electronicMembershipCardService.getElectronicCardInfoByMinaOpenId(customerElectronicCard);
+                if(cardInfo !=null ){
+                    customerCardUseRecord.setOrderNo(ordNo);
+                    customerCardUseRecord.setUnionId(cardInfo.getUnionId());
+                    customerCardUseRecord.setCustomerNo(cardInfo.getCustomerNo());
+                    customerCardUseRecord.setAmt(new BigDecimal(resultMap.get("amt").toString()));
+                    customerCardUseRecord.setStatus("1");
+                    customerCardUseRecord.setCustomerName(payOrder.getConsumer());
+                    customerCardUseRecord.setCardOilsType(cardInfo.getCardOilsType());
+                    customerCardUseRecord.setBalance(cardInfo.getAmt().subtract(new BigDecimal(resultMap.get("amt").toString())));
+                    customerCardUseRecord.setStationName(cardInfo.getStationName());
+                    customerCardUseRecord.setStationId(cardInfo.getStationId());
+                    customerCardUseRecord.setUsageType("-");
+                    customerCardUseRecord.setCreateTime(new Date());
+                    balance = cardInfo.getAmt();
+                }
+            }
+            if(payOrderRequest.getPayType().equals("dzk")){
+                //判断电子会员卡余额
+                if(customerCardUseRecord.getAmt().compareTo(balance) == -1){
+                    electronicMembershipCardService.insetCardUseRecord(customerCardUseRecord);
+                    //更新电子会员卡余额
+                    CustomerElectronicCard c = new CustomerElectronicCard();
+                    c.setAmt(balance.subtract(customerCardUseRecord.getAmt()));
+                    c.setUnionId(customerCardUseRecord.getUnionId());
+                    c.setStationId(customerCardUseRecord.getStationId());
+                    c.setCardOilsType(customerCardUseRecord.getCardOilsType());
+                    electronicMembershipCardService.updateElectronicCardInfoByUnionId(c);
+                    payOrderMapper.insertSelective(payOrder);
+                }else {
+                    resultMap.put("balanceNoEnough", "余额不足!");
+                }
+            }else {
+                //数据落地
+                payOrderMapper.insertSelective(payOrder);
+            }
         }
         return resultMap;
     }

+ 1 - 0
YijiaRestful/src/main/java/com/platform/yijia/utils/CodeMsg.java

@@ -10,6 +10,7 @@ public class CodeMsg {
     public static CodeMsg USER_NOT_EXSIST = new CodeMsg(-1,"用户不存在");
     public static CodeMsg USER_EXSIST_CARD = new CodeMsg(-1,"该用户暂无此卡");
     public static CodeMsg USER_EXSIST = new CodeMsg(-1,"用户已存在");
+    public static CodeMsg BALANCE_NOT_EENOUGH = new CodeMsg(-2,"电子卡余额不足");
     public static CodeMsg PASSWORD_ERROR = new CodeMsg(-2,"密码错误");
     public static CodeMsg ACCOUNT_DISABLE = new CodeMsg(-3,"该账号已被停用");
     public static CodeMsg NO_FollowGzh = new CodeMsg(-4,"未关注公众号");

+ 30 - 0
YijiaRestful/src/main/resources/mapper/ElectronicMembershipCardMapper.xml

@@ -518,4 +518,34 @@
         </where>
     </select>
 
+    <!--根据小程序用户openId查询客户电子会员卡信息-->
+    <select id="getElectronicCardInfoByMinaOpenId" resultMap="CardBaseResultMap" parameterType="com.platform.yijia.pojo.CustomerElectronicCard">
+        SELECT
+            id,
+            union_id,
+            blog_openid,
+            mina_openid,
+            customer_no,
+            customer_name,
+            amt,
+            card_oils_type,
+            station_id,
+            station_name,
+            create_time,
+            recently_time
+        FROM
+            customer_electronic_card
+        <where>
+            <if test="stationId !='' and stationId != null" >
+                station_id = #{stationId}
+            </if>
+            <if test="minaOpenid !='' and minaOpenid != null" >
+                AND mina_openid = #{minaOpenid}
+            </if>
+            <if test="cardOilsType !='' and cardOilsType != null" >
+                AND card_oils_type = #{cardOilsType}
+            </if>
+        </where>
+    </select>
+
 </mapper>

+ 1 - 1
YijiaRestful/src/main/resources/mapper/PayOrderMapper.xml

@@ -324,7 +324,7 @@
     -->
     INSERT into
         pay_order (order_id, order_no, oil_gun,
-        oil_name, oli_price, consumer_id, consumer,
+        oil_name, oil_pirce, consumer_id, consumer,
         amt, station_id, status,
         order_liters, pay_type, pay_way,
         pay_date, oil_personnel, created_date,