PayOrderController.java 99 KB

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