PayOrderController.java 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557
  1. package com.platform.yijia.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.google.gson.Gson;
  4. import com.platform.yijia.dao.PayOrderMapper;
  5. import com.platform.yijia.param.request.PayOrderRequest;
  6. import com.platform.yijia.pojo.*;
  7. import com.platform.yijia.service.*;
  8. import com.platform.yijia.utils.CodeMsg;
  9. import com.platform.yijia.utils.ResultData;
  10. import org.apache.commons.lang3.StringUtils;
  11. import org.slf4j.Logger;
  12. import org.slf4j.LoggerFactory;
  13. import org.springframework.stereotype.Controller;
  14. import org.springframework.transaction.annotation.Transactional;
  15. import org.springframework.web.bind.annotation.*;
  16. import javax.annotation.Resource;
  17. import javax.naming.ldap.HasControls;
  18. import java.math.BigDecimal;
  19. import java.util.*;
  20. @Controller
  21. @RequestMapping("/demo")
  22. public class PayOrderController {
  23. private static Logger logger =(Logger) LoggerFactory.getLogger(PayOrderController.class);
  24. @Resource
  25. private PayOrderService payOrderService;
  26. @Resource
  27. private AppUserInfoService appUserInfoService;
  28. @Resource
  29. private StationService stationService;
  30. @Resource
  31. private CustomerGradeServices customerGradeServices;
  32. @Resource
  33. private PayOrderMapper payOrderMapper;
  34. @Resource
  35. private ElectronicMembershipCardService electronicMembershipCardService;
  36. //一键支付,生成订单
  37. @RequestMapping(value = "/AddPayOrderInfo", consumes = "application/json", method = RequestMethod.POST)
  38. @ResponseBody
  39. public String AddPayOrderInfo(@RequestBody PayOrderRequest payOrderRequest){
  40. logger.info("获取订单前端传来参数openID:"+ payOrderRequest.getOpenId());
  41. logger.info("获取订单前端传来参数userType:"+ payOrderRequest.getUserType());
  42. Gson gson =new Gson();
  43. ResultData resultData =null;
  44. //根据token 和登录类型 身份验证
  45. AppUserInfo appUserInfo =new AppUserInfo();
  46. //订单类型 是小程序还是公众号
  47. appUserInfo.setUserType(payOrderRequest.getUserType());
  48. if(payOrderRequest.getUserType().equals("1")){
  49. //1 是公众号
  50. appUserInfo.setBlogOpenid(payOrderRequest.getOpenId());
  51. }else if(payOrderRequest.getUserType().equals("2")){
  52. //2是小程序
  53. appUserInfo.setMinaOpenid(payOrderRequest.getOpenId());
  54. }
  55. List<AppUserInfo> appUserInfoList =appUserInfoService.Authentication(appUserInfo);
  56. //判断登录人员是否验证成功
  57. if(appUserInfoList!=null&&appUserInfoList.size()>0){
  58. PayOrder payOrder=new PayOrder();
  59. payOrder.setConsumer(appUserInfoList.get(0).getBlogNickName()); //昵称
  60. payOrder.setConsumerId(appUserInfoList.get(0).getUserId()); //用户id
  61. //添加订单信息,返回订单号
  62. String ordNo =payOrderService.AddPayOrderInfo(payOrderRequest, payOrder);
  63. if(ordNo.equals("0")){
  64. resultData=ResultData.error(CodeMsg.CHECK_DATA);
  65. }else if(ordNo.equals("1")){
  66. resultData=ResultData.error(CodeMsg.PARAMS_NUll);
  67. }else {
  68. resultData=ResultData.success(ordNo);
  69. }
  70. // //接口修订
  71. // Map<String, Object> stringObjectMap = payOrderService.AddPayOrderInfoNew(payOrderRequest, payOrder);
  72. // if(stringObjectMap.containsKey("balanceNoEnough")){
  73. // resultData=ResultData.error(CodeMsg.BALANCE_NOT_EENOUGH);
  74. // }else {
  75. // resultData = ResultData.success(stringObjectMap);
  76. // }
  77. }else{
  78. //登录人验证失败
  79. resultData=ResultData.error(CodeMsg.USER_NOT_EXSIST);
  80. }
  81. return gson.toJson(resultData);
  82. }
  83. //小程序支付生成订单
  84. @RequestMapping(value = "/AddPayOrderInfoNew", consumes = "application/json", method = RequestMethod.POST)
  85. @ResponseBody
  86. @Transactional
  87. public String AddPayOrderInfoNew(@RequestBody PayOrderRequest payOrderRequest){
  88. logger.info("获取订单前端传来参数openId:"+ payOrderRequest.getOpenId());
  89. logger.info("获取订单前端传来参数userType:"+ payOrderRequest.getUserType());
  90. Gson gson =new Gson();
  91. ResultData resultData =null;
  92. AppUserInfo appUserInfo =new AppUserInfo();
  93. appUserInfo.setUserType(payOrderRequest.getUserType()); //订单类型 是小程序还是公众号
  94. if(payOrderRequest.getUserType().equals("1")){
  95. appUserInfo.setBlogOpenid(payOrderRequest.getOpenId()); //1 是公众号
  96. }else if(payOrderRequest.getUserType().equals("2")){
  97. appUserInfo.setMinaOpenid(payOrderRequest.getOpenId()); //2是小程序
  98. }
  99. List<AppUserInfo> appUserInfoList =appUserInfoService.Authentication(appUserInfo);
  100. Map<String ,Object> resultMap = new HashMap<>(); //返回结果集
  101. //判断登录人员是否验证成功
  102. if(appUserInfoList!=null && appUserInfoList.size()>0){
  103. PayOrder payOrder = new PayOrder();
  104. payOrder.setConsumer(appUserInfoList.get(0).getBlogNickName()); //昵称
  105. payOrder.setConsumerId(appUserInfoList.get(0).getUserId()); //用户id
  106. Random random = new Random();
  107. String result="";
  108. for(int i=0;i<6;i++){
  109. result+=random.nextInt(10);
  110. }
  111. String ordNo=System.nanoTime()+result;
  112. payOrder.setOrderNo(ordNo); //订单号
  113. logger.info("生成的订单号:" + ordNo);
  114. payOrder.setDiscountCouponAmt(payOrderRequest.getDiscountCouponAmt()); //优惠劵金额
  115. payOrder.setDiscountCoupon(payOrderRequest.getDiscountCoupon()); //优惠券
  116. payOrder.setCarNo(payOrderRequest.getCarNo()); //车牌号、
  117. payOrder.setCustomerGrade(payOrderRequest.getCustomerGrade()); //客户电话
  118. payOrder.setMemberNo(payOrderRequest.getMemberNo()); //会员卡号
  119. payOrder.setMemberAmt(payOrderRequest.getMemberAmt()); //会员支付金额
  120. //payOrder.setPrintCount(payOrderRequest.getPrintCount()); //小票数量
  121. payOrder.setScore(payOrderRequest.getScore()); //积分
  122. payOrder.setStationId(payOrderRequest.getStationId()); //油站id
  123. payOrder.setStatus("0"); //创建订单 未支付状态 0
  124. if(StringUtils.isNotBlank(payOrderRequest.getUserType())){
  125. String userType = payOrderRequest.getUserType(); //支付方式:02公众号,03小程序',
  126. switch (userType){
  127. case "1":
  128. payOrder.setPayWay("02");
  129. break;
  130. case "2":
  131. payOrder.setPayWay("03");
  132. break;
  133. }
  134. }
  135. payOrder.setCreatedDate(new Date()); //创建时间
  136. payOrder.setOrderType(payOrderRequest.getOrderType()); //订单类型
  137. payOrder.setOilGun(payOrderRequest.getOilGun()); //油枪号
  138. //根据油站和油枪获取加油员和油品价格 油站名称
  139. HashMap<String, Object> params = new HashMap<>();
  140. params.put("oliGunNo", payOrderRequest.getOilGun());
  141. params.put("stationId", payOrderRequest.getStationId());
  142. String oilPersonnel = "";
  143. //使用list原因:一个枪号对应多个加油员场景
  144. List<Map> mapResultList = payOrderMapper.selectPersonelName(params);
  145. if(mapResultList != null && mapResultList.size() > 0){
  146. for (Map per : mapResultList){
  147. if(per.containsKey("personelName") && per.get("personelName").toString() !=null && per.get("personelName").toString() !=""){
  148. oilPersonnel += per.get("personelName").toString() +",";
  149. }
  150. }
  151. if(oilPersonnel !=""){
  152. payOrder.setOilPersonnel(oilPersonnel.substring(0, oilPersonnel.length()-1)); //加油员
  153. }
  154. if(mapResultList.get(0).containsKey("stationName") && mapResultList.get(0).get("stationName").toString() !="" && mapResultList.get(0).get("stationName").toString() !=null ){
  155. payOrder.setStationName(mapResultList.get(0).get("stationName").toString()); //油站名称
  156. }
  157. }
  158. String orderType = payOrderRequest.getOrderType(); //获取订单类型
  159. if(orderType.equals("1")){ //订单类型是油品时计算
  160. resultMap = this.calculateAmt(payOrderRequest); //计算油价 加油升数 优惠金额 实收金额 优惠价格
  161. payOrder.setOilPirce(resultMap.get("oilPrice").toString());
  162. payOrder.setOrderLiters(resultMap.get("oilLiters").toString());
  163. payOrder.setDiscountAmt(Double.valueOf(resultMap.get("discountAmt").toString()));
  164. payOrder.setAmt(Double.valueOf(resultMap.get("amt").toString()));
  165. }
  166. payOrder.setReceivableAmt(payOrderRequest.getReceivableAmt()); //订单应收金额
  167. String oilName =payOrderRequest.getOilName();
  168. payOrder.setOilName(oilName); //油品名称
  169. String cardOilsType ="";
  170. switch (oilName){ //根据油品名称存储油品类型 1.柴油 2 汽油
  171. case "92#":
  172. payOrder.setOilType("2");
  173. cardOilsType ="2";
  174. break;
  175. case "95#":
  176. payOrder.setOilType("2");
  177. cardOilsType ="2";
  178. break;
  179. case "97#":
  180. payOrder.setOilType("2");
  181. cardOilsType ="2";
  182. break;
  183. case "0#":
  184. payOrder.setOilType("1");
  185. cardOilsType ="1";
  186. break;
  187. case "-10#":
  188. payOrder.setOilType("1");
  189. cardOilsType ="1";
  190. break;
  191. case "-20#":
  192. payOrder.setOilType("1");
  193. cardOilsType ="1";
  194. break;
  195. }
  196. payOrder.setOilType(orderType);
  197. //判断当前传来支付类型是电子卡支付 还是微信
  198. if(payOrderRequest.getPayType().equals("wx")){
  199. payOrder.setPayType("wx"); //支付类型
  200. switch (orderType){
  201. case "1": //油品
  202. payOrderMapper.insertSelective(payOrder);
  203. resultMap.put("ordNo", ordNo);
  204. resultData = ResultData.success(resultMap);
  205. break;
  206. case "2": //非油品
  207. Map<String, String> m = stationService.getStationAppIdAndAppSecret(payOrderRequest.getStationId());
  208. if(m.containsKey("stationName") && m.get("stationName") !=null){
  209. payOrder.setStationName(m.get("stationName"));
  210. }
  211. payOrder.setAmt(Double.valueOf(payOrderRequest.getReceivableAmt())); //非油品金额
  212. payOrder.setDiscountAmt(Double.valueOf(0)); //优惠金额
  213. payOrder.setOilPirce(payOrderRequest.getReceivableAmt().toString()); //非油品价格
  214. payOrder.setOrderLiters("0");
  215. resultMap.put("discountAmt", "0"); //优惠价格
  216. resultMap.put("amt", payOrderRequest.getReceivableAmt()); //实收价格
  217. resultMap.put("receivableAmt", payOrderRequest.getReceivableAmt()); //应收价格
  218. resultMap.put("oilLiters", "0");
  219. resultMap.put("discountPrice", "0");
  220. payOrderMapper.insertSelective(payOrder);
  221. resultMap.put("ordNo", ordNo);
  222. resultData = ResultData.success(resultMap);
  223. break;
  224. }
  225. }else if(payOrderRequest.getPayType().equals("dzk")){ //电子会员卡
  226. payOrder.setPayType("dzk"); //支付类型
  227. payOrder.setPayDate(new Date()); //支付时间
  228. payOrder.setReceivedAmt(Double.valueOf(resultMap.get("amt").toString())); //实收金额
  229. CustomerCardUseRecord customerCardUseRecord = new CustomerCardUseRecord(); //电子会员卡插入消费记录
  230. BigDecimal balance = null; //电子会员卡余额
  231. payOrder.setDzkAmt(Double.valueOf(resultMap.get("amt").toString())); //订单电子会员卡消费金额
  232. CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
  233. customerElectronicCard.setCardOilsType(cardOilsType);
  234. customerElectronicCard.setMinaOpenid(payOrderRequest.getOpenId());
  235. customerElectronicCard.setStationId(payOrderRequest.getStationId());
  236. //获取用户电子会员卡信息
  237. CustomerElectronicCard cardInfo = electronicMembershipCardService.getElectronicCardInfoByMinaOpenId(customerElectronicCard);
  238. if(cardInfo !=null ){
  239. customerCardUseRecord.setOrderNo(ordNo); //电子会员卡记录订单号
  240. customerCardUseRecord.setUnionId(cardInfo.getUnionId()); //电子会员卡记录用户唯一标识
  241. customerCardUseRecord.setCustomerNo(cardInfo.getCustomerNo());
  242. customerCardUseRecord.setAmt(new BigDecimal(resultMap.get("amt").toString())); //电子会员卡记录用户余额
  243. customerCardUseRecord.setStatus("1");
  244. customerCardUseRecord.setCardOilsType(cardInfo.getCardOilsType());
  245. customerCardUseRecord.setBalance(cardInfo.getAmt().subtract(new BigDecimal(resultMap.get("amt").toString())));
  246. customerCardUseRecord.setStationName(cardInfo.getStationName());
  247. customerCardUseRecord.setStationId(cardInfo.getStationId());
  248. customerCardUseRecord.setUsageType("-");
  249. customerCardUseRecord.setCustomerName(payOrder.getConsumer());
  250. customerCardUseRecord.setCreateTime(new Date());
  251. balance = cardInfo.getAmt();
  252. }
  253. //判断订单金额是否小于电子会员卡的余额
  254. if(balance !=null && customerCardUseRecord.getAmt().compareTo(balance) == -1){
  255. electronicMembershipCardService.insetCardUseRecord(customerCardUseRecord);
  256. //更新电子会员卡余额
  257. CustomerElectronicCard c = new CustomerElectronicCard();
  258. c.setAmt(balance.subtract(customerCardUseRecord.getAmt()));
  259. c.setUnionId(customerCardUseRecord.getUnionId());
  260. c.setStationId(customerCardUseRecord.getStationId());
  261. c.setCardOilsType(cardOilsType);
  262. electronicMembershipCardService.updateElectronicCardInfoByUnionId(c);
  263. payOrder.setStatus("1");
  264. payOrderMapper.insertSelective(payOrder);
  265. resultMap.put("ordNo", ordNo);
  266. resultData = ResultData.success(resultMap);
  267. }else {
  268. resultData=ResultData.error(CodeMsg.BALANCE_NOT_EENOUGH);
  269. }
  270. }
  271. }else{
  272. //登录人验证失败
  273. resultData=ResultData.error(CodeMsg.USER_NOT_EXSIST);
  274. }
  275. return gson.toJson(resultData);
  276. }
  277. /***
  278. * 计算订单金额
  279. * @return
  280. */
  281. public Map<String ,Object> calculateAmt(PayOrderRequest payOrderRequest){
  282. Map<String ,Object> resultMap = new HashMap<>();
  283. if(payOrderRequest.getReceivableAmt() !=null){ //应收金额
  284. Double receivableAmt = payOrderRequest.getReceivableAmt(); //应收金额 用户输入的金额
  285. Integer stationId = payOrderRequest.getStationId(); //油站ID
  286. //String oilGun = payOrderRequest.getOilGun(); //油枪号
  287. String oilName = payOrderRequest.getOilName(); //油品名称
  288. String openId = payOrderRequest.getOpenId(); //用户的openId
  289. String mobilePhone = payOrderRequest.getCustomerPhone(); //客户手机号
  290. //获取油品价格
  291. StationOilPrice stationOilPrice = new StationOilPrice();
  292. stationOilPrice.setStationId(stationId);
  293. stationOilPrice.setOilName(oilName);
  294. StationOilPrice oilPriceInfo = stationService.getStationOilPrice(stationOilPrice);
  295. String oilPrice = oilPriceInfo.getOilPrice();
  296. BigDecimal oilLiters = null;
  297. BigDecimal discountAmt =null;
  298. BigDecimal discountPrice = null;
  299. BigDecimal amt = null;
  300. resultMap.put("oilPrice", oilPrice); //油品价格
  301. resultMap.put("receivableAmt", receivableAmt); //应收价格
  302. //该油站的优惠方式
  303. String stationDiscountWay = stationService.getStationDiscountWay(stationId.toString());
  304. Map<String ,Object> params = new HashMap<String, Object>();
  305. params.put("stationId", stationId);
  306. params.put("oilName", oilName);
  307. BigDecimal receivableAmt_b = new BigDecimal(receivableAmt); //传入的应收金额
  308. switch (stationDiscountWay){
  309. case "1": //1.等级直降
  310. //查询等级直降的优惠方式
  311. params.put("mobilePhone", mobilePhone);
  312. params.put("minaOpenid", openId);
  313. //查询客户等级信息
  314. List<Map<String, Object>> customerGradeInfo = customerGradeServices.getCustomerGradeInfo(params);
  315. if(customerGradeInfo != null && customerGradeInfo.size() >0){ //已存在客户等级信息
  316. //使用客户已存在的等级计算优惠
  317. oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);
  318. discountAmt = oilLiters.multiply(new BigDecimal(customerGradeInfo.get(0).get("gasoilDiscountLitre").toString()));
  319. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  320. amt = receivableAmt_b.subtract(discountAmt);
  321. discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
  322. resultMap.put("discountAmt", discountAmt.doubleValue());
  323. resultMap.put("amt", amt.doubleValue());
  324. resultMap.put("oilLiters", oilLiters.doubleValue());
  325. resultMap.put("discountPrice", discountPrice.doubleValue());
  326. }else {
  327. //不存在客户等级信息时,查询油站的客户等级直降优惠(查询结果根据会员成长值条件做升序查询)
  328. List<Map> customerGradeList = customerGradeServices.getCustomerGradeList(params);
  329. //如果存在
  330. if(customerGradeList !=null && customerGradeList.size() >0){
  331. //用户第一次购买 取等级最低初始会员的优惠条件计算
  332. oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP); //加油升数
  333. discountAmt = oilLiters.multiply(new BigDecimal(customerGradeList.get(0).get("gasoilDiscountLitre").toString()));
  334. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  335. amt = receivableAmt_b.subtract(discountAmt);
  336. discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
  337. resultMap.put("discountAmt", discountAmt.doubleValue());
  338. resultMap.put("amt", amt.doubleValue());
  339. resultMap.put("oilLiters", oilLiters.doubleValue());
  340. resultMap.put("discountPrice", discountPrice.doubleValue());
  341. }else {
  342. //不存在
  343. resultMap.put("discountAmt", 0);
  344. resultMap.put("amt", receivableAmt.doubleValue());
  345. oilLiters = new BigDecimal(receivableAmt).divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP);
  346. resultMap.put("oilLiters", oilLiters.doubleValue());
  347. resultMap.put("discountPrice", oilPrice);
  348. }
  349. }
  350. break;
  351. case "2": //2.满减
  352. params.put("discountPlanType", "1");
  353. //营销方案
  354. List<Map> customerMarkertPlanList_1 = customerGradeServices.getCustomerMarkertPlanList(params);
  355. //有优惠规则
  356. if(customerMarkertPlanList_1 !=null && customerMarkertPlanList_1.size() >0){
  357. boolean flag = true;
  358. for (Map m : customerMarkertPlanList_1){
  359. //如果当前应收金额大于条件金额
  360. BigDecimal discountAmt_b = new BigDecimal(m.get("discountAmt").toString()); //条件金额
  361. if(receivableAmt_b.compareTo(discountAmt_b) ==1 || receivableAmt_b.compareTo(discountAmt_b) ==0){
  362. BigDecimal gasoilDiscountAmt_b = new BigDecimal(m.get("gasoilDiscountAmt").toString()); //每满多少优惠多少的金额
  363. discountAmt = receivableAmt_b.divide(discountAmt_b, 2, BigDecimal.ROUND_HALF_UP).multiply(gasoilDiscountAmt_b); //优惠金额
  364. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  365. amt = receivableAmt_b.subtract(discountAmt); //实收金额
  366. oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP); //加油升数
  367. discountPrice = amt.divide(oilLiters); //优惠价格
  368. resultMap.put("discountAmt", discountAmt.doubleValue());
  369. resultMap.put("amt", amt.doubleValue());
  370. resultMap.put("oilLiters", oilLiters.doubleValue());
  371. resultMap.put("discountPrice", discountPrice.doubleValue());
  372. flag = false;
  373. break;
  374. }
  375. }
  376. if(flag){
  377. resultMap.put("discountAmt", 0);
  378. resultMap.put("amt", receivableAmt.doubleValue());
  379. oilLiters = new BigDecimal(receivableAmt).divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);
  380. resultMap.put("oilLiters", oilLiters.doubleValue());
  381. resultMap.put("discountPrice", oilPrice);
  382. }
  383. }else {
  384. //没有优惠规则
  385. resultMap.put("discountAmt", 0);
  386. resultMap.put("amt", receivableAmt.doubleValue());
  387. oilLiters = new BigDecimal(receivableAmt).divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP);
  388. resultMap.put("oilLiters", oilLiters.doubleValue());
  389. resultMap.put("discountPrice", oilPrice);
  390. }
  391. break;
  392. case "3": //3.立减
  393. params.put("discountPlanType", "2");
  394. //营销方案
  395. List<Map> customerMarkertPlanList_2 = customerGradeServices.getCustomerMarkertPlanList(params);
  396. if(customerMarkertPlanList_2 !=null && customerMarkertPlanList_2.size() >0){
  397. boolean flag = true;
  398. for (Map m : customerMarkertPlanList_2){
  399. //如果当前应收金额大于条件金额
  400. BigDecimal discountAmt_b = new BigDecimal(m.get("discountAmt").toString()); //条件金额
  401. if(receivableAmt_b.compareTo(discountAmt_b) ==1 || receivableAmt_b.compareTo(discountAmt_b) ==0){
  402. BigDecimal gasoilDiscountAmt_b = new BigDecimal(m.get("gasoilDiscountAmt").toString()); //每满多少优惠多少的金额
  403. discountAmt = gasoilDiscountAmt_b; //优惠金额
  404. amt = receivableAmt_b.subtract(gasoilDiscountAmt_b); //实收金额
  405. oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP); //加油升数
  406. discountPrice = amt.divide(oilLiters); //优惠价格
  407. resultMap.put("discountAmt", discountAmt.doubleValue());
  408. resultMap.put("amt", amt.doubleValue());
  409. resultMap.put("oilLiters", oilLiters.doubleValue());
  410. resultMap.put("discountPrice", discountPrice.doubleValue());
  411. flag = false;
  412. break;
  413. }
  414. }
  415. if(flag){ //用户加油金额不符合优惠条件
  416. resultMap.put("discountAmt", 0);
  417. resultMap.put("amt", receivableAmt.doubleValue());
  418. oilLiters = new BigDecimal(receivableAmt).divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP);
  419. resultMap.put("oilLiters", oilLiters.doubleValue());
  420. resultMap.put("discountPrice", oilPrice);
  421. }
  422. }else {
  423. //没有优惠规则
  424. resultMap.put("discountAmt", 0);
  425. resultMap.put("amt", receivableAmt.doubleValue());
  426. oilLiters = new BigDecimal(receivableAmt).divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP);
  427. resultMap.put("oilLiters", oilLiters.doubleValue());
  428. resultMap.put("discountPrice", oilPrice);
  429. }
  430. break;
  431. case "4": //4.独立直降
  432. params.put("discountPlanType", "3");
  433. //营销方案
  434. List<Map> customerMarkertPlanList_3 = customerGradeServices.getCustomerMarkertPlanList(params);
  435. if(customerMarkertPlanList_3 !=null && customerMarkertPlanList_3.size() >0){
  436. boolean flag= true;
  437. for(Map m : customerMarkertPlanList_3){
  438. BigDecimal discountAmt_b = new BigDecimal(m.get("discountAmt").toString()); //条件金额
  439. BigDecimal gasoilDiscountAmt_b = new BigDecimal(m.get("gasoilDiscountAmt").toString());
  440. oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP); //加油升数
  441. if(m.get("discountTerm").toString().equals("1")){ //按升数优惠
  442. if(oilLiters.compareTo(discountAmt_b) ==1 || oilLiters.compareTo(discountAmt_b) ==0){
  443. //计算
  444. discountAmt = oilLiters.multiply(gasoilDiscountAmt_b);
  445. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  446. amt = receivableAmt_b.subtract(discountAmt);
  447. discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP); //优惠价格
  448. resultMap.put("discountAmt", discountAmt.doubleValue());
  449. resultMap.put("amt", amt.doubleValue());
  450. resultMap.put("oilLiters", oilLiters.doubleValue());
  451. resultMap.put("discountPrice", discountPrice.doubleValue());
  452. flag =false;
  453. break;
  454. }
  455. }else if(m.get("discountTerm").toString().equals("2")){ //按金额优惠
  456. if(receivableAmt_b.compareTo(discountAmt_b) ==1 || receivableAmt_b.compareTo(discountAmt_b) ==0){
  457. discountAmt = oilLiters.multiply(gasoilDiscountAmt_b);
  458. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  459. amt = receivableAmt_b.subtract(discountAmt);
  460. discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP); //优惠价格
  461. resultMap.put("discountAmt", discountAmt.doubleValue());
  462. resultMap.put("amt", amt.doubleValue());
  463. resultMap.put("oilLiters", oilLiters.doubleValue());
  464. resultMap.put("discountPrice", discountPrice.doubleValue());
  465. flag =false;
  466. break;
  467. }
  468. }
  469. }
  470. if(flag){
  471. resultMap.put("discountAmt", 0);
  472. resultMap.put("amt", receivableAmt.doubleValue());
  473. oilLiters = new BigDecimal(receivableAmt).divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP);
  474. resultMap.put("oilLiters", oilLiters.doubleValue());
  475. resultMap.put("discountPrice", oilPrice);
  476. }
  477. }else {
  478. //没有优惠规则
  479. resultMap.put("discountAmt", 0);
  480. resultMap.put("amt", receivableAmt.doubleValue());
  481. oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP);
  482. resultMap.put("oilLiters", oilLiters.doubleValue());
  483. resultMap.put("discountPrice", oilPrice);
  484. }
  485. break;
  486. }
  487. //resultData = ResultData.success(resultMap);
  488. }
  489. return resultMap;
  490. }
  491. /**
  492. * 根据订单号获取订单信息
  493. * produces="application/json;charset=UTF-8",consumes = "application/json",
  494. * @RequestBody String orderno
  495. * @param
  496. * @return
  497. */
  498. @RequestMapping(value = "/getPayOrderList", method = RequestMethod.GET)
  499. @ResponseBody
  500. public String getPayOrderList(@RequestParam String orderNo,String openId,String userType){
  501. Gson gson =new Gson();
  502. ResultData resultData =null;
  503. //根据token 和 usertype来判断用户是否存在
  504. boolean flag = appUserInfoService.selectAppUserInfo(openId,userType);
  505. if(flag){
  506. if(StringUtils.isNotBlank(orderNo)){
  507. PayOrderRequest payOrderRequest =new PayOrderRequest();
  508. payOrderRequest.setOrderNo(orderNo);
  509. List<PayOrder> payOrderList = payOrderService.getPayOrderList(payOrderRequest.getOrderNo());
  510. resultData=ResultData.success(payOrderList);
  511. }else {
  512. resultData=ResultData.error(CodeMsg.SEARCH_FAIL);
  513. }
  514. }else{
  515. resultData=ResultData.error(CodeMsg.USER_NOT_EXSIST);
  516. }
  517. return gson.toJson(resultData);
  518. }
  519. /*
  520. * 根据用户openId和用户类型userType查询用户订单
  521. * @param openId
  522. * @param userType
  523. * @return
  524. */
  525. @RequestMapping(value = "/getOrderListByOpenIdAndUserType", method = RequestMethod.GET)
  526. @ResponseBody
  527. public String getOrderListByOpenIdAndUserType(@RequestParam("openId") String openId, @RequestParam("userType") String userType){
  528. Gson gson =new Gson();
  529. ResultData resultData =null;
  530. if(StringUtils.isNotBlank(openId) && StringUtils.isNotBlank(userType)){
  531. AppUserInfo appUserInfo = new AppUserInfo();
  532. switch (userType){
  533. case "1":
  534. appUserInfo.setBlogOpenid(openId);
  535. break;
  536. case "2":
  537. appUserInfo.setMinaOpenid(openId);
  538. break;
  539. }
  540. List<PayOrder> payOrderList = payOrderService.getOrderListByOpenIdAndUserType(appUserInfo);
  541. resultData=ResultData.success(payOrderList);
  542. }else {
  543. resultData=ResultData.error(CodeMsg.SEARCH_FAIL);
  544. }
  545. return gson.toJson(resultData);
  546. }
  547. }