Parcourir la source

生成订单接口修改

jk-GitHub-coder il y a 4 ans
Parent
commit
1a8478f48b

+ 212 - 24
YijiaRestful/src/main/java/com/platform/yijia/controller/PayOrderController.java

@@ -1,27 +1,22 @@
 package com.platform.yijia.controller;
 import com.alibaba.fastjson.JSONObject;
 import com.google.gson.Gson;
+import com.platform.yijia.dao.PayOrderMapper;
 import com.platform.yijia.param.request.PayOrderRequest;
-import com.platform.yijia.pojo.AppUserInfo;
-import com.platform.yijia.pojo.PayOrder;
-import com.platform.yijia.pojo.StationOilPrice;
-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.pojo.*;
+import com.platform.yijia.service.*;
 import com.platform.yijia.utils.CodeMsg;
 import com.platform.yijia.utils.ResultData;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import javax.naming.ldap.HasControls;
 import java.math.BigDecimal;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Controller
 @RequestMapping("/demo")
@@ -35,6 +30,10 @@ public class PayOrderController {
     private StationService stationService;
     @Resource
     private CustomerGradeServices customerGradeServices;
+    @Resource
+    private PayOrderMapper payOrderMapper;
+    @Resource
+    private ElectronicMembershipCardService electronicMembershipCardService;
 
     //一键支付,生成订单
     @RequestMapping(value = "/AddPayOrderInfo", consumes = "application/json", method = RequestMethod.POST)
@@ -70,7 +69,7 @@ public class PayOrderController {
             }else {
                 resultData=ResultData.success(ordNo);
             }
-            //接口修订
+//            //接口修订
 //            Map<String, Object> stringObjectMap = payOrderService.AddPayOrderInfoNew(payOrderRequest, payOrder);
 //            if(stringObjectMap.containsKey("balanceNoEnough")){
 //                resultData=ResultData.error(CodeMsg.BALANCE_NOT_EENOUGH);
@@ -84,23 +83,215 @@ public class PayOrderController {
         return gson.toJson(resultData);
     }
 
+
+    //小程序支付生成订单
+    @RequestMapping(value = "/AddPayOrderInfoNew", consumes = "application/json", method = RequestMethod.POST)
+    @ResponseBody
+    @Transactional
+    public String  AddPayOrderInfoNew(@RequestBody PayOrderRequest payOrderRequest){
+        logger.info("获取订单前端传来参数openId:"+ payOrderRequest.getOpenId());
+        logger.info("获取订单前端传来参数userType:"+ payOrderRequest.getUserType());
+        Gson gson =new Gson();
+        ResultData resultData =null;
+        AppUserInfo appUserInfo =new AppUserInfo();
+        appUserInfo.setUserType(payOrderRequest.getUserType());         //订单类型 是小程序还是公众号
+        if(payOrderRequest.getUserType().equals("1")){
+            appUserInfo.setBlogOpenid(payOrderRequest.getOpenId());     //1 是公众号
+        }else if(payOrderRequest.getUserType().equals("2")){
+            appUserInfo.setMinaOpenid(payOrderRequest.getOpenId());   //2是小程序
+        }
+        List<AppUserInfo> appUserInfoList =appUserInfoService.Authentication(appUserInfo);
+        Map<String ,Object> resultMap = new HashMap<>();            //返回结果集
+        //判断登录人员是否验证成功
+        if(appUserInfoList!=null && appUserInfoList.size()>0){
+            PayOrder payOrder = new PayOrder();
+            payOrder.setConsumer(appUserInfoList.get(0).getBlogNickName());             //昵称
+            payOrder.setConsumerId(appUserInfoList.get(0).getUserId());                 //用户id
+            Random random = new Random();
+            String result="";
+            for(int i=0;i<6;i++){
+                result+=random.nextInt(10);
+            }
+            String ordNo=System.nanoTime()+result;
+            payOrder.setOrderNo(ordNo);                                             //订单号
+            logger.info("生成的订单号:" + ordNo);
+            payOrder.setDiscountCouponAmt(payOrderRequest.getDiscountCouponAmt());  //优惠劵金额
+            payOrder.setDiscountCoupon(payOrderRequest.getDiscountCoupon());        //优惠券
+            payOrder.setCarNo(payOrderRequest.getCarNo());                          //车牌号、
+            payOrder.setCustomerGrade(payOrderRequest.getCustomerGrade());          //客户电话
+            payOrder.setMemberNo(payOrderRequest.getMemberNo());                    //会员卡号
+            payOrder.setMemberAmt(payOrderRequest.getMemberAmt());                  //会员支付金额
+            //payOrder.setPrintCount(payOrderRequest.getPrintCount());              //小票数量
+            payOrder.setScore(payOrderRequest.getScore());                          //积分
+            payOrder.setStationId(payOrderRequest.getStationId());                  //油站id
+            payOrder.setStatus("0");                                                //创建订单 未支付状态 0
+            if(StringUtils.isNotBlank(payOrderRequest.getUserType())){
+                String userType = payOrderRequest.getUserType();            //支付方式:02公众号,03小程序',
+                switch (userType){
+                    case "1":
+                        payOrder.setPayWay("02");
+                        break;
+                    case "2":
+                        payOrder.setPayWay("03");
+                        break;
+                }
+            }
+            payOrder.setCreatedDate(new Date());                    //创建时间
+            payOrder.setOrderType(payOrderRequest.getOrderType());  //订单类型
+            payOrder.setOilGun(payOrderRequest.getOilGun());        //油枪号
+            //根据油站和油枪获取加油员和油品价格 油站名称
+            HashMap<String, Object> params = new HashMap<>();
+            params.put("oliGunNo", payOrderRequest.getOilGun());
+            params.put("stationId", payOrderRequest.getStationId());
+            String oilPersonnel = "";
+            //使用list原因:一个枪号对应多个加油员场景
+            List<Map> mapResultList = payOrderMapper.selectPersonelName(params);
+            if(mapResultList != null && mapResultList.size() > 0){
+                for (Map per : mapResultList){
+                    if(per.containsKey("personelName") && per.get("personelName").toString() !=null && per.get("personelName").toString() !=""){
+                        oilPersonnel += per.get("personelName").toString() +",";
+                    }
+                }
+                if(oilPersonnel !=""){
+                    payOrder.setOilPersonnel(oilPersonnel.substring(0, oilPersonnel.length()-1));   //加油员
+                }
+                if(mapResultList.get(0).containsKey("stationName") && mapResultList.get(0).get("stationName").toString() !="" && mapResultList.get(0).get("stationName").toString() !=null ){
+                    payOrder.setStationName(mapResultList.get(0).get("stationName").toString());        //油站名称
+                }
+            }
+            String orderType = payOrderRequest.getOrderType();                          //获取订单类型
+            if(orderType.equals("1")){                                                  //订单类型是油品时计算
+                resultMap = this.calculateAmt(payOrderRequest);                         //计算油价 加油升数 优惠金额 实收金额 优惠价格
+                payOrder.setOilPirce(resultMap.get("oilPrice").toString());
+                payOrder.setOrderLiters(resultMap.get("oilLiters").toString());
+                payOrder.setDiscountAmt(Double.valueOf(resultMap.get("discountAmt").toString()));
+                payOrder.setAmt(Double.valueOf(resultMap.get("amt").toString()));
+            }
+            payOrder.setReceivableAmt(payOrderRequest.getReceivableAmt());                //订单应收金额
+            String oilName =payOrderRequest.getOilName();
+            payOrder.setOilName(oilName);                   //油品名称
+            String cardOilsType ="";
+            switch (oilName){                               //根据油品名称存储油品类型 1.柴油 2 汽油
+                case "92#":
+                    payOrder.setOilType("2");
+                    cardOilsType ="2";
+                    break;
+                case "95#":
+                    payOrder.setOilType("2");
+                    cardOilsType ="2";
+                    break;
+                case "97#":
+                    payOrder.setOilType("2");
+                    cardOilsType ="2";
+                    break;
+                case "0#":
+                    payOrder.setOilType("1");
+                    cardOilsType ="1";
+                    break;
+                case "-10#":
+                    payOrder.setOilType("1");
+                    cardOilsType ="1";
+                    break;
+                case "-20#":
+                    payOrder.setOilType("1");
+                    cardOilsType ="1";
+                    break;
+            }
+            payOrder.setOilType(orderType);
+            //判断当前传来支付类型是电子卡支付 还是微信
+            if(payOrderRequest.getPayType().equals("wx")){
+                payOrder.setPayType("wx");                          //支付类型
+                switch (orderType){
+                    case "1":       //油品
+                        payOrderMapper.insertSelective(payOrder);
+                        resultMap.put("ordNo", ordNo);
+                        resultData = ResultData.success(resultMap);
+                        break;
+                    case "2":       //非油品
+                        Map<String, String> m = stationService.getStationAppIdAndAppSecret(payOrderRequest.getStationId());
+                        if(m.containsKey("stationName") && m.get("stationName") !=null){
+                            payOrder.setStationName(m.get("stationName"));
+                        }
+                        payOrder.setAmt(Double.valueOf(payOrderRequest.getReceivableAmt()));        //非油品金额
+                        payOrder.setDiscountAmt(Double.valueOf(0));                                 //优惠金额
+                        payOrder.setOilPirce(payOrderRequest.getReceivableAmt().toString());        //非油品价格
+                        payOrder.setOrderLiters("0");
+                        resultMap.put("discountAmt", "0");                                          //优惠价格
+                        resultMap.put("amt", payOrderRequest.getReceivableAmt());                   //实收价格
+                        resultMap.put("receivableAmt", payOrderRequest.getReceivableAmt());         //应收价格
+                        resultMap.put("oilLiters", "0");
+                        resultMap.put("discountPrice", "0");
+                        payOrderMapper.insertSelective(payOrder);
+                        resultMap.put("ordNo", ordNo);
+                        resultData = ResultData.success(resultMap);
+                        break;
+                }
+            }else if(payOrderRequest.getPayType().equals("dzk")){                           //电子会员卡
+                payOrder.setPayType("dzk");                                                 //支付类型
+                payOrder.setPayDate(new Date());                                            //支付时间
+                payOrder.setReceivedAmt(Double.valueOf(resultMap.get("amt").toString()));   //实收金额
+                CustomerCardUseRecord customerCardUseRecord = new CustomerCardUseRecord();  //电子会员卡插入消费记录
+                BigDecimal balance = null;                                                  //电子会员卡余额
+                payOrder.setDzkAmt(Double.valueOf(resultMap.get("amt").toString()));        //订单电子会员卡消费金额
+                CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
+                customerElectronicCard.setCardOilsType(cardOilsType);
+                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();
+                }
+                //判断订单金额是否小于电子会员卡的余额
+                if(balance !=null && 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(cardOilsType);
+                    electronicMembershipCardService.updateElectronicCardInfoByUnionId(c);
+                    payOrder.setStatus("1");
+                    payOrderMapper.insertSelective(payOrder);
+                    resultMap.put("ordNo", ordNo);
+                    resultData = ResultData.success(resultMap);
+                }else {
+                    resultData=ResultData.error(CodeMsg.BALANCE_NOT_EENOUGH);
+                }
+            }
+        }else{
+            //登录人验证失败
+            resultData=ResultData.error(CodeMsg.USER_NOT_EXSIST);
+        }
+        return gson.toJson(resultData);
+    }
+
     /***
      * 计算订单金额
      * @return
      */
