PayOrderController.java 97 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482
  1. package com.platform.yijia.controller;
  2. import com.google.gson.Gson;
  3. import com.google.gson.GsonBuilder;
  4. import com.platform.yijia.config.YiJiaRequest;
  5. import com.platform.yijia.dao.PayOrderMapper;
  6. import com.platform.yijia.param.request.PayOrderRequest;
  7. import com.platform.yijia.pojo.*;
  8. import com.platform.yijia.service.*;
  9. import com.platform.yijia.utils.CodeMsg;
  10. import com.platform.yijia.utils.ResultData;
  11. import org.apache.commons.lang3.StringUtils;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import org.springframework.stereotype.Controller;
  15. import org.springframework.transaction.annotation.Transactional;
  16. import org.springframework.web.bind.annotation.*;
  17. import javax.annotation.Resource;
  18. import java.math.BigDecimal;
  19. import java.sql.Timestamp;
  20. import java.text.SimpleDateFormat;
  21. import java.util.*;
  22. @Controller
  23. @YiJiaRequest()
  24. @CrossOrigin
  25. public class PayOrderController {
  26. private static Logger logger =(Logger) LoggerFactory.getLogger(PayOrderController.class);
  27. @Resource
  28. private PayOrderService payOrderService;
  29. @Resource
  30. private AppUserInfoService appUserInfoService;
  31. @Resource
  32. private StationService stationService;
  33. @Resource
  34. private CustomerGradeServices customerGradeServices;
  35. @Resource
  36. private PayOrderMapper payOrderMapper;
  37. @Resource
  38. private ElectronicMembershipCardService electronicMembershipCardService;
  39. @Resource
  40. private CustomerManagerService customerManagerService;
  41. @Resource
  42. private SysDictDataService sysDictDataService;
  43. @Resource
  44. private LabelService labelService;
  45. @Resource
  46. private StationOilGunService stationOilGunService;
  47. //小程序支付生成订单
  48. @RequestMapping(value = "/AddPayOrderInfoNew", consumes = "application/json", method = RequestMethod.POST)
  49. @ResponseBody
  50. @Transactional
  51. public String AddPayOrderInfoNew(@RequestBody PayOrderRequest payOrderRequest){
  52. logger.info("生成订单前端传来参数油站ID:"+payOrderRequest.getStationId()+"; 用户openId:"+ payOrderRequest.getOpenId() +"; 加油员ID:" +payOrderRequest.getPersonnelId()+ ";");
  53. Gson gson =new Gson();
  54. ResultData resultData =null;
  55. AppUserInfo appUserInfo =new AppUserInfo(); //查询客户信息传递参数
  56. PayOrder payOrder = new PayOrder(); //生成订单参数
  57. if(StringUtils.isNotBlank(payOrderRequest.getUserType()) && StringUtils.isNotBlank(payOrderRequest.getOpenId()) && StringUtils.isNotBlank(payOrderRequest.getOilName()) &&
  58. StringUtils.isNotBlank(payOrderRequest.getOilGun()) && payOrderRequest.getReceivableAmt() !=null ){
  59. appUserInfo.setUserType(payOrderRequest.getUserType());
  60. switch (payOrderRequest.getUserType()){
  61. case "1": //小程序
  62. appUserInfo.setMinaOpenid(payOrderRequest.getOpenId());
  63. break;
  64. case "2": //支付宝公众号
  65. appUserInfo.setALiId(payOrderRequest.getOpenId());
  66. break;
  67. }
  68. StationInfo stationInfo = new StationInfo();
  69. stationInfo.setStationId(payOrderRequest.getStationId());
  70. StationInfo stationInfos = stationService.selectStationInfo(stationInfo);
  71. Map<String ,Object> resultMap = new HashMap<>(); //返回结果集
  72. if(stationInfos !=null){
  73. payOrder.setStationName(stationInfos.getStationName());
  74. //获取油站图片和名称
  75. resultMap.put("stationPic", stationInfos.getStationPic());
  76. resultMap.put("stationName", stationInfos.getStationName());
  77. appUserInfo.setStationId(stationInfos.getGroupId());
  78. AppUserInfo appUserInfos = appUserInfoService.getAppUserInfo(appUserInfo);
  79. if(appUserInfos !=null) {
  80. //payOrderRequest存放参数原因:用于其他方法形参
  81. payOrderRequest.setCardEnabledFlagGroup(stationInfos.getCardEnabledFlagGroup()); //集团是否开启电子卡
  82. payOrderRequest.setCardRuleFlagGroup(stationInfos.getCardRuleFlagGroup()); //集团是否共享
  83. payOrderRequest.setIntegralFlagGroup(stationInfos.getIntegralFlagGroup()); //集团是否启用积分功能
  84. payOrderRequest.setIntegralRuleFlagGroup(stationInfos.getIntegralRuleFlagGroup()); //集团是否共享
  85. payOrderRequest.setCustomerPhone(appUserInfos.getMobilePhone()); //客户手机号; 注:此处存放手机号用于获取客户信息参数查询
  86. payOrderRequest.setUnionId(appUserInfos.getUnionId()); //客户UnionId;注:此处存放unionId用于获取客户电子卡参数查询
  87. payOrderRequest.setCustomerName(appUserInfos.getBlogNickName()); //昵称
  88. payOrderRequest.setGroupId(stationInfos.getGroupId()); //集团ID
  89. payOrderRequest.setLabelFlag(stationInfos.getLabelFlag()); //油站是否开启标签功能
  90. payOrderRequest.setIsLngFlagGroup(stationInfos.getIsLngFlagGroup()); //该集团是否为LNG第三方平台商:0,否;1,是;
  91. payOrder.setConsumer(appUserInfos.getBlogNickName()); //昵称
  92. payOrder.setConsumerId(appUserInfos.getUserId()); //用户id
  93. Random random = new Random();
  94. String result = "";
  95. for (int i = 0; i < 6; i++) {
  96. result += random.nextInt(10);
  97. }
  98. String ordNo = System.nanoTime() + result;
  99. payOrder.setOrderNo(ordNo); //订单号
  100. logger.info("生成的订单号:" + ordNo);
  101. payOrder.setDiscountCouponAmt(payOrderRequest.getDiscountCouponAmt()); //优惠劵金额
  102. payOrder.setDiscountCoupon(payOrderRequest.getDiscountCoupon()); //优惠券
  103. payOrder.setCarNo(payOrderRequest.getCarNo()); //车牌号、
  104. payOrder.setCustomerGrade(payOrderRequest.getCustomerGrade()); //客户电话
  105. payOrder.setMemberNo(payOrderRequest.getMemberNo()); //会员卡号
  106. payOrder.setMemberAmt(payOrderRequest.getMemberAmt()); //会员支付金额
  107. payOrder.setScore(payOrderRequest.getScore()); //积分
  108. payOrder.setStationId(payOrderRequest.getStationId()); //油站id
  109. payOrder.setStatus("0"); //创建订单 未支付状态 0
  110. payOrder.setCreatedDate(new Timestamp(new Date().getTime())); //创建时间
  111. payOrder.setOrderType(payOrderRequest.getOrderType()); //订单类型
  112. payOrder.setOilGun(payOrderRequest.getOilGun()); //油枪号
  113. payOrder.setReceivableAmt(Double.valueOf(payOrderRequest.getReceivableAmt())); //订单应收金额
  114. String oilName = payOrderRequest.getOilName();
  115. //获取该油品所属哪一类
  116. Oil oil = new Oil();
  117. oil.setOilName(oilName);
  118. oil.setDictType("oil_name");
  119. Oil oilInfo = sysDictDataService.selectOilType(oil);
  120. payOrder.setOilType(oilInfo.getOilsType()); //油品类型
  121. String oilsType = oilInfo.getOilsType(); //获取订单类型
  122. logger.info("订单油品类型:" + oilsType);
  123. payOrderRequest.setCardOilsType(oilInfo.getOilsType()); //电子卡类型;注:用于获取客户电子卡参数查询
  124. payOrder.setOilName(oilName); //油品名称
  125. if(oilsType.equals("3")){ //订单类型是油品时计算
  126. payOrder.setOrderType("2");
  127. payOrder.setAmt(Double.valueOf(payOrderRequest.getReceivableAmt())); //非油品金额
  128. payOrder.setDiscountAmt(Double.valueOf(0)); //优惠金额
  129. payOrder.setOilPirce(payOrderRequest.getReceivableAmt()); //非油品价格
  130. payOrder.setOrderLiters("0");
  131. resultMap.put("oilsCardFlag", "0");
  132. resultMap.put("discountAmt", "0"); //优惠价格
  133. resultMap.put("amt", payOrderRequest.getReceivableAmt()); //实收价格
  134. resultMap.put("receivableAmt", payOrderRequest.getReceivableAmt()); //应收价格
  135. resultMap.put("oilLiters", "0");
  136. resultMap.put("discountPrice", "0");
  137. resultMap.put("ordNo", ordNo);
  138. logger.info("返回前端的结果:" +resultMap.toString());
  139. //payOrderMapper.insertSelective(payOrder);
  140. }else {
  141. PayOrderResultInfo payOrderResultInfo = this.calculateAmt(payOrderRequest); //计算订单金额 价格 加油升数 等等
  142. payOrder.setOilPirce(payOrderResultInfo.getOilPrice());
  143. payOrder.setOrderLiters(payOrderResultInfo.getOilLiters());
  144. payOrder.setDiscountAmt(Double.valueOf(payOrderResultInfo.getDiscountAmt()));
  145. payOrder.setAmt(Double.valueOf(payOrderResultInfo.getAmt()));
  146. payOrder.setOrderType("1");
  147. resultMap.put("discountPrice", payOrderResultInfo.getDiscountPrice());
  148. if(payOrderResultInfo.getCardEnabledFlag() !=null && payOrderResultInfo.getCardEnabledFlag().equals("1")){
  149. payOrder.setDzkAmt(Double.valueOf(payOrderResultInfo.getDzkAmt()));
  150. //如果电子卡支付的金额与应收金额相同,则优惠价格有原有价格相同
  151. // if(new BigDecimal(payOrderRequest.getReceivableAmt()).compareTo(new BigDecimal(payOrderResultInfo.getDzkAmt())) ==0){
  152. // resultMap.put("discountPrice", payOrderResultInfo.getOilPrice());
  153. // }
  154. //payOrder.setDiscountAmt(Double.valueOf(payOrderResultInfo.getDzkDiscountAmt()));
  155. }
  156. resultMap.put("cardEnabledFlag", payOrderResultInfo.getCardEnabledFlag());
  157. resultMap.put("oilsCardFlag", payOrderResultInfo.getOilsCardFlag());
  158. resultMap.put("discountAmt", payOrderResultInfo.getDiscountAmt()); //优惠金额
  159. resultMap.put("amt", payOrderResultInfo.getAmt()); //实收价格
  160. if(payOrderRequest.getIsLngFlagGroup() !=null && payOrderRequest.getIsLngFlagGroup().equals("1")){
  161. payOrder.setSellAmt(Double.valueOf(payOrderResultInfo.getSellAmt()));
  162. payOrder.setSellDiscountAmt(Double.valueOf(payOrderResultInfo.getSellDiscountAmt()));
  163. payOrder.setSellOilPrice(Double.valueOf(payOrderResultInfo.getSellPrice()));
  164. payOrder.setDriverDiscountAmt(Double.valueOf(payOrderResultInfo.getDriverDiscountAmt()));
  165. resultMap.put("driverDiscountAmt", payOrderResultInfo.getDriverDiscountAmt());
  166. resultMap.put("sellDiscountAmt", payOrderResultInfo.getSellDiscountAmt());
  167. }
  168. payOrder.setDriverOilPrice(Double.valueOf(payOrderResultInfo.getDiscountPrice()));
  169. resultMap.put("receivableAmt", payOrderResultInfo.getReceivableAmt()); //应收价格
  170. resultMap.put("oilLiters", payOrderResultInfo.getOilLiters());
  171. resultMap.put("amt_dzk", payOrderResultInfo.getDzkAmt());
  172. resultMap.put("discountAmt_dzk", payOrderResultInfo.getDzkDiscountAmt()); //电子卡优惠金额
  173. resultMap.put("balance", payOrderResultInfo.getBalance()); //电子卡余额
  174. resultMap.put("cardOilsType", payOrderResultInfo.getCardOilsType()); //电子卡类型1.汽油; 2.柴油
  175. resultMap.put("ordNo", ordNo);
  176. logger.info("返回前端的结果:" +resultMap.toString());
  177. //payOrderMapper.insertSelective(payOrder);
  178. }
  179. //根据油站和油枪获取加油员
  180. if (payOrderRequest.getPersonnelId() != null && payOrderRequest.getPersonnelId() != "" && !payOrderRequest.getPersonnelId().equals("undefined")) {
  181. //表示为一人一码:一个加油员一个码
  182. Map<String, Object> params = new HashMap<>();
  183. params.put("personnelId", payOrderRequest.getPersonnelId());
  184. params.put("stationId", payOrderRequest.getStationId());
  185. List<Map<String, Object>> list = stationOilGunService.selectOilGunByPersonalId(params);
  186. if (list != null && list.size() > 0) {
  187. if(list.get(0).containsKey("personnelName") && list.get(0).get("personnelName") !=null && list.get(0).get("personnelName").toString() !=""){
  188. payOrder.setOilPersonnel(list.get(0).get("personnelName").toString());
  189. payOrder.setOilPersonnelId(list.get(0).get("personnelId").toString());
  190. payOrderMapper.insertSelective(payOrder);
  191. resultData = ResultData.success(resultMap);
  192. }else {
  193. resultData = ResultData.error(CodeMsg.NO_PERSONNAL);
  194. }
  195. } else {
  196. resultData = ResultData.error(CodeMsg.NO_PERSONNAL);
  197. }
  198. } else {
  199. //resultData = ResultData.error(CodeMsg.NO_PERSONNAL);
  200. //根据油站和油枪获取加油员
  201. HashMap<String, Object> params = new HashMap<>();
  202. params.put("oliGunNo", payOrderRequest.getOilGun());
  203. params.put("stationId", payOrderRequest.getStationId());
  204. List<Map> mapResultList = payOrderMapper.selectPersonelName(params); //使用list原因:一个枪号对应多个加油员场景
  205. logger.info("加油员信息:"+ mapResultList.toString());
  206. if(mapResultList != null && mapResultList.size() > 0){
  207. String oilPersonnel = "";
  208. String oilPersonnelId ="";
  209. for (Map per : mapResultList){
  210. if(per.containsKey("personnelName") && per.get("personnelName").toString() !=null && per.get("personnelName").toString() !=""){
  211. oilPersonnel += per.get("personnelName").toString() +",";
  212. oilPersonnelId += per.get("personnelId").toString() +",";
  213. }
  214. }
  215. if(oilPersonnel !=""){
  216. payOrder.setOilPersonnel(oilPersonnel.substring(0, oilPersonnel.length()-1)); //加油员
  217. payOrder.setOilPersonnelId(oilPersonnelId.substring(0, oilPersonnelId.length()-1));
  218. }
  219. // payOrder.setOilPersonnel(mapResultList.get(0).get("").toString()); //加油员
  220. // payOrder.setOilPersonnelId(oilPersonnelId.substring(0, oilPersonnelId.length()-1));
  221. payOrderMapper.insertSelective(payOrder);
  222. resultData = ResultData.success(resultMap);
  223. }else {
  224. resultData = ResultData.error(CodeMsg.NO_PERSONNAL);
  225. }
  226. }
  227. }else {
  228. //登录人验证失败
  229. resultData=ResultData.error(CodeMsg.USER_NOT_EXSIST);
  230. }
  231. }else {
  232. resultData = ResultData.error(CodeMsg.REQUEST_FAIL);
  233. }
  234. }else {
  235. resultData = ResultData.error(CodeMsg.REQUEST_FAIL);
  236. }
  237. return gson.toJson(resultData);
  238. }
  239. //根据营销方案计算订单金额
  240. public PayOrderResultInfo calculateAmt(PayOrderRequest payOrderRequest){
  241. PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
  242. Integer stationId = payOrderRequest.getStationId(); //油站ID
  243. BigDecimal receivableAmt = new BigDecimal(payOrderRequest.getReceivableAmt()); //应收金额 用户输入的金额
  244. String oilName = payOrderRequest.getOilName(); //油品名称
  245. String openId = payOrderRequest.getOpenId(); //用户的openId
  246. String userPhone = payOrderRequest.getCustomerPhone(); //用户手机号
  247. String customerName = payOrderRequest.getCustomerName(); //用户手机号
  248. Map<String, Object> map = new HashMap<>();
  249. map.put("oilName", oilName);
  250. map.put("stationId", stationId);
  251. //获取油站油品价格 优惠方案 是否开启电子卡
  252. Map<String, Object> result = stationService.selectStationOilPriceAndDiscountSetting(map);
  253. String oilPrice = result.get("oilPrice").toString(); //油站油品价格
  254. String discountSetting = result.get("discountSetting").toString(); //优惠方案
  255. String cardEnabledFlag = result.get("cardEnabledFlag").toString(); //是否开启电子卡
  256. String cardRuleFlag = result.get("cardRuleFlag").toString(); //是否共享电子卡储值规则
  257. String groupId = payOrderRequest.getGroupId().toString(); //集团ID
  258. Map<String ,Object> params = new HashMap<String, Object>();
  259. params.put("stationId", stationId);
  260. params.put("oilName", oilName);
  261. params.put("receivableAmt", receivableAmt);
  262. params.put("oilPrice", oilPrice);
  263. params.put("mobilePhone", payOrderRequest.getCustomerPhone());
  264. params.put("minaOpenid", openId);
  265. params.put("cardEnabledFlag", cardEnabledFlag);
  266. params.put("cardRuleFlag", cardRuleFlag);
  267. params.put("groupId", groupId);
  268. params.put("unionId", payOrderRequest.getUnionId());
  269. params.put("cardOilsType", payOrderRequest.getCardOilsType());
  270. params.put("customerName", customerName);
  271. params.put("userPhone", userPhone);
  272. params.put("integralRuleFlagGroup", payOrderRequest.getIntegralRuleFlagGroup()); // integralRuleFlagGroup; //集团积分规则是否共享
  273. params.put("integralFlagGroup", payOrderRequest.getIntegralFlagGroup()); // integralFlagGroup; //集团是否开启积分功能
  274. params.put("cardRuleFlagGroup", payOrderRequest.getCardRuleFlagGroup()); // cardRuleFlagGroup; //集团是否共享电子卡充值规则
  275. params.put("cardEnabledFlagGroup", payOrderRequest.getCardEnabledFlagGroup()); // cardEnabledFlagGroup; //集团是否开启电子卡
  276. if(payOrderRequest.getIsLngFlagGroup() !=null && payOrderRequest.getIsLngFlagGroup().equals("1")){
  277. // isLngFlagGroup 表示该集团是否为LNG平台加气:0,否;1,是;
  278. // settlementType:结算价类型(1.直降,2.折扣); settlementPrice:结算价; driverPrice:司机价;
  279. if(result.containsKey("settlementType") && result.get("settlementType") !=null && result.get("settlementType").toString() !=""){
  280. params.put("settlementType", result.get("settlementType").toString());
  281. }
  282. if(result.containsKey("settlementPrice") && result.get("settlementPrice") !=null && result.get("settlementPrice").toString() !=""){
  283. params.put("settlementPrice", result.get("settlementPrice").toString());
  284. }
  285. //driverPriceType 司机价类型(1.直降,2.折扣);
  286. if(result.containsKey("driverPriceType") && result.get("driverPriceType") !=null && result.get("driverPriceType").toString() !=""){
  287. params.put("driverPriceType", result.get("driverPriceType").toString());
  288. }
  289. if(result.containsKey("driverPrice") && result.get("driverPrice") !=null && result.get("driverPrice").toString() !=""){
  290. params.put("driverPrice", result.get("driverPrice").toString());
  291. }
  292. payOrderResultInfo = this.calculateLngGroupStaDiscount(params);
  293. }else {
  294. CustomerLabel customerLabel = new CustomerLabel();
  295. customerLabel.setPhone(payOrderRequest.getCustomerPhone());
  296. customerLabel.setStationId(payOrderRequest.getStationId());
  297. //扫码进标签优惠:一码一签
  298. if(payOrderRequest.getLabelId() !=null){
  299. //如果前端传来labelId,则表示一码一签;
  300. params.put("labelId", payOrderRequest.getLabelId());
  301. payOrderResultInfo = this.calculateLabelDiscount(params);
  302. //是否强制将该扫码用户拉入此标签:0、否;1、是;
  303. if(payOrderResultInfo.getIsAddLabel() !=null && payOrderResultInfo.getIsAddLabel().equals("1")){
  304. CustomerLabel customerLabel_info = labelService.getCustomerLabel(customerLabel);
  305. if(customerLabel_info !=null){
  306. customerLabel.setUpdateTime(new Date());
  307. // customerLabel.setCreateBy(payOrderResultInfo.getLabelCreateBy());
  308. // if(payOrderResultInfo.getLabelUpdateBy() !=null){
  309. // customerLabel.setUpdateBy(payOrderResultInfo.getLabelUpdateBy());
  310. // }
  311. customerLabel.setLabelId(payOrderRequest.getLabelId());
  312. labelService.updateCustomerLabel(customerLabel);
  313. }else {
  314. customerLabel.setCreateTime(new Date());
  315. customerLabel.setDelFlag("0");
  316. //customerLabel.setCreateBy(payOrderResultInfo.getLabelCreateBy());
  317. customerLabel.setLabelId(payOrderRequest.getLabelId());
  318. labelService.insertCustomerLabel(customerLabel);
  319. }
  320. }
  321. }else {
  322. //按照正常优惠计算
  323. CustomerLabel customerLabelInfo = labelService.getCustomerLabel(customerLabel); //获取该用户是否在标签组内
  324. if(payOrderRequest.getLabelFlag() !=null && payOrderRequest.getLabelFlag().equals("1") && customerLabelInfo !=null){
  325. //表示此用户为标签用户,计算标签用户优惠
  326. params.put("labelId", customerLabelInfo.getLabelId());
  327. payOrderResultInfo = this.calculateLabelDiscount(params);
  328. }else {
  329. //不为标签用户时
  330. switch (discountSetting){
  331. case "0": //不执营销方案时 计算等级优惠
  332. payOrderResultInfo = this.calculateGradeDiscount(params);
  333. break;
  334. case "1": //满减方案
  335. payOrderResultInfo = this.calculateManJianDiscount(params);
  336. break;
  337. case "2": //立减方案
  338. payOrderResultInfo = this.calculateLiJianDiscount(params);
  339. break;
  340. case "3": //独立直降
  341. payOrderResultInfo = this.calculateZhiJiangDiscount(params);
  342. break;
  343. case "4": //计算阶梯直降
  344. payOrderResultInfo = this.calculateJieTiZhiJiangDiscount(params);
  345. break;
  346. }
  347. }
  348. }
  349. }
  350. return payOrderResultInfo;
  351. }
  352. //计算集团下站点LNG平台加气
  353. public PayOrderResultInfo calculateLngGroupStaDiscount(Map<String ,Object> params){
  354. PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
  355. BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString()); //油品价格
  356. BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString()); //应收金额
  357. BigDecimal oilLiters = new BigDecimal("0.00"); //加油升数
  358. BigDecimal discountAmt = new BigDecimal(0); //油站销售价后优惠金额
  359. BigDecimal sellDiscountAmt = new BigDecimal(0); //油站销售价后优惠金额
  360. BigDecimal dzkDiscountAmt = new BigDecimal(0); //电子卡优惠金额
  361. BigDecimal amt = receivableAmt; //司机价后支付金额
  362. BigDecimal sellAmt = new BigDecimal(0); //油站结算价支付金额
  363. BigDecimal discountPrice = oilPrice; //司机销售价
  364. BigDecimal sellPrice = discountPrice; //油站销售价
  365. BigDecimal driverDiscountAmt = new BigDecimal("0"); //司机价优惠金额
  366. //加油升数
  367. oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_HALF_UP);
  368. // if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
  369. // oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_UP);
  370. // }
  371. // settlementType:结算价类型(1.直降,2.折扣); settlementPrice:结算价; driverPrice:司机价;
  372. if(params.containsKey("settlementType") && params.get("settlementType") !=null && params.get("settlementType").toString() !=""){
  373. String settlementType = params.get("settlementType").toString();
  374. switch (settlementType){
  375. case "1": //直降
  376. //优惠价(销售价)
  377. if(params.containsKey("settlementPrice") && params.get("settlementPrice").toString() !=null && params.get("settlementPrice").toString() !=""){
  378. sellPrice = oilPrice.subtract(new BigDecimal(params.get("settlementPrice").toString()));
  379. sellAmt = sellPrice.multiply(oilLiters); //优惠价实付金额
  380. sellDiscountAmt = receivableAmt.subtract(sellAmt);
  381. }
  382. break;
  383. case "2": //折扣
  384. //优惠价(销售价)
  385. if(params.containsKey("settlementPrice") && params.get("settlementPrice").toString() !=null && params.get("settlementPrice").toString() !=""){
  386. sellPrice = oilPrice.multiply(new BigDecimal(params.get("settlementPrice").toString())).divide(new BigDecimal("100"));
  387. sellAmt =sellPrice.multiply(oilLiters);
  388. sellDiscountAmt = receivableAmt.subtract(sellAmt);
  389. //sellDiscountAmt = sellDiscountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  390. }
  391. break;
  392. }
  393. }
  394. //driverPriceType: 司机价类型(1.直降,2.折扣);
  395. if(params.containsKey("driverPriceType") && params.get("driverPriceType") !=null && params.get("driverPriceType").toString() !=""){
  396. String driverPriceType = params.get("driverPriceType").toString();
  397. switch (driverPriceType){
  398. case "1":
  399. if(params.containsKey("driverPrice") && params.get("driverPrice").toString() !=null && params.get("driverPrice").toString() !=""){
  400. //司机价
  401. discountPrice = sellPrice.subtract(new BigDecimal(params.get("driverPrice").toString()));
  402. amt = discountPrice.multiply(oilLiters);
  403. //driverDiscountAmt = sellDiscountAmt.multiply(new BigDecimal("1").subtract(new BigDecimal(params.get("driverPrice").toString()).divide(new BigDecimal("100"))));
  404. discountAmt = receivableAmt.subtract(amt);
  405. driverDiscountAmt = discountAmt.subtract(sellDiscountAmt);
  406. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  407. discountPrice = discountPrice.setScale(2, BigDecimal.ROUND_HALF_UP);
  408. }
  409. break;
  410. case "2": //折扣
  411. if(params.containsKey("driverPrice") && params.get("driverPrice").toString() !=null && params.get("driverPrice").toString() !=""){
  412. //司机价
  413. discountPrice = sellPrice.multiply(new BigDecimal(params.get("driverPrice").toString())).divide(new BigDecimal("100"));
  414. amt = sellAmt.multiply(new BigDecimal(params.get("driverPrice").toString())).divide(new BigDecimal("100"));
  415. //driverDiscountAmt = sellDiscountAmt.multiply(new BigDecimal("1").subtract(new BigDecimal(params.get("driverPrice").toString()).divide(new BigDecimal("100"))));
  416. discountAmt = receivableAmt.subtract(amt);
  417. driverDiscountAmt = discountAmt.subtract(sellDiscountAmt);
  418. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  419. discountPrice = discountPrice.setScale(2, BigDecimal.ROUND_HALF_UP);
  420. }
  421. break;
  422. }
  423. }
  424. sellAmt =sellAmt.signum() == -1 ? new BigDecimal("0.01"): sellAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  425. amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt.setScale(2, BigDecimal.ROUND_HALF_UP);
  426. if(oilLiters.toString().equals("0.00")){
  427. amt = new BigDecimal("0.01");
  428. sellAmt = new BigDecimal("0.01");
  429. driverDiscountAmt = new BigDecimal("0.00");
  430. discountAmt = new BigDecimal("0.00");
  431. sellDiscountAmt = new BigDecimal("0.00");
  432. }
  433. payOrderResultInfo.setReceivableAmt(receivableAmt.toString()); //应收金额
  434. //oilLiters = oilLiters.setScale(2,BigDecimal.ROUND_HALF_UP);
  435. payOrderResultInfo.setOilLiters(oilLiters.toString()); //加油升数
  436. payOrderResultInfo.setOilPrice(oilPrice.toString()); //油机价
  437. payOrderResultInfo.setAmt(amt.toString()); //司机价后时候金额
  438. payOrderResultInfo.setDiscountPrice(discountPrice.toString()); //司机价
  439. payOrderResultInfo.setDiscountAmt(discountAmt.toString()); //司机价后优惠总金额
  440. driverDiscountAmt = driverDiscountAmt.setScale(2,BigDecimal.ROUND_HALF_UP);
  441. payOrderResultInfo.setDriverDiscountAmt(driverDiscountAmt.toString()); //司机价后优惠金额
  442. payOrderResultInfo.setSellAmt(sellAmt.toString()); //销售价后支付金额
  443. sellPrice = sellPrice.setScale(2, BigDecimal.ROUND_HALF_UP); //销售价
  444. payOrderResultInfo.setSellPrice(sellPrice.toString()); //销售价
  445. sellDiscountAmt = sellDiscountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  446. payOrderResultInfo.setSellDiscountAmt(sellDiscountAmt.toString()); //销售价后优惠金额
  447. //LNG加气平台没有电子卡功能:此下参数无用用作填充参数值 0:代表否;4:代表LNG油品
  448. payOrderResultInfo.setDzkAmt(amt.toString()); //电子卡支付金额
  449. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmt.toString()); //电子卡优惠金额
  450. payOrderResultInfo.setBalance("0");
  451. payOrderResultInfo.setCardOilsType("4");
  452. payOrderResultInfo.setOilsCardFlag("0");
  453. payOrderResultInfo.setCardEnabledFlag("0");
  454. return payOrderResultInfo;
  455. }
  456. //计算标签用户优惠
  457. public PayOrderResultInfo calculateLabelDiscount(Map<String ,Object> params){
  458. BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString()); //油品价格
  459. BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString()); //应收金额
  460. BigDecimal oilLiters = new BigDecimal("0.00"); //加油升数
  461. BigDecimal discountAmt = new BigDecimal(0); //标签方案优惠金额
  462. BigDecimal dzkDiscountAmt = new BigDecimal(0); //电子卡优惠金额
  463. BigDecimal amt = receivableAmt;
  464. BigDecimal discountPrice = oilPrice;
  465. //加油升数
  466. oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_HALF_UP);
  467. if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
  468. oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_UP);
  469. }
  470. PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
  471. //获取该油站的标签规则
  472. LabelRule labelRule = new LabelRule();
  473. labelRule.setStationId(Integer.valueOf(params.get("stationId").toString())); //油站ID
  474. //labelRule.setOilName(params.get("oilName").toString()); //oilName
  475. labelRule.setDelFlag("0");
  476. labelRule.setLabelId(Integer.valueOf(params.get("labelId").toString()));//
  477. List<LabelRule> labelRuleList = labelService.getLabelRuleList(labelRule);
  478. if(labelRuleList !=null && labelRuleList.size()> 0){
  479. payOrderResultInfo.setIsAddLabel(labelRuleList.get(0).getIsAddLabel()); //'是否强制将该扫码用户拉入此标签:0、否;1、是
  480. payOrderResultInfo.setLabelCreateBy(labelRuleList.get(0).getCreateBy()); //标签创建人
  481. payOrderResultInfo.setLabelUpdateBy(labelRuleList.get(0).getUpdateBy()); //标签更新人
  482. payOrderResultInfo.setLabelCreateTime(labelRuleList.get(0).getCreateTime()); //标签创建时间
  483. //获取该油品的优惠明细
  484. labelRule.setOilName(params.get("oilName").toString());
  485. labelRule.setDelFlagDetail("0");
  486. List<LabelRule> labelRuleList_oilName = labelService.getLabelRuleList(labelRule);
  487. if(labelRuleList_oilName !=null && labelRuleList_oilName.size() >0){
  488. List<LabelRuleDetail> labelRuleDetailList = labelRuleList_oilName.get(0).getLabelRuleDetailList();
  489. if(labelRuleDetailList !=null && labelRuleDetailList.size() ==1){
  490. BigDecimal discountAmt_B = new BigDecimal(labelRuleDetailList.get(0).getDiscountAmt()); //满足享受优惠条件(满多少升、满多少元)
  491. String discountTerm = labelRuleDetailList.get(0).getDiscountTerm();
  492. switch (discountTerm){
  493. case "1": //按加油升数
  494. if(oilLiters.compareTo(discountAmt_B) ==1 || oilLiters.compareTo(discountAmt_B) ==0 ){
  495. discountPrice = oilPrice.subtract(new BigDecimal(labelRuleDetailList.get(0).getDiscountLitersAmt()));
  496. amt = discountPrice.multiply(oilLiters);
  497. discountAmt = receivableAmt.subtract(amt);
  498. //discountAmt = oilLiters.multiply(new BigDecimal(labelRuleDetailList.get(0).getDiscountLitersAmt()));
  499. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  500. }
  501. break;
  502. case "2": //按加油金额
  503. if(receivableAmt.compareTo(discountAmt_B) ==1 || receivableAmt.compareTo(discountAmt_B) ==0 ){
  504. discountPrice = oilPrice.subtract(new BigDecimal(labelRuleDetailList.get(0).getDiscountLitersAmt()));
  505. amt = discountPrice.multiply(oilLiters);
  506. discountAmt = receivableAmt.subtract(amt);
  507. //discountAmt = oilLiters.multiply(new BigDecimal(labelRuleDetailList.get(0).getDiscountLitersAmt()));
  508. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  509. }
  510. break;
  511. }
  512. dzkDiscountAmt = discountAmt; //赋值电子卡优惠金额
  513. }
  514. }
  515. }
  516. //amt = receivableAmt.subtract(discountAmt); //应收金额
  517. amt = amt.setScale(2, BigDecimal.ROUND_HALF_UP);
  518. if(amt.toString().equals("0.00")){
  519. amt = new BigDecimal("0.01");
  520. }
  521. amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
  522. //discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP); //优惠价格
  523. payOrderResultInfo.setAmt(amt.toString());
  524. payOrderResultInfo.setDiscountPrice(discountPrice.toString());
  525. payOrderResultInfo.setDiscountAmt(discountAmt.toString());
  526. payOrderResultInfo.setDiscountPrice(discountPrice.toString());
  527. payOrderResultInfo.setOilLiters(oilLiters.toString());
  528. payOrderResultInfo.setReceivableAmt(receivableAmt.toString());
  529. payOrderResultInfo.setOilPrice(oilPrice.toString());
  530. payOrderResultInfo.setDzkAmt(amt.toString());
  531. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmt.toString());
  532. payOrderResultInfo.setOilsCardFlag("0");
  533. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  534. //表示开启共享
  535. if(params.get("cardEnabledFlagGroup").toString().equals("1")){ //表示开启电子卡功能
  536. payOrderResultInfo.setCardEnabledFlag("1");
  537. }else {
  538. payOrderResultInfo.setCardEnabledFlag("0");
  539. }
  540. }else {
  541. //不共享,则查看油站电子卡是否开启
  542. if(params.get("cardEnabledFlag").toString().equals("1")){
  543. payOrderResultInfo.setCardEnabledFlag("1");
  544. }else {
  545. payOrderResultInfo.setCardEnabledFlag("0");
  546. }
  547. }
  548. logger.info("油站是否开启电子会员卡功能: " +params.get("cardEnabledFlag").toString());
  549. if(payOrderResultInfo.getCardEnabledFlag().equals("1")){
  550. CustomerCardSetting customerCardSetting = new CustomerCardSetting();
  551. customerCardSetting.setStationId(Integer.valueOf(params.get("stationId").toString()));
  552. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  553. customerCardSetting.setStationId(Integer.valueOf(params.get("groupId").toString()));
  554. }
  555. List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
  556. if(cardRechargeSettingList !=null && cardRechargeSettingList.size() >0){
  557. String isLabel = cardRechargeSettingList.get(0).getIsLabel(); //标签用户支付时是否享受标签优惠
  558. if(isLabel.equals("1")){
  559. //电子卡支付金额 = 应收金额 - 标签优惠金额
  560. BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt);
  561. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt; //如果为负数,则默认设置0.01元
  562. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  563. BigDecimal dzkDiscountAmtSum = dzkDiscountAmt; //电子卡总优惠金额
  564. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmtSum.toString());
  565. }else {
  566. payOrderResultInfo.setDzkAmt(receivableAmt.toString());
  567. payOrderResultInfo.setDzkDiscountAmt("0");
  568. }
  569. }
  570. CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
  571. customerElectronicCard.setStationId(Integer.valueOf(params.get("stationId").toString()));
  572. customerElectronicCard.setCardOilsType(params.get("cardOilsType").toString());
  573. customerElectronicCard.setUnionId(params.get("unionId").toString());
  574. customerElectronicCard.setMobilePhone(params.get("userPhone").toString());
  575. customerElectronicCard.setCustomerName(params.get("customerName").toString());
  576. //查询客户余额和卡的类型
  577. Map<String, String> map = this.selectCardBalance(customerElectronicCard, params);
  578. payOrderResultInfo.setBalance(map.get("balance"));
  579. payOrderResultInfo.setOilsCardFlag(map.get("oilsCardFlag"));
  580. payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
  581. }
  582. return payOrderResultInfo;
  583. }
  584. //计算阶梯直降
  585. public PayOrderResultInfo calculateJieTiZhiJiangDiscount(Map<String ,Object> params){
  586. PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo(); //计算结果存放值
  587. BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString()); //油品价格
  588. BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString()); //应收金额
  589. BigDecimal oilLiters = new BigDecimal("0.00"); //加油升数
  590. BigDecimal discountAmt = new BigDecimal(0); //营销方案优惠金额
  591. BigDecimal amt = receivableAmt;
  592. BigDecimal discountPrice = oilPrice;
  593. BigDecimal gradeDiscountAmt = new BigDecimal(0); //等级优惠金额
  594. BigDecimal gradeDiscountPriceAmt = new BigDecimal(0); //等级优惠价格
  595. BigDecimal dzkGradeDiscountAmt = new BigDecimal(0); //计算电子卡金额时所需等级优惠金额值
  596. BigDecimal dzkDiscountAmt = new BigDecimal(0); //计算电子卡金额时所需营销优惠金额值
  597. //加油升数
  598. oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_HALF_UP);
  599. if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
  600. oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_UP);
  601. }
  602. //计算等级优惠
  603. PayOrderResultInfo payOrderResultInfoGrade = this.calculateGradeDiscount(params);
  604. gradeDiscountAmt = new BigDecimal(payOrderResultInfoGrade.getDiscountAmt());
  605. gradeDiscountPriceAmt = new BigDecimal(payOrderResultInfoGrade.getGradeDiscountPriceAmt());
  606. dzkGradeDiscountAmt = gradeDiscountAmt; //同时给电子卡赋值等级优惠金额
  607. params.put("discountPlanType", "4");
  608. List<Map> customerMarkertPlanList = customerGradeServices.getCustomerMarkertPlanList(params);
  609. if(customerMarkertPlanList !=null && customerMarkertPlanList.size() >0){
  610. for(Map m : customerMarkertPlanList){
  611. BigDecimal discountAmt_b = new BigDecimal(m.get("discountAmt").toString()); //条件金额
  612. BigDecimal gasoilDiscountAmt_b = new BigDecimal(m.get("gasoilDiscountAmt").toString());
  613. String discountTerm = m.get("discountTerm").toString();
  614. if(discountTerm.equals("1")){
  615. if(oilLiters.compareTo(discountAmt_b) ==1 || oilLiters.compareTo(discountAmt_b) ==0){
  616. discountPrice = oilPrice.subtract(gasoilDiscountAmt_b);
  617. amt = discountPrice.multiply(oilLiters);
  618. discountAmt = receivableAmt.subtract(amt);
  619. //discountAmt = oilLiters.multiply(gasoilDiscountAmt_b);
  620. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  621. dzkDiscountAmt = discountAmt; //赋值电子卡优惠金额
  622. String vipDiscountyPlus = m.get("vipDiscountyPlus").toString();
  623. //该营销方案是否叠加等级优惠
  624. if(vipDiscountyPlus.equals("1")){
  625. //如果叠加等级优惠
  626. discountPrice = discountPrice.subtract(gradeDiscountPriceAmt);
  627. discountAmt = discountAmt.add(gradeDiscountAmt);
  628. amt = receivableAmt.subtract(discountAmt);
  629. }
  630. break;
  631. }
  632. }else if(discountTerm.equals("2")){
  633. if(receivableAmt.compareTo(discountAmt_b) ==1 || receivableAmt.compareTo(discountAmt_b) ==0){
  634. discountPrice = oilPrice.subtract(gasoilDiscountAmt_b);
  635. amt = discountPrice.multiply(oilLiters);
  636. discountAmt = receivableAmt.subtract(amt);
  637. //discountAmt = oilLiters.multiply(gasoilDiscountAmt_b);
  638. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  639. dzkDiscountAmt = discountAmt; //赋值电子卡优惠金额
  640. String vipDiscountyPlus = m.get("vipDiscountyPlus").toString();
  641. //该营销方案是否叠加等级优惠
  642. if(vipDiscountyPlus.equals("1")){
  643. //如果叠加等级优惠
  644. discountPrice = discountPrice.subtract(gradeDiscountPriceAmt);
  645. discountAmt = discountAmt.add(gradeDiscountAmt);
  646. amt = receivableAmt.subtract(discountAmt);
  647. }
  648. break;
  649. }
  650. }
  651. }
  652. }
  653. //amt = receivableAmt.subtract(discountAmt); //应收金额
  654. amt = amt.setScale(2, BigDecimal.ROUND_HALF_UP);
  655. if(amt.toString().equals("0.00")){
  656. amt = new BigDecimal("0.01");
  657. }
  658. amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
  659. //discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP); //优惠价格
  660. payOrderResultInfo.setAmt(amt.toString());
  661. payOrderResultInfo.setDiscountAmt(discountAmt.toString());
  662. payOrderResultInfo.setDzkDiscountAmt(discountAmt.toString());
  663. payOrderResultInfo.setDiscountPrice(discountPrice.toString());
  664. payOrderResultInfo.setOilLiters(oilLiters.toString());
  665. payOrderResultInfo.setReceivableAmt(receivableAmt.toString());
  666. payOrderResultInfo.setOilPrice(oilPrice.toString());
  667. payOrderResultInfo.setDzkAmt(amt.toString());
  668. payOrderResultInfo.setOilsCardFlag("0");
  669. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  670. //表示开启共享
  671. if(params.get("cardEnabledFlagGroup").toString().equals("1")){ //表示开启电子卡功能
  672. payOrderResultInfo.setCardEnabledFlag("1");
  673. }else {
  674. payOrderResultInfo.setCardEnabledFlag("0");
  675. }
  676. }else {
  677. //不共享,则查看油站电子卡是否开启
  678. if(params.get("cardEnabledFlag").toString().equals("1")){
  679. payOrderResultInfo.setCardEnabledFlag("1");
  680. }else {
  681. payOrderResultInfo.setCardEnabledFlag("0");
  682. }
  683. }
  684. logger.info("油站是否开启电子会员卡功能: " +params.get("cardEnabledFlag").toString());
  685. if(payOrderResultInfo.getCardEnabledFlag().equals("1")){
  686. CustomerCardSetting customerCardSetting = new CustomerCardSetting();
  687. customerCardSetting.setStationId(Integer.valueOf(params.get("stationId").toString()));
  688. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  689. customerCardSetting.setStationId(Integer.valueOf(params.get("groupId").toString()));
  690. }
  691. List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
  692. if(cardRechargeSettingList !=null && cardRechargeSettingList.size() >0){
  693. String isGradeSetting = cardRechargeSettingList.get(0).getIsGradeSetting(); //是否叠加等级方案
  694. String isMarket = cardRechargeSettingList.get(0).getIsMarket(); //等候否叠加营销方案
  695. if(isMarket.equals("1")){
  696. if(isGradeSetting.equals("1")){
  697. BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt).subtract(dzkGradeDiscountAmt);
  698. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  699. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  700. BigDecimal dzkDiscountAmtSum = dzkDiscountAmt.add(dzkGradeDiscountAmt); //电子卡优惠金额
  701. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmtSum.toString());
  702. }else {
  703. //如果电子卡设置执行营销方案不执行等级优惠 则 电子卡支付金额 =实收金额-营销优惠金额
  704. BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt);
  705. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  706. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  707. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmt.toString());
  708. }
  709. }else {
  710. if(isGradeSetting.equals("1")){
  711. //如果电子卡设置不执行营销方案执行等级优惠 则 电子卡支付金额 =应收金额-等级优惠金额
  712. BigDecimal dzkAmt = receivableAmt.subtract(dzkGradeDiscountAmt);
  713. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  714. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  715. payOrderResultInfo.setDzkDiscountAmt(dzkGradeDiscountAmt.toString());
  716. }else {
  717. payOrderResultInfo.setDzkAmt(receivableAmt.toString());
  718. payOrderResultInfo.setDzkDiscountAmt("0");
  719. }
  720. }
  721. }
  722. CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
  723. customerElectronicCard.setStationId(Integer.valueOf(params.get("stationId").toString()));
  724. customerElectronicCard.setCardOilsType(params.get("cardOilsType").toString());
  725. customerElectronicCard.setUnionId(params.get("unionId").toString());
  726. customerElectronicCard.setMobilePhone(params.get("userPhone").toString());
  727. customerElectronicCard.setCustomerName(params.get("customerName").toString());
  728. //查询客户余额和卡的类型
  729. Map<String, String> map = this.selectCardBalance(customerElectronicCard, params);
  730. payOrderResultInfo.setBalance(map.get("balance"));
  731. payOrderResultInfo.setOilsCardFlag(map.get("oilsCardFlag"));
  732. payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
  733. }
  734. return payOrderResultInfo;
  735. }
  736. //计算独立直降
  737. public PayOrderResultInfo calculateZhiJiangDiscount(Map<String ,Object> params){
  738. BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString()); //油品价格
  739. BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString()); //应收金额
  740. BigDecimal oilLiters = new BigDecimal("0.00"); //加油升数
  741. BigDecimal discountAmt = new BigDecimal(0); //营销方案优惠金额
  742. BigDecimal amt = receivableAmt;
  743. BigDecimal discountPrice = oilPrice;
  744. BigDecimal gradeDiscountAmt = new BigDecimal(0); //等级优惠金额
  745. BigDecimal gradeDiscountPriceAmt = new BigDecimal("0");
  746. BigDecimal dzkGradeDiscountAmt = new BigDecimal(0); //计算电子卡金额时所需等级优惠金额值
  747. BigDecimal dzkDiscountAmt = new BigDecimal(0); //计算电子卡金额时所需营销优惠金额值
  748. //加油升数
  749. oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_HALF_UP);
  750. if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
  751. oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_UP);
  752. }
  753. PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo(); //计算结果存放值
  754. //计算等级优惠
  755. PayOrderResultInfo payOrderResultInfoGrade = this.calculateGradeDiscount(params);
  756. gradeDiscountAmt = new BigDecimal(payOrderResultInfoGrade.getDiscountAmt());
  757. gradeDiscountPriceAmt = new BigDecimal(payOrderResultInfoGrade.getGradeDiscountPriceAmt());
  758. dzkGradeDiscountAmt = gradeDiscountAmt; //同时给电子卡赋值等级优惠金额
  759. params.put("discountPlanType", "3");
  760. List<Map> customerMarkertPlanList = customerGradeServices.getCustomerMarkertPlanList(params);
  761. if(customerMarkertPlanList !=null && customerMarkertPlanList.size() >0){
  762. BigDecimal discountAmt_b = new BigDecimal(customerMarkertPlanList.get(0).get("discountAmt").toString()); //条件金额
  763. BigDecimal gasoilDiscountAmt_b = new BigDecimal(customerMarkertPlanList.get(0).get("gasoilDiscountAmt").toString());
  764. String discountTerm = customerMarkertPlanList.get(0).get("discountTerm").toString();
  765. String discountSettingFlag;
  766. switch (discountTerm){
  767. case "1": //按加油升数
  768. if(oilLiters.compareTo(discountAmt_b) ==1 || oilLiters.compareTo(discountAmt_b) ==0){
  769. discountPrice = oilPrice.subtract(gasoilDiscountAmt_b);
  770. amt = discountPrice.multiply(oilLiters);
  771. discountAmt = receivableAmt.subtract(amt);
  772. // discountAmt = oilLiters.multiply(gasoilDiscountAmt_b);
  773. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  774. //会员活动是否开启:1是;0否'
  775. if(customerMarkertPlanList.get(0).containsKey("discountSettingFlag") && customerMarkertPlanList.get(0).get("discountSettingFlag").toString() !="") {
  776. discountSettingFlag = customerMarkertPlanList.get(0).get("discountSettingFlag").toString();
  777. if (discountSettingFlag != null && discountSettingFlag.equals("1")) {
  778. String discountType = customerMarkertPlanList.get(0).get("discountType").toString(); //会员日周期类型设置
  779. String discountDate = customerMarkertPlanList.get(0).get("discountDate").toString(); //按固定日期
  780. String discountActivityAmt = customerMarkertPlanList.get(0).get("discountActivityAmt").toString(); //会员日优惠金额
  781. if (StringUtils.isNotBlank(discountType) && StringUtils.isNotBlank(discountDate) && StringUtils.isNotBlank(discountActivityAmt)) {
  782. //当前时间是否是活动会员日
  783. boolean b = isActivityDay(discountType, discountDate);
  784. if (b) {
  785. discountPrice = oilPrice.subtract(new BigDecimal(discountActivityAmt));
  786. amt = discountPrice.multiply(oilLiters);
  787. discountAmt = receivableAmt.subtract(amt);
  788. //discountAmt = oilLiters.multiply(new BigDecimal(discountActivityAmt));
  789. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  790. }
  791. }
  792. }
  793. }
  794. }
  795. break;
  796. case "2": //按加油金额
  797. if(receivableAmt.compareTo(discountAmt_b) ==1 || receivableAmt.compareTo(discountAmt_b) ==0){
  798. discountPrice = oilPrice.subtract(gasoilDiscountAmt_b);
  799. amt = discountPrice.multiply(oilLiters);
  800. discountAmt = receivableAmt.subtract(amt);
  801. //discountAmt = oilLiters.multiply(gasoilDiscountAmt_b);
  802. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  803. //会员活动是否开启:1是;0否'
  804. if(customerMarkertPlanList.get(0).containsKey("discountSettingFlag") && customerMarkertPlanList.get(0).get("discountSettingFlag").toString() !="") {
  805. discountSettingFlag = customerMarkertPlanList.get(0).get("discountSettingFlag").toString();
  806. if (discountSettingFlag != null && discountSettingFlag.equals("1")) {
  807. String discountType = customerMarkertPlanList.get(0).get("discountType").toString(); //会员日周期类型设置
  808. String discountDate = customerMarkertPlanList.get(0).get("discountDate").toString(); //按固定日期
  809. String discountActivityAmt = customerMarkertPlanList.get(0).get("discountActivityAmt").toString(); //会员日优惠金额
  810. if (StringUtils.isNotBlank(discountType) && StringUtils.isNotBlank(discountDate) && StringUtils.isNotBlank(discountActivityAmt)) {
  811. //当前时间是否是活动会员日
  812. boolean b = isActivityDay(discountType, discountDate);
  813. if (b) {
  814. discountPrice = oilPrice.subtract(new BigDecimal(discountActivityAmt));
  815. amt = discountPrice.multiply(oilLiters);
  816. discountAmt = receivableAmt.subtract(amt);
  817. //discountAmt = oilLiters.multiply(new BigDecimal(discountActivityAmt));
  818. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  819. }
  820. }
  821. }
  822. }
  823. }
  824. break;
  825. }
  826. dzkDiscountAmt = discountAmt; //赋值电子卡优惠金额
  827. String vipDiscountyPlus = customerMarkertPlanList.get(0).get("vipDiscountyPlus").toString();
  828. //该营销方案是否叠加等级优惠
  829. if(vipDiscountyPlus.equals("1")){
  830. //如果叠加等级优惠
  831. discountPrice = discountPrice.subtract(gradeDiscountPriceAmt);
  832. discountAmt = discountAmt.add(gradeDiscountAmt);
  833. amt = receivableAmt.subtract(discountAmt);
  834. }
  835. }
  836. // amt = receivableAmt.subtract(discountAmt); //应收金额
  837. amt = amt.setScale(2, BigDecimal.ROUND_HALF_UP);
  838. if(amt.toString().equals("0.00")){
  839. amt = new BigDecimal("0.01");
  840. }
  841. amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
  842. //discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP); //优惠价格
  843. payOrderResultInfo.setAmt(amt.toString());
  844. payOrderResultInfo.setDiscountAmt(discountAmt.toString());
  845. payOrderResultInfo.setDzkDiscountAmt(discountAmt.toString());
  846. payOrderResultInfo.setDiscountPrice(discountPrice.toString());
  847. payOrderResultInfo.setOilLiters(oilLiters.toString());
  848. payOrderResultInfo.setReceivableAmt(receivableAmt.toString());
  849. payOrderResultInfo.setOilPrice(oilPrice.toString());
  850. payOrderResultInfo.setDzkAmt(amt.toString());
  851. payOrderResultInfo.setOilsCardFlag("0");
  852. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  853. //表示开启共享
  854. if(params.get("cardEnabledFlagGroup").toString().equals("1")){ //表示开启电子卡功能
  855. payOrderResultInfo.setCardEnabledFlag("1");
  856. }else {
  857. payOrderResultInfo.setCardEnabledFlag("0");
  858. }
  859. }else {
  860. //不共享,则查看油站电子卡是否开启
  861. if(params.get("cardEnabledFlag").toString().equals("1")){
  862. payOrderResultInfo.setCardEnabledFlag("1");
  863. }else {
  864. payOrderResultInfo.setCardEnabledFlag("0");
  865. }
  866. }
  867. logger.info("油站是否开启电子会员卡功能: " +params.get("cardEnabledFlag").toString());
  868. if(payOrderResultInfo.getCardEnabledFlag().equals("1")){
  869. CustomerCardSetting customerCardSetting = new CustomerCardSetting();
  870. customerCardSetting.setStationId(Integer.valueOf(params.get("stationId").toString()));
  871. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  872. customerCardSetting.setStationId(Integer.valueOf(params.get("groupId").toString()));
  873. }
  874. List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
  875. if(cardRechargeSettingList !=null && cardRechargeSettingList.size() >0){
  876. String isGradeSetting = cardRechargeSettingList.get(0).getIsGradeSetting(); //是否叠加等级方案
  877. String isMarket = cardRechargeSettingList.get(0).getIsMarket(); //等候否叠加营销方案
  878. if(isMarket.equals("1")){
  879. if(isGradeSetting.equals("1")){
  880. //都叠加 电子卡支付金额 = 应收金额 - 营销优惠金额 - 等级优惠金额
  881. BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt).subtract(dzkGradeDiscountAmt);
  882. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt; //如果为负数,则默认设置0.01元
  883. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  884. BigDecimal dzkDiscountAmtSum = dzkDiscountAmt.add(dzkGradeDiscountAmt); //电子卡总优惠金额
  885. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmtSum.toString());
  886. }else {
  887. //叠加营销方案不叠加等级优惠: 电子卡支付金额 =实收金额-营销优惠金额
  888. BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt);
  889. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  890. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  891. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmt.toString());
  892. }
  893. }else {
  894. if(isGradeSetting.equals("1")){
  895. //不叠加营销方案叠加等级优惠:电子卡支付金额 =应收金额-等级优惠金额
  896. BigDecimal dzkAmt = receivableAmt.subtract(dzkGradeDiscountAmt);
  897. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  898. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  899. payOrderResultInfo.setDzkDiscountAmt(dzkGradeDiscountAmt.toString());
  900. }else {
  901. //都不叠加: 电子卡支付金额 = 应收金额
  902. payOrderResultInfo.setDzkAmt(receivableAmt.toString());
  903. payOrderResultInfo.setDzkDiscountAmt("0");
  904. }
  905. }
  906. }
  907. CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
  908. customerElectronicCard.setStationId(Integer.valueOf(params.get("stationId").toString()));
  909. customerElectronicCard.setCardOilsType(params.get("cardOilsType").toString());
  910. customerElectronicCard.setUnionId(params.get("unionId").toString());
  911. customerElectronicCard.setMobilePhone(params.get("userPhone").toString());
  912. customerElectronicCard.setCustomerName(params.get("customerName").toString());
  913. //查询客户余额和卡的类型
  914. Map<String, String> map = this.selectCardBalance(customerElectronicCard, params);
  915. payOrderResultInfo.setBalance(map.get("balance"));
  916. payOrderResultInfo.setOilsCardFlag(map.get("oilsCardFlag"));
  917. payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
  918. }
  919. return payOrderResultInfo;
  920. }
  921. //计算立减
  922. public PayOrderResultInfo calculateLiJianDiscount(Map<String ,Object> params){
  923. BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString()); //油品价格
  924. BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString()); //应收金额
  925. BigDecimal oilLiters = new BigDecimal("0.00"); //加油升数
  926. BigDecimal discountAmt = new BigDecimal(0); //优惠金额
  927. BigDecimal amt = receivableAmt;
  928. BigDecimal discountPrice = oilPrice;
  929. BigDecimal gradeDiscountAmt = new BigDecimal(0); //等级优惠金额
  930. BigDecimal dzkGradeDiscountAmt = new BigDecimal(0); //计算电子卡金额时所需等级优惠金额值
  931. BigDecimal dzkDiscountAmt = new BigDecimal(0); //计算电子卡金额时所需营销优惠金额值
  932. //加油升数
  933. oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_HALF_UP);
  934. if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
  935. oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_UP);
  936. }
  937. PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
  938. //计算等级优惠
  939. PayOrderResultInfo payOrderResultInfoGrade = this.calculateGradeDiscount(params);
  940. gradeDiscountAmt = new BigDecimal(payOrderResultInfoGrade.getDiscountAmt());
  941. dzkGradeDiscountAmt = gradeDiscountAmt; //同时给电子卡赋值等级优惠金额
  942. params.put("discountPlanType", "2");
  943. List<Map> customerMarkertPlanList = customerGradeServices.getCustomerMarkertPlanList(params);
  944. if(customerMarkertPlanList !=null && customerMarkertPlanList.size() >0){
  945. BigDecimal discountAmt_b = new BigDecimal(customerMarkertPlanList.get(0).get("discountAmt").toString()); //条件金额
  946. BigDecimal gasoilDiscountAmt_b = new BigDecimal(customerMarkertPlanList.get(0).get("gasoilDiscountAmt").toString()); //享受的优惠
  947. if(receivableAmt.compareTo(discountAmt_b) == 1 || receivableAmt.compareTo(discountAmt_b) == 0){
  948. discountAmt = gasoilDiscountAmt_b;
  949. //会员活动是否开启:1是;0否'
  950. if(customerMarkertPlanList.get(0).containsKey("discountSettingFlag") && customerMarkertPlanList.get(0).get("discountSettingFlag").toString() !="") {
  951. String discountSettingFlag = customerMarkertPlanList.get(0).get("discountSettingFlag").toString();
  952. if (discountSettingFlag != null && discountSettingFlag.equals("1")) {
  953. String discountType = customerMarkertPlanList.get(0).get("discountType").toString(); //会员日周期类型设置
  954. String discountDate = customerMarkertPlanList.get(0).get("discountDate").toString(); //按固定日期
  955. String discountActivityAmt = customerMarkertPlanList.get(0).get("discountActivityAmt").toString(); //会员日优惠金额
  956. if (StringUtils.isNotBlank(discountType) && StringUtils.isNotBlank(discountDate) && StringUtils.isNotBlank(discountActivityAmt)) {
  957. //当前时间是否是会员日
  958. boolean b = isActivityDay(discountType, discountDate);
  959. if (b) {
  960. discountAmt = new BigDecimal(discountActivityAmt);
  961. }
  962. }
  963. }
  964. }
  965. }
  966. dzkDiscountAmt = discountAmt;
  967. String vipDiscountyPlus = customerMarkertPlanList.get(0).get("vipDiscountyPlus").toString();
  968. if(vipDiscountyPlus.equals("1")){
  969. //如果叠加等级优惠
  970. discountAmt = discountAmt.add(gradeDiscountAmt);
  971. }
  972. }
  973. amt = receivableAmt.subtract(discountAmt); //应收金额
  974. amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
  975. discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP); //优惠价格
  976. payOrderResultInfo.setAmt(amt.toString());
  977. payOrderResultInfo.setDiscountAmt(discountAmt.toString());
  978. payOrderResultInfo.setDzkDiscountAmt(discountAmt.toString());
  979. payOrderResultInfo.setDiscountPrice(discountPrice.toString());
  980. payOrderResultInfo.setOilLiters(oilLiters.toString());
  981. payOrderResultInfo.setReceivableAmt(receivableAmt.toString());
  982. payOrderResultInfo.setOilPrice(oilPrice.toString());
  983. payOrderResultInfo.setDzkAmt(amt.toString());
  984. payOrderResultInfo.setOilsCardFlag("0");
  985. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  986. //表示开启共享
  987. if(params.get("cardEnabledFlagGroup").toString().equals("1")){ //表示开启电子卡功能
  988. payOrderResultInfo.setCardEnabledFlag("1");
  989. }else {
  990. payOrderResultInfo.setCardEnabledFlag("0");
  991. }
  992. }else {
  993. //不共享,则查看油站电子卡是否开启
  994. if(params.get("cardEnabledFlag").toString().equals("1")){
  995. payOrderResultInfo.setCardEnabledFlag("1");
  996. }else {
  997. payOrderResultInfo.setCardEnabledFlag("0");
  998. }
  999. }
  1000. logger.info("油站是否开启电子会员卡功能: " +params.get("cardEnabledFlag").toString());
  1001. if(payOrderResultInfo.getCardEnabledFlag().equals("1")){
  1002. CustomerCardSetting customerCardSetting = new CustomerCardSetting();
  1003. customerCardSetting.setStationId(Integer.valueOf(params.get("stationId").toString()));
  1004. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  1005. customerCardSetting.setStationId(Integer.valueOf(params.get("groupId").toString()));
  1006. }
  1007. List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
  1008. if(cardRechargeSettingList !=null && cardRechargeSettingList.size() >0){
  1009. String isGradeSetting = cardRechargeSettingList.get(0).getIsGradeSetting(); //是否叠加等级方案
  1010. String isMarket = cardRechargeSettingList.get(0).getIsMarket(); //等候否叠加营销方案
  1011. if(isMarket.equals("1")){
  1012. if(isGradeSetting.equals("1")){
  1013. BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt).subtract(dzkGradeDiscountAmt);
  1014. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  1015. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  1016. BigDecimal dzkDiscountAmtSum = dzkDiscountAmt.add(dzkGradeDiscountAmt); //电子卡优惠金额
  1017. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmtSum.toString());
  1018. }else {
  1019. //如果电子卡设置执行营销方案不执行等级优惠 则 电子卡支付金额 =实收金额-营销优惠金额
  1020. BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt);
  1021. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  1022. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  1023. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmt.toString());
  1024. }
  1025. }else {
  1026. if(isGradeSetting.equals("1")){
  1027. //如果电子卡设置不执行营销方案执行等级优惠 则 电子卡支付金额 =应收金额-等级优惠金额
  1028. BigDecimal dzkAmt = receivableAmt.subtract(dzkGradeDiscountAmt);
  1029. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  1030. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  1031. payOrderResultInfo.setDzkDiscountAmt(dzkGradeDiscountAmt.toString());
  1032. }else {
  1033. payOrderResultInfo.setDzkAmt(receivableAmt.toString());
  1034. payOrderResultInfo.setDzkDiscountAmt("0");
  1035. }
  1036. }
  1037. }
  1038. CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
  1039. customerElectronicCard.setStationId(Integer.valueOf(params.get("stationId").toString()));
  1040. customerElectronicCard.setCardOilsType(params.get("cardOilsType").toString());
  1041. customerElectronicCard.setUnionId(params.get("unionId").toString());
  1042. customerElectronicCard.setMobilePhone(params.get("userPhone").toString());
  1043. customerElectronicCard.setCustomerName(params.get("customerName").toString());
  1044. //查询客户余额和卡的类型
  1045. Map<String, String> map = this.selectCardBalance(customerElectronicCard, params);
  1046. payOrderResultInfo.setBalance(map.get("balance"));
  1047. payOrderResultInfo.setOilsCardFlag(map.get("oilsCardFlag"));
  1048. payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
  1049. }
  1050. return payOrderResultInfo;
  1051. }
  1052. //计算满减
  1053. public PayOrderResultInfo calculateManJianDiscount(Map<String ,Object> params){
  1054. BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString()); //油品价格
  1055. BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString()); //应收金额
  1056. BigDecimal oilLiters = new BigDecimal("0.00"); //加油升数
  1057. BigDecimal discountAmt = new BigDecimal(0); //优惠金额
  1058. BigDecimal amt = receivableAmt;
  1059. BigDecimal discountPrice = oilPrice;
  1060. BigDecimal gradeDiscountAmt = new BigDecimal(0); //等级优惠金额
  1061. BigDecimal dzkGradeDiscountAmt = new BigDecimal(0); //计算电子卡金额时所需等级优惠金额值
  1062. BigDecimal dzkDiscountAmt = new BigDecimal(0); //计算电子卡金额时所需营销优惠金额值
  1063. //加油升数
  1064. oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_HALF_UP);
  1065. if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
  1066. oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_UP);
  1067. }
  1068. PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
  1069. //计算等级优惠
  1070. PayOrderResultInfo payOrderResultInfoGrade = this.calculateGradeDiscount(params);
  1071. gradeDiscountAmt = new BigDecimal(payOrderResultInfoGrade.getDiscountAmt());
  1072. dzkGradeDiscountAmt = gradeDiscountAmt;
  1073. params.put("discountPlanType", "1");
  1074. List<Map> customerMarkertPlanList = customerGradeServices.getCustomerMarkertPlanList(params);
  1075. if(customerMarkertPlanList !=null && customerMarkertPlanList.size() >0){
  1076. BigDecimal discountAmt_b = new BigDecimal(customerMarkertPlanList.get(0).get("discountAmt").toString()); //条件金额
  1077. BigDecimal gasoilDiscountAmt_b = new BigDecimal(customerMarkertPlanList.get(0).get("gasoilDiscountAmt").toString()); //享受的优惠
  1078. if(receivableAmt.compareTo(discountAmt_b) == 1 || receivableAmt.compareTo(discountAmt_b) == 0){
  1079. discountAmt = receivableAmt.divide(discountAmt_b, 2, BigDecimal.ROUND_HALF_UP).multiply(gasoilDiscountAmt_b); //优惠金额
  1080. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  1081. //会员活动是否开启:1是;0否'
  1082. if(customerMarkertPlanList.get(0).containsKey("discountSettingFlag") && customerMarkertPlanList.get(0).get("discountSettingFlag").toString() !=""){
  1083. String discountSettingFlag = customerMarkertPlanList.get(0).get("discountSettingFlag").toString();
  1084. if(discountSettingFlag !=null && discountSettingFlag.equals("1")){
  1085. String discountType = customerMarkertPlanList.get(0).get("discountType").toString(); //会员日周期类型设置
  1086. String discountDate = customerMarkertPlanList.get(0).get("discountDate").toString(); //按固定日期
  1087. String discountActivityAmt = customerMarkertPlanList.get(0).get("discountActivityAmt").toString(); //会员日优惠金额
  1088. //当前时间是否是会员日
  1089. if(StringUtils.isNotBlank(discountType) && StringUtils.isNotBlank(discountDate) && StringUtils.isNotBlank(discountActivityAmt)){
  1090. boolean b = isActivityDay(discountType, discountDate);
  1091. if(b){
  1092. discountAmt = receivableAmt.divide(discountAmt_b, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(discountActivityAmt)); //优惠金额
  1093. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  1094. }
  1095. }
  1096. }
  1097. }
  1098. }
  1099. dzkDiscountAmt = discountAmt;
  1100. //是否共享会员等级优惠叠加: 1 代表是; 2 代表否;
  1101. String vipDiscountyPlus = customerMarkertPlanList.get(0).get("vipDiscountyPlus").toString();
  1102. if(vipDiscountyPlus.equals("1")){
  1103. //如果叠加等级优惠
  1104. discountAmt = discountAmt.add(gradeDiscountAmt);
  1105. }
  1106. }
  1107. amt = receivableAmt.subtract(discountAmt); //应收金额
  1108. amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
  1109. discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP); //优惠价格
  1110. payOrderResultInfo.setAmt(amt.toString());
  1111. payOrderResultInfo.setDiscountAmt(discountAmt.toString());
  1112. payOrderResultInfo.setDzkDiscountAmt(discountAmt.toString());
  1113. payOrderResultInfo.setDiscountPrice(discountPrice.toString());
  1114. payOrderResultInfo.setOilLiters(oilLiters.toString());
  1115. payOrderResultInfo.setReceivableAmt(receivableAmt.toString());
  1116. payOrderResultInfo.setOilPrice(oilPrice.toString());
  1117. payOrderResultInfo.setDzkAmt(amt.toString());
  1118. payOrderResultInfo.setOilsCardFlag("0");
  1119. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  1120. //表示开启共享
  1121. if(params.get("cardEnabledFlagGroup").toString().equals("1")){ //表示开启电子卡功能
  1122. payOrderResultInfo.setCardEnabledFlag("1");
  1123. }else {
  1124. payOrderResultInfo.setCardEnabledFlag("0");
  1125. }
  1126. }else {
  1127. //不共享,则查看油站电子卡是否开启
  1128. if(params.get("cardEnabledFlag").toString().equals("1")){
  1129. payOrderResultInfo.setCardEnabledFlag("1");
  1130. }else {
  1131. payOrderResultInfo.setCardEnabledFlag("0");
  1132. }
  1133. }
  1134. logger.info("油站是否开启电子会员卡功能: " +params.get("cardEnabledFlag").toString());
  1135. if(payOrderResultInfo.getCardEnabledFlag().equals("1")){
  1136. CustomerCardSetting customerCardSetting = new CustomerCardSetting();
  1137. customerCardSetting.setStationId(Integer.valueOf(params.get("stationId").toString()));
  1138. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  1139. customerCardSetting.setStationId(Integer.valueOf(params.get("groupId").toString()));
  1140. }
  1141. List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
  1142. if(cardRechargeSettingList !=null && cardRechargeSettingList.size() >0){
  1143. String isGradeSetting = cardRechargeSettingList.get(0).getIsGradeSetting(); //是否叠加等级方案
  1144. String isMarket = cardRechargeSettingList.get(0).getIsMarket(); //等候否叠加营销方案
  1145. if(isMarket.equals("1")){
  1146. if(isGradeSetting.equals("1")){
  1147. //如果电子卡设置执行营销方案不执行等级优惠 则 电子卡支付金额 =实收金额-营销优惠-等级优惠金额
  1148. BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt).subtract(dzkGradeDiscountAmt);
  1149. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  1150. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  1151. BigDecimal dzkDiscountAmtSum = dzkDiscountAmt.add(dzkGradeDiscountAmt); //电子卡优惠金额
  1152. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmtSum.toString());
  1153. }else {
  1154. //如果电子卡设置执行营销方案不执行等级优惠 则 电子卡支付金额 =实收金额-营销优惠金额
  1155. BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt);
  1156. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  1157. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  1158. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmt.toString());
  1159. }
  1160. }else {
  1161. if(isGradeSetting.equals("1")){
  1162. //如果电子卡设置不执行营销方案执行等级优惠 则 电子卡支付金额 =应收金额-等级优惠金额
  1163. BigDecimal dzkAmt = receivableAmt.subtract(dzkGradeDiscountAmt);
  1164. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  1165. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  1166. payOrderResultInfo.setDzkDiscountAmt(dzkGradeDiscountAmt.toString());
  1167. }else {
  1168. payOrderResultInfo.setDzkAmt(receivableAmt.toString());
  1169. payOrderResultInfo.setDzkDiscountAmt("0");
  1170. }
  1171. }
  1172. }
  1173. CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
  1174. customerElectronicCard.setStationId(Integer.valueOf(params.get("stationId").toString()));
  1175. customerElectronicCard.setCardOilsType(params.get("cardOilsType").toString());
  1176. customerElectronicCard.setUnionId(params.get("unionId").toString());
  1177. customerElectronicCard.setMobilePhone(params.get("userPhone").toString());
  1178. customerElectronicCard.setCustomerName(params.get("customerName").toString());
  1179. //查询客户余额和卡的类型
  1180. Map<String, String> map = this.selectCardBalance(customerElectronicCard, params);
  1181. payOrderResultInfo.setBalance(map.get("balance"));
  1182. payOrderResultInfo.setOilsCardFlag(map.get("oilsCardFlag"));
  1183. payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
  1184. }
  1185. return payOrderResultInfo;
  1186. }
  1187. //计算等级优惠
  1188. public PayOrderResultInfo calculateGradeDiscount(Map<String ,Object> params){
  1189. String oilName = params.get("oilName").toString();
  1190. String stationId = params.get("stationId").toString();
  1191. BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString()); //油品价格
  1192. BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString()); //应收金额
  1193. BigDecimal oilLiters = new BigDecimal("0.00"); //加油升数
  1194. BigDecimal discountAmt = new BigDecimal(0); //优惠金额
  1195. BigDecimal dzkDiscountAmt = discountAmt; //优惠金额
  1196. BigDecimal amt = receivableAmt;
  1197. BigDecimal discountPrice = oilPrice;
  1198. BigDecimal gradeDiscountPriceAmt = new BigDecimal("0"); //价格优惠金额
  1199. PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
  1200. oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_HALF_UP);
  1201. if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
  1202. oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_UP);
  1203. }
  1204. //当前客户是否已存在当前油站客户信息中
  1205. CustomerManage customerManage = new CustomerManage();
  1206. //customerManage.setPhoneNumber(params.get("mobilePhone").toString());
  1207. customerManage.setUnionId(params.get("unionId").toString());
  1208. customerManage.setOilName(oilName);
  1209. customerManage.setStationId(Integer.valueOf(stationId));
  1210. CustomerManage customerManageInfo = customerManagerService.getCustomerManageInfo(customerManage);
  1211. if(customerManageInfo !=null){
  1212. //当前客户所加油的订单已存在等级时
  1213. double amtSum = customerManageInfo.getAmt().doubleValue(); //当前客户已累计的金额
  1214. List<Map> cList = customerGradeServices.getCustomerGradeListOrderByDesc(params); //获取油站的等级优惠方案 倒叙查询规则
  1215. if(cList !=null && cList.size() >0){ //当前油站设置等级方案时
  1216. for(Map m : cList){
  1217. if(amtSum >= Double.valueOf(m.get("memberConditStart").toString())){
  1218. discountPrice = oilPrice.subtract(new BigDecimal(m.get("discountAmt").toString()));
  1219. gradeDiscountPriceAmt = new BigDecimal(m.get("discountAmt").toString());
  1220. discountAmt = oilLiters.multiply(new BigDecimal(m.get("discountAmt").toString()));
  1221. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  1222. break;
  1223. }
  1224. }
  1225. }
  1226. }else {
  1227. //当前客户所加油的订单不存在等级时
  1228. List<Map> customerGradeList = customerGradeServices.getCustomerGradeList(params); //升序查询 取第一条
  1229. if(customerGradeList !=null && customerGradeList.size() >0){
  1230. discountPrice = oilPrice.subtract(new BigDecimal(customerGradeList.get(0).get("discountAmt").toString()));
  1231. gradeDiscountPriceAmt = new BigDecimal(customerGradeList.get(0).get("discountAmt").toString());
  1232. discountAmt = oilLiters.multiply(new BigDecimal(customerGradeList.get(0).get("discountAmt").toString()));
  1233. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  1234. }
  1235. }
  1236. amt = receivableAmt.subtract(discountAmt); //应收金额
  1237. amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
  1238. //discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP); //优惠价格
  1239. payOrderResultInfo.setGradeDiscountPriceAmt(gradeDiscountPriceAmt.toString());
  1240. payOrderResultInfo.setAmt(amt.toString());
  1241. payOrderResultInfo.setDiscountAmt(discountAmt.toString());
  1242. payOrderResultInfo.setDzkDiscountAmt(discountAmt.toString());
  1243. payOrderResultInfo.setDiscountPrice(discountPrice.toString());
  1244. payOrderResultInfo.setOilLiters(oilLiters.toString());
  1245. payOrderResultInfo.setReceivableAmt(receivableAmt.toString());
  1246. payOrderResultInfo.setOilPrice(oilPrice.toString());
  1247. payOrderResultInfo.setDzkAmt(amt.toString());
  1248. payOrderResultInfo.setOilsCardFlag("0");
  1249. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  1250. //表示开启共享
  1251. if(params.get("cardEnabledFlagGroup").toString().equals("1")){ //表示开启电子卡功能
  1252. payOrderResultInfo.setCardEnabledFlag("1");
  1253. }else {
  1254. payOrderResultInfo.setCardEnabledFlag("0");
  1255. }
  1256. }else {
  1257. //不共享,则查看油站电子卡是否开启
  1258. if(params.get("cardEnabledFlag").toString().equals("1")){
  1259. payOrderResultInfo.setCardEnabledFlag("1");
  1260. }else {
  1261. payOrderResultInfo.setCardEnabledFlag("0");
  1262. }
  1263. }
  1264. //电子卡功能是否开启
  1265. logger.info("油站是否开启电子会员卡功能: " +payOrderResultInfo.getCardEnabledFlag());
  1266. if(payOrderResultInfo.getCardEnabledFlag().equals("1")){
  1267. payOrderResultInfo.setDzkAmt(receivableAmt.toString());
  1268. payOrderResultInfo.setDzkDiscountAmt("0");
  1269. CustomerCardSetting customerCardSetting = new CustomerCardSetting();
  1270. customerCardSetting.setStationId(Integer.valueOf(params.get("stationId").toString()));
  1271. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  1272. customerCardSetting.setStationId(Integer.valueOf(params.get("groupId").toString()));
  1273. }
  1274. List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
  1275. if(cardRechargeSettingList !=null && cardRechargeSettingList.size() >0){
  1276. String isGradeSetting = cardRechargeSettingList.get(0).getIsGradeSetting();
  1277. if(isGradeSetting.equals("1")){
  1278. payOrderResultInfo.setDzkAmt(amt.toString());
  1279. payOrderResultInfo.setDzkDiscountAmt(discountAmt.toString());
  1280. }
  1281. }
  1282. CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
  1283. customerElectronicCard.setStationId(Integer.valueOf(params.get("stationId").toString()));
  1284. customerElectronicCard.setCardOilsType(params.get("cardOilsType").toString());
  1285. customerElectronicCard.setUnionId(params.get("unionId").toString());
  1286. customerElectronicCard.setMobilePhone(params.get("userPhone").toString());
  1287. customerElectronicCard.setCustomerName(params.get("customerName").toString());
  1288. //查询客户余额和卡的类型
  1289. Map<String, String> map = this.selectCardBalance(customerElectronicCard, params);
  1290. payOrderResultInfo.setBalance(map.get("balance"));
  1291. payOrderResultInfo.setOilsCardFlag(map.get("oilsCardFlag"));
  1292. payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
  1293. }
  1294. return payOrderResultInfo;
  1295. }
  1296. //查询用户电子会员卡余额
  1297. public Map<String, String> selectCardBalance(CustomerElectronicCard card, Map params) {
  1298. CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
  1299. customerElectronicCard.setCardOilsType(card.getCardOilsType());
  1300. customerElectronicCard.setStationId(card.getStationId());
  1301. customerElectronicCard.setUnionId(card.getUnionId());
  1302. BigDecimal balance = new BigDecimal(0);
  1303. String cardOilsType1 ="";
  1304. Map<String, String> result = new HashMap<>();
  1305. CustomerCardSetting customerCardSetting = new CustomerCardSetting();
  1306. customerCardSetting.setStationId(card.getStationId());
  1307. if(params.get("cardRuleFlagGroup").equals("1")){ //
  1308. customerCardSetting.setStationId(Integer.valueOf(params.get("groupId").toString()));
  1309. customerElectronicCard.setStationId(Integer.valueOf(params.get("groupId").toString()));
  1310. }
  1311. List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
  1312. if(cardRechargeSettingList !=null && cardRechargeSettingList.size()>0){
  1313. String cardOilsTypeExist = cardRechargeSettingList.get(0).getCardOilsType();
  1314. String[] split = cardOilsTypeExist.split(",");
  1315. List<String> strings = Arrays.asList(split);
  1316. if(strings.contains(card.getCardOilsType())){
  1317. CustomerElectronicCard electronicCardInfo = electronicMembershipCardService.getElectronicCardInfoByUnionId(customerElectronicCard);
  1318. if(electronicCardInfo !=null){
  1319. //已存在卡
  1320. balance = electronicCardInfo.getAmt();
  1321. cardOilsType1 = electronicCardInfo.getCardOilsType();
  1322. result.put("balance",balance.toString());
  1323. result.put("oilsCardFlag", "1");
  1324. result.put("cardOilsType",cardOilsType1);
  1325. }else {
  1326. //如果油站已开启该卡,用户没有卡
  1327. String currentTime = String.valueOf(System.currentTimeMillis());
  1328. String customerNo = card.getStationId() + currentTime;
  1329. customerElectronicCard.setCustomerNo(customerNo);
  1330. customerElectronicCard.setAmt(new BigDecimal(0));
  1331. customerElectronicCard.setCreateTime(new Date());
  1332. customerElectronicCard.setCustomerName(card.getCustomerName());
  1333. customerElectronicCard.setMobilePhone(card.getMobilePhone());
  1334. electronicMembershipCardService.insetElectronicCard(customerElectronicCard);
  1335. CustomerElectronicCard electronicCardInfoNew = electronicMembershipCardService.getElectronicCardInfoByUnionId(customerElectronicCard);
  1336. balance = electronicCardInfoNew.getAmt();
  1337. result.put("balance",balance.toString());
  1338. result.put("oilsCardFlag", "1");
  1339. result.put("cardOilsType",electronicCardInfoNew.getCardOilsType());
  1340. }
  1341. }else {
  1342. result.put("oilsCardFlag", "0");
  1343. }
  1344. }else {
  1345. result.put("oilsCardFlag", "0");
  1346. }
  1347. return result;
  1348. }
  1349. /***
  1350. * //营销方案活动日优惠
  1351. * @param discountType 活动日时间类型
  1352. * @param discountDate 活动日时间字符串,格式:1,2,3,4,5
  1353. * @return
  1354. */
  1355. public boolean isActivityDay(String discountType, String discountDate){
  1356. boolean boo= false;
  1357. if(discountDate !=null && discountDate !=""){
  1358. String currentTime = null; //当前时间
  1359. String[] discountDateArray = discountDate.split(",");
  1360. Calendar calendar = Calendar.getInstance();
  1361. calendar.setTime(new Date()); //获取当前时间
  1362. switch (discountType){
  1363. case "1": // 1.按周来
  1364. int day_Week = calendar.get(Calendar.DAY_OF_WEEK);
  1365. day_Week= day_Week-1; //减一原因:数据库存的下标从零开始
  1366. currentTime = String.valueOf(day_Week);
  1367. break;
  1368. case "2": // 2.每月的 多少号
  1369. int day_month = calendar.get(Calendar.DAY_OF_MONTH);
  1370. day_month = day_month-1; //减一原因:数据库存的下标从零开始
  1371. currentTime = String.valueOf(day_month); //当前时间
  1372. break;
  1373. case "3": // 3.固定日期
  1374. currentTime =new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //当前时间
  1375. break;
  1376. }
  1377. //活动日优惠金额
  1378. for (String s : discountDateArray){
  1379. if(s.equals(currentTime)){
  1380. boo = true;
  1381. break;
  1382. }
  1383. }
  1384. }
  1385. return boo;
  1386. }
  1387. /**
  1388. * 根据订单号获取订单信息
  1389. * produces="application/json;charset=UTF-8",consumes = "application/json",
  1390. * @RequestBody String orderno
  1391. * @param
  1392. * @return
  1393. */
  1394. @RequestMapping(value = "/selectOrderInfoByOrdNo", method = RequestMethod.GET)
  1395. @ResponseBody
  1396. public String getPayOrderList(@RequestParam String orderNo){
  1397. Gson gson =new Gson();
  1398. ResultData resultData =null;
  1399. if(StringUtils.isNotBlank(orderNo)){
  1400. PayOrder payOrder = payOrderService.selectOrderInfoByOrdNo(orderNo);
  1401. resultData = ResultData.success(payOrder);
  1402. }else {
  1403. resultData=ResultData.error(CodeMsg.SEARCH_FAIL);
  1404. }
  1405. return gson.toJson(resultData);
  1406. }
  1407. /*
  1408. * 根据用户openId和用户类型userType查询用户订单
  1409. * @param openId
  1410. * @param userType
  1411. * @return
  1412. */
  1413. @RequestMapping(value = "/getOrderListByOpenIdAndUserType", method = RequestMethod.GET)
  1414. @ResponseBody
  1415. public String getOrderListByOpenIdAndUserType(@RequestParam("openId") String openId){
  1416. Gson gson =new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
  1417. ResultData resultData =null;
  1418. if(StringUtils.isNotBlank(openId)){
  1419. AppUserInfo appUserInfo = new AppUserInfo();
  1420. appUserInfo.setMinaOpenid(openId);
  1421. // switch (userType){
  1422. // case "1":
  1423. // appUserInfo.setMinaOpenid(openId);
  1424. // break;
  1425. // case "2":
  1426. // appUserInfo.setALiId(openId);
  1427. // break;
  1428. // }
  1429. List<PayOrder> payOrderList = payOrderService.getOrderListByOpenIdAndUserType(appUserInfo);
  1430. resultData=ResultData.success(payOrderList);
  1431. }else {
  1432. resultData=ResultData.error(CodeMsg.SEARCH_FAIL);
  1433. }
  1434. return gson.toJson(resultData);
  1435. }
  1436. }