|
@@ -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",
|