-    @RequestMapping(value = "/calculateAmt", consumes = "application/json", method = RequestMethod.POST)
-    @ResponseBody
-    public String calculateAmt(@RequestBody PayOrderRequest payOrderRequest){
-        Gson gson =new Gson();
-        ResultData resultData =null;
+    public Map<String ,Object> calculateAmt(PayOrderRequest payOrderRequest){
+        Map<String ,Object> resultMap = new HashMap<>();
         if(payOrderRequest.getReceivableAmt() !=null){  //应收金额
             Double receivableAmt = payOrderRequest.getReceivableAmt();  //应收金额 用户输入的金额
             Integer stationId = payOrderRequest.getStationId();         //油站ID
-            String oilGun = payOrderRequest.getOilGun();                //油枪号
+            //String oilGun = payOrderRequest.getOilGun();                //油枪号
             String oilName = payOrderRequest.getOilName();          //油品名称
             String openId = payOrderRequest.getOpenId();        //用户的openId
             String mobilePhone = payOrderRequest.getCustomerPhone();        //客户手机号
-
             //获取油品价格
             StationOilPrice stationOilPrice = new StationOilPrice();
             stationOilPrice.setStationId(stationId);
@@ -112,10 +303,8 @@ public class PayOrderController {
             BigDecimal discountPrice = null;
             BigDecimal amt = null;
 
-            Map<String ,Object> resultMap = new HashMap<>();
             resultMap.put("oilPrice", oilPrice);        //油品价格
             resultMap.put("receivableAmt", receivableAmt);        //应收价格
-
             //该油站的优惠方式
             String stationDiscountWay = stationService.getStationDiscountWay(stationId.toString());
             Map<String ,Object> params = new HashMap<String, Object>();
@@ -301,13 +490,12 @@ public class PayOrderController {
                     }
                     break;
             }
-            resultData = ResultData.success(resultMap);
+
+            //resultData = ResultData.success(resultMap);
         }
-        return gson.toJson(resultData);
+        return resultMap;
     }
 
-
-
     /**
      * 根据订单号获取订单信息
      * produces="application/json;charset=UTF-8",consumes = "application/json",