PayOrderController.java 172 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594
  1. package com.platform.yijia.controller;
  2. import com.github.pagehelper.PageHelper;
  3. import com.github.pagehelper.PageInfo;
  4. import com.google.gson.Gson;
  5. import com.google.gson.GsonBuilder;
  6. import com.platform.yijia.config.YiJiaRequest;
  7. import com.platform.yijia.dao.PayOrderMapper;
  8. import com.platform.yijia.param.request.PayInfoRequest;
  9. import com.platform.yijia.param.request.PayOrderRequest;
  10. import com.platform.yijia.pojo.*;
  11. import com.platform.yijia.service.*;
  12. import com.platform.yijia.utils.CodeMsg;
  13. import com.platform.yijia.utils.ResultData;
  14. import org.apache.commons.lang3.StringUtils;
  15. import org.omg.CORBA.CODESET_INCOMPATIBLE;
  16. import org.slf4j.Logger;
  17. import org.slf4j.LoggerFactory;
  18. import org.springframework.stereotype.Controller;
  19. import org.springframework.transaction.annotation.Transactional;
  20. import org.springframework.web.bind.annotation.*;
  21. import javax.annotation.Resource;
  22. import java.math.BigDecimal;
  23. import java.math.BigInteger;
  24. import java.sql.Timestamp;
  25. import java.text.SimpleDateFormat;
  26. import java.util.*;
  27. @Controller
  28. @YiJiaRequest()
  29. @CrossOrigin
  30. public class PayOrderController {
  31. private static Logger logger =(Logger) LoggerFactory.getLogger(PayOrderController.class);
  32. @Resource
  33. private PayOrderService payOrderService;
  34. @Resource
  35. private AppUserInfoService appUserInfoService;
  36. @Resource
  37. private StationService stationService;
  38. @Resource
  39. private CustomerGradeServices customerGradeServices;
  40. @Resource
  41. private PayOrderMapper payOrderMapper;
  42. @Resource
  43. private ElectronicMembershipCardService electronicMembershipCardService;
  44. @Resource
  45. private CustomerManagerService customerManagerService;
  46. @Resource
  47. private SysDictDataService sysDictDataService;
  48. @Resource
  49. private LabelService labelService;
  50. @Resource
  51. private StationOilGunService stationOilGunService;
  52. @Resource
  53. private CouponService couponService;
  54. //小程序支付生成订单
  55. @RequestMapping(value = "/AddPayOrderInfoNew", consumes = "application/json", method = RequestMethod.POST)
  56. @ResponseBody
  57. @Transactional
  58. public String AddPayOrderInfoNew(@RequestBody PayOrderRequest payOrderRequest){
  59. logger.info("生成订单前端传来参数油站ID:"+payOrderRequest.getStationId()+"; 用户openId:"+ payOrderRequest.getOpenId() +"; 加油员ID:" +payOrderRequest.getPersonnelId()+ ";");
  60. Gson gson =new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
  61. ResultData resultData =null;
  62. AppUserInfo appUserInfo =new AppUserInfo(); //查询客户信息传递参数
  63. PayOrder payOrder = new PayOrder(); //生成订单参数
  64. if(StringUtils.isNotBlank(payOrderRequest.getUserType()) && StringUtils.isNotBlank(payOrderRequest.getOpenId()) && StringUtils.isNotBlank(payOrderRequest.getOilName()) &&
  65. StringUtils.isNotBlank(payOrderRequest.getOilGun()) && payOrderRequest.getReceivableAmt() !=null ){
  66. appUserInfo.setUserType(payOrderRequest.getUserType());
  67. switch (payOrderRequest.getUserType()){
  68. case "1": //小程序
  69. appUserInfo.setMinaOpenid(payOrderRequest.getOpenId());
  70. break;
  71. case "2": //支付宝公众号
  72. appUserInfo.setALiId(payOrderRequest.getOpenId());
  73. break;
  74. }
  75. StationInfo stationInfo = new StationInfo();
  76. stationInfo.setStationId(payOrderRequest.getStationId());
  77. StationInfo stationInfos = stationService.selectStationInfo(stationInfo);
  78. Map<String ,Object> resultMap = new HashMap<>(); //返回结果集
  79. if(stationInfos !=null){
  80. payOrder.setStationName(stationInfos.getStationName());
  81. //获取油站图片和名称
  82. resultMap.put("stationPic", stationInfos.getStationPic());
  83. resultMap.put("stationName", stationInfos.getStationName());
  84. appUserInfo.setStationId(stationInfos.getGroupId());
  85. AppUserInfo appUserInfos = appUserInfoService.getAppUserInfo(appUserInfo);
  86. if(appUserInfos !=null) {
  87. //payOrderRequest存放参数原因:用于其他方法形参
  88. payOrderRequest.setCardEnabledFlagGroup(stationInfos.getCardEnabledFlagGroup()); //集团是否开启电子卡
  89. payOrderRequest.setCardRuleFlagGroup(stationInfos.getCardRuleFlagGroup()); //集团是否共享
  90. payOrderRequest.setIntegralFlagGroup(stationInfos.getIntegralFlagGroup()); //集团是否启用积分功能
  91. payOrderRequest.setIntegralRuleFlagGroup(stationInfos.getIntegralRuleFlagGroup()); //集团是否共享
  92. payOrderRequest.setCustomerPhone(appUserInfos.getMobilePhone()); //客户手机号; 注:此处存放手机号用于获取客户信息参数查询
  93. payOrderRequest.setUnionId(appUserInfos.getUnionId()); //客户UnionId;注:此处存放unionId用于获取客户电子卡参数查询
  94. payOrderRequest.setCustomerName(appUserInfos.getBlogNickName()); //昵称
  95. payOrderRequest.setGroupId(stationInfos.getGroupId()); //集团ID
  96. payOrderRequest.setLabelFlag(stationInfos.getLabelFlag()); //油站是否开启标签功能
  97. payOrderRequest.setIsLngFlagGroup(stationInfos.getIsLngFlagGroup()); //该集团是否为LNG第三方平台商:0,否;1,是;
  98. payOrder.setConsumer(appUserInfos.getBlogNickName()); //昵称
  99. payOrder.setConsumerId(appUserInfos.getUserId()); //用户id
  100. Random random = new Random();
  101. String result = "";
  102. for (int i = 0; i < 6; i++) {
  103. result += random.nextInt(10);
  104. }
  105. String ordNo = System.nanoTime() + result;
  106. payOrder.setOrderNo(ordNo); //订单号
  107. logger.info("生成的订单号:" + ordNo);
  108. payOrder.setDiscountCouponAmt(payOrderRequest.getDiscountCouponAmt()); //优惠劵金额
  109. payOrder.setDiscountCoupon(payOrderRequest.getDiscountCoupon()); //优惠券
  110. payOrder.setCarNo(payOrderRequest.getCarNo()); //车牌号、
  111. payOrder.setCustomerGrade(payOrderRequest.getCustomerGrade()); //客户电话
  112. payOrder.setMemberNo(payOrderRequest.getMemberNo()); //会员卡号
  113. payOrder.setMemberAmt(payOrderRequest.getMemberAmt()); //会员支付金额
  114. payOrder.setScore(payOrderRequest.getScore()); //积分
  115. payOrder.setStationId(payOrderRequest.getStationId()); //油站id
  116. payOrder.setStatus("0"); //创建订单 未支付状态 0
  117. payOrder.setCreatedDate(new Timestamp(new Date().getTime())); //创建时间
  118. payOrder.setOrderType(payOrderRequest.getOrderType()); //订单类型
  119. payOrder.setOilGun(payOrderRequest.getOilGun()); //油枪号
  120. payOrder.setReceivableAmt(Double.valueOf(payOrderRequest.getReceivableAmt())); //订单应收金额
  121. String oilName = payOrderRequest.getOilName();
  122. //获取该油品所属哪一类
  123. Oil oil = new Oil();
  124. oil.setOilName(oilName);
  125. oil.setDictType("oil_name");
  126. Oil oilInfo = sysDictDataService.selectOilType(oil);
  127. payOrder.setOilType(oilInfo.getOilsType()); //油品类型
  128. String oilsType = oilInfo.getOilsType(); //获取订单类型
  129. logger.info("订单油品类型:" + oilsType);
  130. payOrderRequest.setCardOilsType(oilInfo.getOilsType()); //电子卡类型;注:用于获取客户电子卡参数查询
  131. payOrder.setOilName(oilName); //油品名称
  132. PayOrderResultInfo payOrderResultInfo = this.calculateAmt(payOrderRequest); //计算订单金额 价格 加油升数 等等
  133. if(oilsType.equals("3")){ //订单类型是油品时计算
  134. payOrder.setOrderType("2");
  135. payOrder.setAmt(Double.valueOf(payOrderRequest.getReceivableAmt())); //非油品金额
  136. payOrder.setDiscountAmt(Double.valueOf(0)); //优惠金额
  137. payOrder.setOilPirce(payOrderRequest.getReceivableAmt()); //非油品价格
  138. payOrder.setOrderLiters("0");
  139. resultMap.put("oilsCardFlag", "0");
  140. resultMap.put("discountAmt", "0"); //优惠价格
  141. resultMap.put("amt", payOrderRequest.getReceivableAmt()); //实收价格
  142. resultMap.put("receivableAmt", payOrderRequest.getReceivableAmt()); //应收价格
  143. resultMap.put("oilLiters", "0");
  144. resultMap.put("discountPrice", "0");
  145. resultMap.put("ordNo", ordNo);
  146. //logger.info("返回前端的结果:" +resultMap.toString());
  147. //payOrderMapper.insertSelective(payOrder);
  148. }else {
  149. //PayOrderResultInfo payOrderResultInfo = this.calculateAmt(payOrderRequest); //计算订单金额 价格 加油升数 等等
  150. payOrder.setOilPirce(payOrderResultInfo.getOilPrice());
  151. payOrder.setOrderLiters(payOrderResultInfo.getOilLiters());
  152. payOrder.setDiscountAmt(Double.valueOf(payOrderResultInfo.getDiscountAmt()));
  153. payOrder.setAmt(Double.valueOf(payOrderResultInfo.getAmt()));
  154. payOrder.setOrderType("1");
  155. resultMap.put("discountPrice", payOrderResultInfo.getDiscountPrice());
  156. if(payOrderResultInfo.getCardEnabledFlag() !=null && payOrderResultInfo.getCardEnabledFlag().equals("1")){
  157. payOrder.setDzkAmt(Double.valueOf(payOrderResultInfo.getDzkAmt()));
  158. //如果电子卡支付的金额与应收金额相同,则优惠价格有原有价格相同
  159. // if(new BigDecimal(payOrderRequest.getReceivableAmt()).compareTo(new BigDecimal(payOrderResultInfo.getDzkAmt())) ==0){
  160. // resultMap.put("discountPrice", payOrderResultInfo.getOilPrice());
  161. // }
  162. //payOrder.setDiscountAmt(Double.valueOf(payOrderResultInfo.getDzkDiscountAmt()));
  163. }
  164. resultMap.put("dzkDiscountPrice", payOrderResultInfo.getDzkDiscountPrice());
  165. resultMap.put("cardEnabledFlag", payOrderResultInfo.getCardEnabledFlag());
  166. resultMap.put("oilsCardFlag", payOrderResultInfo.getOilsCardFlag());
  167. resultMap.put("discountAmt", payOrderResultInfo.getDiscountAmt()); //优惠金额
  168. resultMap.put("amt", payOrderResultInfo.getAmt()); //实收价格
  169. if(payOrderRequest.getIsLngFlagGroup() !=null && payOrderRequest.getIsLngFlagGroup().equals("1")){
  170. payOrder.setSellAmt(Double.valueOf(payOrderResultInfo.getSellAmt()));
  171. payOrder.setSellDiscountAmt(Double.valueOf(payOrderResultInfo.getSellDiscountAmt()));
  172. payOrder.setSellOilPrice(Double.valueOf(payOrderResultInfo.getSellPrice()));
  173. payOrder.setDriverDiscountAmt(Double.valueOf(payOrderResultInfo.getDriverDiscountAmt()));
  174. resultMap.put("driverDiscountAmt", payOrderResultInfo.getDriverDiscountAmt());
  175. resultMap.put("sellDiscountAmt", payOrderResultInfo.getSellDiscountAmt());
  176. }
  177. payOrder.setDriverOilPrice(Double.valueOf(payOrderResultInfo.getDiscountPrice()));
  178. if(payOrderResultInfo.getCardEnabledFlag().equals("1")){
  179. payOrder.setDriverOilPrice(Double.valueOf(payOrderResultInfo.getDzkDiscountPrice()));
  180. }
  181. resultMap.put("receivableAmt", payOrderResultInfo.getReceivableAmt()); //应收价格
  182. resultMap.put("oilLiters", payOrderResultInfo.getOilLiters());
  183. resultMap.put("amt_dzk", payOrderResultInfo.getDzkAmt());
  184. resultMap.put("discountAmt_dzk", payOrderResultInfo.getDzkDiscountAmt()); //电子卡优惠金额
  185. resultMap.put("balance", payOrderResultInfo.getBalance()); //电子卡余额
  186. resultMap.put("cardOilsType", payOrderResultInfo.getCardOilsType()); //电子卡类型1.汽油; 2.柴油
  187. resultMap.put("ordNo", ordNo);
  188. logger.info("返回前端的结果:" +resultMap.toString());
  189. //payOrderMapper.insertSelective(payOrder);
  190. }
  191. //该油站是否开启优惠券功能
  192. if(stationInfos.getCouponEnabledFlag() == null){
  193. resultMap.put("couponEnabledFlag", "0");
  194. }else {
  195. resultMap.put("couponEnabledFlag", stationInfos.getCouponEnabledFlag());
  196. }
  197. //获取用户的优惠券
  198. if(stationInfos.getCouponEnabledFlag() !=null && stationInfos.getCouponEnabledFlag().equals("1")){
  199. Integer stationId = payOrderRequest.getStationId();
  200. //集团下
  201. if(stationInfos.getCouponFlag() !=null && stationInfos.getCouponFlag().equals("1")){
  202. stationId=stationInfos.getGroupId();
  203. }
  204. //设置了扫码后支付成功后的领取
  205. String couponIssueId = ""; //领取方式ID
  206. resultMap.put("couponIssueId", couponIssueId);
  207. List<CouponIssue> couponIssueList = this.getCouponIssue(stationId);
  208. if(couponIssueList !=null && couponIssueList.size()>0){
  209. BigDecimal discountThresholdAmt = couponIssueList.get(0).getDiscountThresholdAmt();
  210. if(discountThresholdAmt !=null && !(new BigDecimal(payOrderRequest.getReceivableAmt()).compareTo(discountThresholdAmt) == -1)){
  211. couponIssueId = couponIssueList.get(0).getCouponIssueId();
  212. if(StringUtils.isNotBlank(couponIssueId)){
  213. resultMap.put("couponIssueId", couponIssueId);
  214. }
  215. }
  216. }
  217. List<UserCoupon> userCouponsList = new ArrayList<>(); //用户的优惠券
  218. resultMap.put("userCouponsList", userCouponsList);
  219. //userCouponsList = this.getUserCoupon(appUserInfos.getUnionId(), stationId);
  220. userCouponsList = payOrderResultInfo.getUserCouponsList();
  221. if(userCouponsList !=null && userCouponsList.size()>0){
  222. resultMap.put("userCouponsList", userCouponsList);
  223. }
  224. }
  225. //根据油站和油枪获取加油员
  226. if (payOrderRequest.getPersonnelId() != null && payOrderRequest.getPersonnelId() != "" && !payOrderRequest.getPersonnelId().equals("undefined")) {
  227. //表示为一人一码:一个加油员一个码
  228. Map<String, Object> params = new HashMap<>();
  229. params.put("personnelId", payOrderRequest.getPersonnelId());
  230. params.put("stationId", payOrderRequest.getStationId());
  231. List<Map<String, Object>> list = stationOilGunService.selectOilGunByPersonalId(params);
  232. if (list != null && list.size() > 0) {
  233. if(list.get(0).containsKey("personnelName") && list.get(0).get("personnelName") !=null && list.get(0).get("personnelName").toString() !=""){
  234. payOrder.setOilPersonnel(list.get(0).get("personnelName").toString());
  235. payOrder.setOilPersonnelId(list.get(0).get("personnelId").toString());
  236. payOrderMapper.insertSelective(payOrder);
  237. resultData = ResultData.success(resultMap);
  238. }else {
  239. resultData = ResultData.error(CodeMsg.NO_PERSONNAL);
  240. }
  241. } else {
  242. resultData = ResultData.error(CodeMsg.NO_PERSONNAL);
  243. }
  244. } else {
  245. //resultData = ResultData.error(CodeMsg.NO_PERSONNAL);
  246. //根据油站和油枪获取加油员
  247. HashMap<String, Object> params = new HashMap<>();
  248. params.put("oliGunNo", payOrderRequest.getOilGun());
  249. params.put("stationId", payOrderRequest.getStationId());
  250. List<Map> mapResultList = payOrderMapper.selectPersonelName(params); //使用list原因:一个枪号对应多个加油员场景
  251. logger.info("加油员信息:"+ mapResultList.toString());
  252. if(mapResultList != null && mapResultList.size() > 0){
  253. String oilPersonnel = "";
  254. String oilPersonnelId ="";
  255. for (Map per : mapResultList){
  256. if(per.containsKey("personnelName") && per.get("personnelName").toString() !=null && per.get("personnelName").toString() !=""){
  257. oilPersonnel += per.get("personnelName").toString() +",";
  258. oilPersonnelId += per.get("personnelId").toString() +",";
  259. }
  260. }
  261. if(oilPersonnel !=""){
  262. payOrder.setOilPersonnel(oilPersonnel.substring(0, oilPersonnel.length()-1)); //加油员
  263. payOrder.setOilPersonnelId(oilPersonnelId.substring(0, oilPersonnelId.length()-1));
  264. }
  265. payOrderMapper.insertSelective(payOrder);
  266. logger.info("返回前端的结果:" +resultMap.toString());
  267. resultData = ResultData.success(resultMap);
  268. }else {
  269. resultData = ResultData.error(CodeMsg.NO_PERSONNAL);
  270. }
  271. }
  272. }else {
  273. //登录人验证失败
  274. resultData=ResultData.error(CodeMsg.USER_NOT_EXSIST);
  275. }
  276. }else {
  277. resultData = ResultData.error(CodeMsg.REQUEST_FAIL);
  278. }
  279. }else {
  280. resultData = ResultData.error(CodeMsg.REQUEST_FAIL);
  281. }
  282. return gson.toJson(resultData);
  283. }
  284. //根据营销方案计算订单金额
  285. public PayOrderResultInfo calculateAmt(PayOrderRequest payOrderRequest){
  286. PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
  287. Integer stationId = payOrderRequest.getStationId(); //油站ID
  288. BigDecimal receivableAmt = new BigDecimal(payOrderRequest.getReceivableAmt()); //应收金额 用户输入的金额
  289. String oilName = payOrderRequest.getOilName(); //油品名称
  290. String openId = payOrderRequest.getOpenId(); //用户的openId
  291. String userPhone = payOrderRequest.getCustomerPhone(); //用户手机号
  292. String customerName = payOrderRequest.getCustomerName(); //用户手机号
  293. Map<String, Object> map = new HashMap<>();
  294. map.put("oilName", oilName);
  295. map.put("stationId", stationId);
  296. //获取油站油品价格 优惠方案 是否开启电子卡
  297. Map<String, Object> result = stationService.selectStationOilPriceAndDiscountSetting(map);
  298. String oilPrice = result.get("oilPrice").toString(); //油站油品价格
  299. String discountSetting = result.get("discountSetting").toString(); //优惠方案
  300. String cardEnabledFlag = result.get("cardEnabledFlag").toString(); //是否开启电子卡
  301. String cardRuleFlag = result.get("cardRuleFlag").toString(); //是否共享电子卡储值规则
  302. String groupId = payOrderRequest.getGroupId().toString(); //集团ID
  303. Map<String ,Object> params = new HashMap<String, Object>();
  304. params.put("stationId", stationId);
  305. params.put("oilName", oilName);
  306. params.put("receivableAmt", receivableAmt);
  307. params.put("oilPrice", oilPrice);
  308. params.put("mobilePhone", payOrderRequest.getCustomerPhone());
  309. params.put("minaOpenid", openId);
  310. params.put("cardEnabledFlag", cardEnabledFlag);
  311. params.put("cardRuleFlag", cardRuleFlag);
  312. params.put("groupId", groupId);
  313. params.put("unionId", payOrderRequest.getUnionId());
  314. params.put("cardOilsType", payOrderRequest.getCardOilsType());
  315. params.put("customerName", customerName);
  316. params.put("userPhone", userPhone);
  317. params.put("integralRuleFlagGroup", payOrderRequest.getIntegralRuleFlagGroup()); // integralRuleFlagGroup; //集团积分规则是否共享
  318. params.put("integralFlagGroup", payOrderRequest.getIntegralFlagGroup()); // integralFlagGroup; //集团是否开启积分功能
  319. params.put("cardRuleFlagGroup", payOrderRequest.getCardRuleFlagGroup()); // cardRuleFlagGroup; //集团是否共享电子卡充值规则
  320. params.put("cardEnabledFlagGroup", payOrderRequest.getCardEnabledFlagGroup()); // cardEnabledFlagGroup; //集团是否开启电子卡
  321. if(payOrderRequest.getIsLngFlagGroup() !=null && payOrderRequest.getIsLngFlagGroup().equals("1")){
  322. // isLngFlagGroup 表示该集团是否为LNG平台加气:0,否;1,是;
  323. // settlementType:结算价类型(1.直降,2.折扣); settlementPrice:结算价; driverPrice:司机价;
  324. if(result.containsKey("settlementType") && result.get("settlementType") !=null && result.get("settlementType").toString() !=""){
  325. params.put("settlementType", result.get("settlementType").toString());
  326. }
  327. if(result.containsKey("settlementPrice") && result.get("settlementPrice") !=null && result.get("settlementPrice").toString() !=""){
  328. params.put("settlementPrice", result.get("settlementPrice").toString());
  329. }
  330. //driverPriceType 司机价类型(1.直降,2.折扣);
  331. if(result.containsKey("driverPriceType") && result.get("driverPriceType") !=null && result.get("driverPriceType").toString() !=""){
  332. params.put("driverPriceType", result.get("driverPriceType").toString());
  333. }
  334. if(result.containsKey("driverPrice") && result.get("driverPrice") !=null && result.get("driverPrice").toString() !=""){
  335. params.put("driverPrice", result.get("driverPrice").toString());
  336. }
  337. payOrderResultInfo = this.calculateLngGroupStaDiscount(params);
  338. }else {
  339. CustomerLabel customerLabel = new CustomerLabel();
  340. customerLabel.setPhone(payOrderRequest.getCustomerPhone());
  341. customerLabel.setStationId(payOrderRequest.getStationId());
  342. //扫码进标签优惠:一码一签
  343. if(StringUtils.isNoneBlank(payOrderRequest.getLabelId()) && !payOrderRequest.getLabelId().equals("undefined")){
  344. //如果前端传来labelId,则表示一码一签;
  345. logger.info("传入标签labelId: "+payOrderRequest.getLabelId());
  346. params.put("labelId", payOrderRequest.getLabelId());
  347. payOrderResultInfo = this.calculateLabelDiscount(params);
  348. //是否强制将该扫码用户拉入此标签:0、否;1、是;
  349. if(payOrderResultInfo.getIsAddLabel() !=null && payOrderResultInfo.getIsAddLabel().equals("1")){
  350. CustomerLabel customerLabel_info = labelService.getCustomerLabel(customerLabel);
  351. if(customerLabel_info !=null){
  352. customerLabel.setUpdateTime(new Date());
  353. customerLabel.setLabelId(payOrderRequest.getLabelId());
  354. labelService.updateCustomerLabel(customerLabel);
  355. }else {
  356. customerLabel.setCreateTime(new Date());
  357. customerLabel.setDelFlag("0");
  358. customerLabel.setLabelId(payOrderRequest.getLabelId());
  359. labelService.insertCustomerLabel(customerLabel);
  360. }
  361. }
  362. }else {
  363. /*
  364. * ***********************************************************************************************************************
  365. * 说明: payOrderResultInfo.setAllDiscountType (计算优惠券时所自定义的参数区别优惠方案): 1、表示等级优惠;2、表示营销优惠;3、标签优惠;
  366. * ***********************************************************************************************************************
  367. */
  368. //按照正常优惠计算
  369. CustomerLabel customerLabelInfo = labelService.getCustomerLabel(customerLabel); //获取该用户是否在标签组内
  370. if(payOrderRequest.getLabelFlag() !=null && payOrderRequest.getLabelFlag().equals("1") && customerLabelInfo !=null){
  371. //表示此用户为标签用户,计算标签用户优惠
  372. params.put("labelId", customerLabelInfo.getLabelId());
  373. payOrderResultInfo = this.calculateLabelDiscount(params);
  374. payOrderResultInfo.setOilName(params.get("oilName").toString());
  375. payOrderResultInfo.setUnionId(params.get("unionId").toString());
  376. payOrderResultInfo.setStationId(Integer.valueOf(params.get("stationId").toString()));
  377. payOrderResultInfo.setAllDiscountType("3");
  378. payOrderResultInfo.setUserCouponsList(this.getUserCouponAscList(payOrderResultInfo));
  379. }else {
  380. //不为标签用户时
  381. switch (discountSetting){
  382. case "0": //不执营销方案时 计算等级优惠
  383. payOrderResultInfo = this.calculateGradeDiscount(params);
  384. payOrderResultInfo.setOilName(params.get("oilName").toString());
  385. payOrderResultInfo.setUnionId(params.get("unionId").toString());
  386. payOrderResultInfo.setStationId(Integer.valueOf(params.get("stationId").toString()));
  387. payOrderResultInfo.setAllDiscountType("1");
  388. break;
  389. case "1": //满减方案
  390. payOrderResultInfo = this.calculateManJianDiscount(params);
  391. payOrderResultInfo.setOilName(params.get("oilName").toString());
  392. payOrderResultInfo.setUnionId(params.get("unionId").toString());
  393. payOrderResultInfo.setStationId(Integer.valueOf(params.get("stationId").toString()));
  394. payOrderResultInfo.setAllDiscountType("2");
  395. break;
  396. case "2": //立减方案
  397. payOrderResultInfo = this.calculateLiJianDiscount(params);
  398. payOrderResultInfo.setOilName(params.get("oilName").toString());
  399. payOrderResultInfo.setUnionId(params.get("unionId").toString());
  400. payOrderResultInfo.setStationId(Integer.valueOf(params.get("stationId").toString()));
  401. payOrderResultInfo.setAllDiscountType("2");
  402. break;
  403. case "3": //独立直降
  404. payOrderResultInfo = this.calculateZhiJiangDiscount(params);
  405. payOrderResultInfo.setOilName(params.get("oilName").toString());
  406. payOrderResultInfo.setUnionId(params.get("unionId").toString());
  407. payOrderResultInfo.setStationId(Integer.valueOf(params.get("stationId").toString()));
  408. payOrderResultInfo.setAllDiscountType("2");
  409. break;
  410. case "4": //计算阶梯直降
  411. payOrderResultInfo = this.calculateJieTiZhiJiangDiscount(params);
  412. payOrderResultInfo.setOilName(params.get("oilName").toString());
  413. payOrderResultInfo.setUnionId(params.get("unionId").toString());
  414. payOrderResultInfo.setStationId(Integer.valueOf(params.get("stationId").toString()));
  415. payOrderResultInfo.setAllDiscountType("2");
  416. break;
  417. }
  418. //优惠券计算
  419. payOrderResultInfo.setUserCouponsList(this.getUserCouponAscList(payOrderResultInfo));
  420. }
  421. }
  422. }
  423. return payOrderResultInfo;
  424. }
  425. //计算集团下站点LNG平台加气
  426. public PayOrderResultInfo calculateLngGroupStaDiscount(Map<String ,Object> params){
  427. PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
  428. BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString()); //油品价格
  429. BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString()); //应收金额
  430. BigDecimal oilLiters = new BigDecimal("0.0000"); //加油升数
  431. BigDecimal discountAmt = new BigDecimal(0); //油站销售价后优惠金额
  432. BigDecimal sellDiscountAmt = new BigDecimal(0); //油站销售价后优惠金额
  433. BigDecimal dzkDiscountAmt = new BigDecimal(0); //电子卡优惠金额
  434. BigDecimal amt = receivableAmt; //司机价后支付金额
  435. BigDecimal sellAmt = new BigDecimal(0); //油站结算价支付金额
  436. BigDecimal discountPrice = oilPrice; //司机销售价
  437. BigDecimal sellPrice = discountPrice; //油站销售价
  438. BigDecimal driverDiscountAmt = new BigDecimal("0"); //司机价优惠金额
  439. //加油升数
  440. oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_HALF_UP);
  441. // if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
  442. // oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_UP);
  443. // }
  444. // settlementType:结算价类型(1.直降,2.折扣); settlementPrice:结算价; driverPrice:司机价;
  445. if(params.containsKey("settlementType") && params.get("settlementType") !=null && params.get("settlementType").toString() !=""){
  446. String settlementType = params.get("settlementType").toString();
  447. switch (settlementType){
  448. case "1": //直降
  449. //优惠价(销售价)
  450. if(params.containsKey("settlementPrice") && params.get("settlementPrice").toString() !=null && params.get("settlementPrice").toString() !=""){
  451. sellPrice = oilPrice.subtract(new BigDecimal(params.get("settlementPrice").toString()));
  452. sellAmt = sellPrice.multiply(oilLiters); //优惠价实付金额
  453. sellDiscountAmt = receivableAmt.subtract(sellAmt);
  454. if(oilLiters.compareTo(new BigDecimal("1.00")) == -1){
  455. sellPrice = oilPrice;
  456. sellDiscountAmt = oilLiters.multiply(new BigDecimal(params.get("settlementPrice").toString()));
  457. sellAmt = receivableAmt.subtract(sellDiscountAmt);
  458. }
  459. }
  460. break;
  461. case "2": //折扣
  462. //优惠价(销售价)
  463. if(params.containsKey("settlementPrice") && params.get("settlementPrice").toString() !=null && params.get("settlementPrice").toString() !=""){
  464. sellPrice = oilPrice.multiply(new BigDecimal(params.get("settlementPrice").toString())).divide(new BigDecimal("100"));
  465. sellAmt =sellPrice.multiply(oilLiters);
  466. sellDiscountAmt = receivableAmt.subtract(sellAmt);
  467. //sellDiscountAmt = sellDiscountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  468. }
  469. break;
  470. }
  471. }
  472. //driverPriceType: 司机价类型(1.直降,2.折扣);
  473. if(params.containsKey("driverPriceType") && params.get("driverPriceType") !=null && params.get("driverPriceType").toString() !=""){
  474. String driverPriceType = params.get("driverPriceType").toString();
  475. switch (driverPriceType){
  476. case "1":
  477. if(params.containsKey("driverPrice") && params.get("driverPrice").toString() !=null && params.get("driverPrice").toString() !=""){
  478. //司机价
  479. discountPrice = sellPrice.subtract(new BigDecimal(params.get("driverPrice").toString()));
  480. amt = discountPrice.multiply(oilLiters);
  481. discountAmt = receivableAmt.subtract(amt);
  482. if(oilLiters.compareTo(new BigDecimal("1.00")) == -1){
  483. discountPrice = sellPrice;
  484. discountAmt = oilLiters.multiply(new BigDecimal(params.get("driverPrice").toString()));
  485. amt = receivableAmt.subtract(discountAmt);
  486. }
  487. driverDiscountAmt = discountAmt.subtract(sellDiscountAmt);
  488. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  489. discountPrice = discountPrice.setScale(2, BigDecimal.ROUND_HALF_UP);
  490. }
  491. break;
  492. case "2": //折扣
  493. if(params.containsKey("driverPrice") && params.get("driverPrice").toString() !=null && params.get("driverPrice").toString() !=""){
  494. //司机价
  495. discountPrice = sellPrice.multiply(new BigDecimal(params.get("driverPrice").toString())).divide(new BigDecimal("100"));
  496. amt = sellAmt.multiply(new BigDecimal(params.get("driverPrice").toString())).divide(new BigDecimal("100"));
  497. discountAmt = receivableAmt.subtract(amt);
  498. driverDiscountAmt = discountAmt.subtract(sellDiscountAmt);
  499. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  500. discountPrice = discountPrice.setScale(2, BigDecimal.ROUND_HALF_UP);
  501. }
  502. break;
  503. }
  504. }
  505. sellAmt =sellAmt.signum() == -1 ? new BigDecimal("0.01"): sellAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  506. amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt.setScale(2, BigDecimal.ROUND_HALF_UP);
  507. if(oilLiters.toString().equals("0.00")){
  508. amt = new BigDecimal("0.01");
  509. sellAmt = new BigDecimal("0.01");
  510. driverDiscountAmt = new BigDecimal("0.00");
  511. discountAmt = new BigDecimal("0.00");
  512. sellDiscountAmt = new BigDecimal("0.00");
  513. }
  514. payOrderResultInfo.setReceivableAmt(receivableAmt.toString()); //应收金额
  515. //oilLiters = oilLiters.setScale(2,BigDecimal.ROUND_HALF_UP);
  516. payOrderResultInfo.setOilLiters(oilLiters.toString()); //加油升数
  517. payOrderResultInfo.setOilPrice(oilPrice.toString()); //油机价
  518. payOrderResultInfo.setAmt(amt.toString()); //司机价后时候金额
  519. payOrderResultInfo.setDiscountPrice(discountPrice.toString()); //司机价
  520. payOrderResultInfo.setDiscountAmt(discountAmt.toString()); //司机价后优惠总金额
  521. driverDiscountAmt = driverDiscountAmt.setScale(2,BigDecimal.ROUND_HALF_UP);
  522. payOrderResultInfo.setDriverDiscountAmt(driverDiscountAmt.toString()); //司机价后优惠金额
  523. payOrderResultInfo.setSellAmt(sellAmt.toString()); //销售价后支付金额
  524. sellPrice = sellPrice.setScale(2, BigDecimal.ROUND_HALF_UP); //销售价
  525. payOrderResultInfo.setSellPrice(sellPrice.toString()); //销售价
  526. sellDiscountAmt = sellDiscountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  527. payOrderResultInfo.setSellDiscountAmt(sellDiscountAmt.toString()); //销售价后优惠金额
  528. //LNG加气平台没有电子卡功能:此下参数无用用作填充参数值 0:代表否;4:代表LNG油品
  529. payOrderResultInfo.setDzkAmt(amt.toString()); //电子卡支付金额
  530. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmt.toString()); //电子卡优惠金额
  531. payOrderResultInfo.setBalance("0");
  532. String oilName = params.get("oilName").toString();
  533. // Oil oil = new Oil();
  534. // oil.setDictType("oil_name");
  535. // oil.setOilName(oilName);
  536. // Oil oilInfo = sysDictDataService.selectOilType(oil);
  537. //params.put("cardOilsType", payOrderRequest.getCardOilsType());
  538. String cardOilsType = params.get("cardOilsType").toString();
  539. payOrderResultInfo.setCardOilsType(cardOilsType);
  540. payOrderResultInfo.setOilsCardFlag("0");
  541. payOrderResultInfo.setCardEnabledFlag("0");
  542. return payOrderResultInfo;
  543. }
  544. //计算标签用户优惠
  545. public PayOrderResultInfo calculateLabelDiscount(Map<String ,Object> params){
  546. BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString()); //油品价格
  547. BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString()); //应收金额
  548. BigDecimal oilLiters = new BigDecimal("0.0000"); //加油升数
  549. BigDecimal discountAmt = new BigDecimal(0); //标签方案优惠金额
  550. BigDecimal dzkDiscountAmt = new BigDecimal(0); //电子卡优惠金额
  551. BigDecimal amt = receivableAmt;
  552. BigDecimal discountPrice = oilPrice;
  553. //加油升数
  554. oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_HALF_UP);
  555. // if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("0000")){
  556. // oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_UP);
  557. // }
  558. PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
  559. //获取该油站的标签规则
  560. LabelRule labelRule = new LabelRule();
  561. labelRule.setStationId(Integer.valueOf(params.get("stationId").toString())); //油站ID
  562. //labelRule.setOilName(params.get("oilName").toString()); //oilName
  563. labelRule.setDelFlag("0");
  564. labelRule.setLabelId(Integer.valueOf(params.get("labelId").toString()));//
  565. List<LabelRule> labelRuleList = labelService.getLabelRuleList(labelRule);
  566. if(labelRuleList !=null && labelRuleList.size()> 0){
  567. payOrderResultInfo.setIsAddLabel(labelRuleList.get(0).getIsAddLabel()); //'是否强制将该扫码用户拉入此标签:0、否;1、是
  568. payOrderResultInfo.setLabelCreateBy(labelRuleList.get(0).getCreateBy()); //标签创建人
  569. payOrderResultInfo.setLabelUpdateBy(labelRuleList.get(0).getUpdateBy()); //标签更新人
  570. payOrderResultInfo.setLabelCreateTime(labelRuleList.get(0).getCreateTime()); //标签创建时间
  571. //获取该油品的优惠明细
  572. labelRule.setOilName(params.get("oilName").toString());
  573. labelRule.setDelFlagDetail("0");
  574. List<LabelRule> labelRuleList_oilName = labelService.getLabelRuleList(labelRule);
  575. if(labelRuleList_oilName !=null && labelRuleList_oilName.size() >0){
  576. List<LabelRuleDetail> labelRuleDetailList = labelRuleList_oilName.get(0).getLabelRuleDetailList();
  577. if(labelRuleDetailList !=null && labelRuleDetailList.size() ==1){
  578. BigDecimal discountAmt_B = new BigDecimal(labelRuleDetailList.get(0).getDiscountAmt()); //满足享受优惠条件(满多少升、满多少元)
  579. String discountTerm = labelRuleDetailList.get(0).getDiscountTerm();
  580. switch (discountTerm){
  581. case "1": //按加油升数
  582. if(oilLiters.compareTo(discountAmt_B) ==1 || oilLiters.compareTo(discountAmt_B) ==0 ){
  583. discountPrice = oilPrice.subtract(new BigDecimal(labelRuleDetailList.get(0).getDiscountLitersAmt()));
  584. if(oilPrice.compareTo(discountPrice) == 0){
  585. amt = receivableAmt;
  586. discountAmt = new BigDecimal("0.00");
  587. }else {
  588. amt = discountPrice.multiply(oilLiters);
  589. discountAmt = receivableAmt.subtract(amt);
  590. }
  591. //discountAmt = oilLiters.multiply(new BigDecimal(labelRuleDetailList.get(0).getDiscountLitersAmt()));
  592. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  593. }
  594. break;
  595. case "2": //按加油金额
  596. if(receivableAmt.compareTo(discountAmt_B) ==1 || receivableAmt.compareTo(discountAmt_B) ==0 ){
  597. discountPrice = oilPrice.subtract(new BigDecimal(labelRuleDetailList.get(0).getDiscountLitersAmt()));
  598. if(oilPrice.compareTo(discountPrice) == 0){
  599. amt = receivableAmt;
  600. discountAmt = new BigDecimal("0.00");
  601. }else {
  602. amt = discountPrice.multiply(oilLiters);
  603. discountAmt = receivableAmt.subtract(amt);
  604. }
  605. //discountAmt = oilLiters.multiply(new BigDecimal(labelRuleDetailList.get(0).getDiscountLitersAmt()));
  606. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  607. }
  608. break;
  609. }
  610. dzkDiscountAmt = discountAmt; //赋值电子卡优惠金额
  611. }
  612. }
  613. }
  614. //amt = receivableAmt.subtract(discountAmt); //应收金额
  615. amt = amt.setScale(2, BigDecimal.ROUND_HALF_UP);
  616. if(amt.toString().equals("0.00")){
  617. amt = new BigDecimal("0.01");
  618. }
  619. amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
  620. //discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP); //优惠价格
  621. payOrderResultInfo.setAmt(amt.toString());
  622. payOrderResultInfo.setDiscountPrice(discountPrice.toString());
  623. payOrderResultInfo.setDiscountAmt(discountAmt.toString());
  624. payOrderResultInfo.setDiscountPrice(discountPrice.toString());
  625. payOrderResultInfo.setOilLiters(oilLiters.toString());
  626. payOrderResultInfo.setReceivableAmt(receivableAmt.toString());
  627. payOrderResultInfo.setOilPrice(oilPrice.toString());
  628. payOrderResultInfo.setDzkAmt(amt.toString());
  629. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmt.toString());
  630. payOrderResultInfo.setOilsCardFlag("0");
  631. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  632. //表示开启共享
  633. if(params.get("cardEnabledFlagGroup").toString().equals("1")){ //表示开启电子卡功能
  634. payOrderResultInfo.setCardEnabledFlag("1");
  635. }else {
  636. payOrderResultInfo.setCardEnabledFlag("0");
  637. }
  638. }else {
  639. //不共享,则查看油站电子卡是否开启
  640. if(params.get("cardEnabledFlag").toString().equals("1")){
  641. payOrderResultInfo.setCardEnabledFlag("1");
  642. }else {
  643. payOrderResultInfo.setCardEnabledFlag("0");
  644. }
  645. }
  646. logger.info("油站是否开启电子会员卡功能: " +params.get("cardEnabledFlag").toString());
  647. if(payOrderResultInfo.getCardEnabledFlag().equals("1")){
  648. CustomerCardSetting customerCardSetting = new CustomerCardSetting();
  649. customerCardSetting.setStationId(Integer.valueOf(params.get("stationId").toString()));
  650. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  651. customerCardSetting.setStationId(Integer.valueOf(params.get("groupId").toString()));
  652. }
  653. List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
  654. if(cardRechargeSettingList !=null && cardRechargeSettingList.size() >0){
  655. String isLabel = cardRechargeSettingList.get(0).getIsLabel(); //标签用户支付时是否享受标签优惠
  656. if(isLabel.equals("1")){
  657. //电子卡支付金额 = 应收金额 - 标签优惠金额
  658. BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt);
  659. dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
  660. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt; //如果为负数,则默认设置0.01元
  661. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  662. BigDecimal dzkDiscountAmtSum = dzkDiscountAmt; //电子卡总优惠金额
  663. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmtSum.toString());
  664. }else {
  665. payOrderResultInfo.setDzkAmt(receivableAmt.toString());
  666. payOrderResultInfo.setDzkDiscountAmt("0");
  667. }
  668. }
  669. CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
  670. customerElectronicCard.setStationId(Integer.valueOf(params.get("stationId").toString()));
  671. customerElectronicCard.setCardOilsType(params.get("cardOilsType").toString());
  672. customerElectronicCard.setUnionId(params.get("unionId").toString());
  673. customerElectronicCard.setMobilePhone(params.get("userPhone").toString());
  674. customerElectronicCard.setCustomerName(params.get("customerName").toString());
  675. //查询客户余额和卡的类型
  676. Map<String, String> map = this.selectCardBalance(customerElectronicCard, params);
  677. payOrderResultInfo.setBalance(map.get("balance"));
  678. payOrderResultInfo.setOilsCardFlag(map.get("oilsCardFlag"));
  679. payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
  680. payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
  681. if(oilLiters.toString().equals("0.0000")){
  682. payOrderResultInfo.setDzkAmt("0.01");
  683. payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
  684. }else {
  685. String dzkAmt = payOrderResultInfo.getDzkAmt();
  686. //如果电子卡的支付金额与微信支付金额相同
  687. if(amt.compareTo(new BigDecimal(dzkAmt)) == 0){
  688. payOrderResultInfo.setDzkDiscountPrice(discountPrice.toString());
  689. }else{
  690. //此处重新计算油升数原因:电子卡在计算支付0.01时优惠价格时,如果保留小数位数过低则会出现误差;
  691. BigDecimal oilLiters_dzk = receivableAmt.divide(oilPrice,7, BigDecimal.ROUND_HALF_UP);
  692. BigDecimal dzkDiscountPrice = oilLiters_dzk.toString().equals("0.0000000") ? oilPrice: new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
  693. //BigDecimal dzkDiscountPrice = new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
  694. dzkDiscountPrice = dzkDiscountPrice.compareTo(oilPrice) == 1 ? oilPrice : dzkDiscountPrice;
  695. payOrderResultInfo.setDzkDiscountPrice(dzkDiscountPrice.toString());
  696. }
  697. }
  698. }
  699. return payOrderResultInfo;
  700. }
  701. //计算阶梯直降
  702. public PayOrderResultInfo calculateJieTiZhiJiangDiscount(Map<String ,Object> params){
  703. PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo(); //计算结果存放值
  704. BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString()); //油品价格
  705. BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString()); //应收金额
  706. BigDecimal oilLiters = new BigDecimal("0.0000"); //加油升数
  707. BigDecimal discountAmt = new BigDecimal(0); //营销方案优惠金额
  708. BigDecimal amt = receivableAmt;
  709. BigDecimal discountPrice = oilPrice;
  710. BigDecimal gradeDiscountAmt = new BigDecimal(0); //等级优惠金额
  711. BigDecimal gradeDiscountPriceAmt = new BigDecimal(0); //等级优惠价格
  712. BigDecimal dzkGradeDiscountAmt = new BigDecimal(0); //计算电子卡金额时所需等级优惠金额值
  713. BigDecimal dzkDiscountAmt = new BigDecimal(0); //计算电子卡金额时所需营销优惠金额值
  714. //加油升数
  715. oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_HALF_UP);
  716. // if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("0000")){
  717. // oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_UP);
  718. // }
  719. //计算等级优惠
  720. PayOrderResultInfo payOrderResultInfoGrade = this.calculateGradeDiscount(params);
  721. gradeDiscountAmt = new BigDecimal(payOrderResultInfoGrade.getDiscountAmt());
  722. gradeDiscountPriceAmt = new BigDecimal(payOrderResultInfoGrade.getGradeDiscountPriceAmt());
  723. dzkGradeDiscountAmt = gradeDiscountAmt; //同时给电子卡赋值等级优惠金额
  724. params.put("discountPlanType", "4");
  725. List<Map> customerMarkertPlanList = customerGradeServices.getCustomerMarkertPlanList(params);
  726. if(customerMarkertPlanList !=null && customerMarkertPlanList.size() >0){
  727. for(Map m : customerMarkertPlanList){
  728. BigDecimal discountAmt_b = new BigDecimal(m.get("discountAmt").toString()); //条件金额
  729. BigDecimal gasoilDiscountAmt_b = new BigDecimal(m.get("gasoilDiscountAmt").toString());
  730. String discountTerm = m.get("discountTerm").toString();
  731. if(discountTerm.equals("1")){
  732. if(oilLiters.compareTo(discountAmt_b) ==1 || oilLiters.compareTo(discountAmt_b) ==0){
  733. discountPrice = oilPrice.subtract(gasoilDiscountAmt_b);
  734. if(discountPrice.compareTo(oilPrice) ==0){
  735. amt = receivableAmt;
  736. discountAmt = new BigDecimal("0.00");
  737. }else {
  738. amt = discountPrice.multiply(oilLiters);
  739. discountAmt = receivableAmt.subtract(amt);
  740. //discountAmt = oilLiters.multiply(gasoilDiscountAmt_b);
  741. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  742. }
  743. dzkDiscountAmt = discountAmt; //赋值电子卡优惠金额
  744. String vipDiscountyPlus = m.get("vipDiscountyPlus").toString();
  745. //该营销方案是否叠加等级优惠
  746. if(vipDiscountyPlus.equals("1")){
  747. //如果叠加等级优惠
  748. discountPrice = discountPrice.subtract(gradeDiscountPriceAmt);
  749. discountAmt = discountAmt.add(gradeDiscountAmt);
  750. amt = receivableAmt.subtract(discountAmt);
  751. }
  752. break;
  753. }
  754. }else if(discountTerm.equals("2")){
  755. if(receivableAmt.compareTo(discountAmt_b) ==1 || receivableAmt.compareTo(discountAmt_b) ==0){
  756. discountPrice = oilPrice.subtract(gasoilDiscountAmt_b);
  757. if(discountPrice.compareTo(oilPrice) == 0){
  758. amt = receivableAmt;
  759. discountAmt = new BigDecimal("0.00");
  760. }else {
  761. amt = discountPrice.multiply(oilLiters);
  762. discountAmt = receivableAmt.subtract(amt);
  763. //discountAmt = oilLiters.multiply(gasoilDiscountAmt_b);
  764. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  765. }
  766. dzkDiscountAmt = discountAmt; //赋值电子卡优惠金额
  767. String vipDiscountyPlus = m.get("vipDiscountyPlus").toString();
  768. //该营销方案是否叠加等级优惠
  769. if(vipDiscountyPlus.equals("1")){
  770. //如果叠加等级优惠
  771. discountPrice = discountPrice.subtract(gradeDiscountPriceAmt);
  772. discountAmt = discountAmt.add(gradeDiscountAmt);
  773. amt = receivableAmt.subtract(discountAmt);
  774. }
  775. break;
  776. }
  777. }
  778. }
  779. }
  780. //amt = receivableAmt.subtract(discountAmt); //应收金额
  781. amt = amt.setScale(2, BigDecimal.ROUND_HALF_UP);
  782. if(amt.toString().equals("0.00")){
  783. amt = new BigDecimal("0.01");
  784. }
  785. amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
  786. //discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP); //优惠价格
  787. payOrderResultInfo.setAmt(amt.toString());
  788. payOrderResultInfo.setDiscountAmt(discountAmt.toString());
  789. payOrderResultInfo.setDzkDiscountAmt(discountAmt.toString());
  790. payOrderResultInfo.setDiscountPrice(discountPrice.toString());
  791. payOrderResultInfo.setOilLiters(oilLiters.toString());
  792. payOrderResultInfo.setReceivableAmt(receivableAmt.toString());
  793. payOrderResultInfo.setOilPrice(oilPrice.toString());
  794. payOrderResultInfo.setDzkAmt(amt.toString());
  795. payOrderResultInfo.setOilsCardFlag("0");
  796. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  797. //表示开启共享
  798. if(params.get("cardEnabledFlagGroup").toString().equals("1")){ //表示开启电子卡功能
  799. payOrderResultInfo.setCardEnabledFlag("1");
  800. }else {
  801. payOrderResultInfo.setCardEnabledFlag("0");
  802. }
  803. }else {
  804. //不共享,则查看油站电子卡是否开启
  805. if(params.get("cardEnabledFlag").toString().equals("1")){
  806. payOrderResultInfo.setCardEnabledFlag("1");
  807. }else {
  808. payOrderResultInfo.setCardEnabledFlag("0");
  809. }
  810. }
  811. logger.info("油站是否开启电子会员卡功能: " +params.get("cardEnabledFlag").toString());
  812. if(payOrderResultInfo.getCardEnabledFlag().equals("1")){
  813. CustomerCardSetting customerCardSetting = new CustomerCardSetting();
  814. customerCardSetting.setStationId(Integer.valueOf(params.get("stationId").toString()));
  815. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  816. customerCardSetting.setStationId(Integer.valueOf(params.get("groupId").toString()));
  817. }
  818. List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
  819. if(cardRechargeSettingList !=null && cardRechargeSettingList.size() >0){
  820. String isGradeSetting = cardRechargeSettingList.get(0).getIsGradeSetting(); //是否叠加等级方案
  821. String isMarket = cardRechargeSettingList.get(0).getIsMarket(); //等候否叠加营销方案
  822. if(isMarket.equals("1")){
  823. if(isGradeSetting.equals("1")){
  824. BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt).subtract(dzkGradeDiscountAmt);
  825. dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
  826. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  827. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  828. BigDecimal dzkDiscountAmtSum = dzkDiscountAmt.add(dzkGradeDiscountAmt); //电子卡优惠金额
  829. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmtSum.toString());
  830. }else {
  831. //如果电子卡设置执行营销方案不执行等级优惠 则 电子卡支付金额 =实收金额-营销优惠金额
  832. BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt);
  833. dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
  834. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  835. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  836. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmt.toString());
  837. }
  838. }else {
  839. if(isGradeSetting.equals("1")){
  840. //如果电子卡设置不执行营销方案执行等级优惠 则 电子卡支付金额 =应收金额-等级优惠金额
  841. BigDecimal dzkAmt = receivableAmt.subtract(dzkGradeDiscountAmt);
  842. dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
  843. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  844. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  845. payOrderResultInfo.setDzkDiscountAmt(dzkGradeDiscountAmt.toString());
  846. }else {
  847. payOrderResultInfo.setDzkAmt(receivableAmt.toString());
  848. payOrderResultInfo.setDzkDiscountAmt("0");
  849. }
  850. }
  851. }
  852. CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
  853. customerElectronicCard.setStationId(Integer.valueOf(params.get("stationId").toString()));
  854. customerElectronicCard.setCardOilsType(params.get("cardOilsType").toString());
  855. customerElectronicCard.setUnionId(params.get("unionId").toString());
  856. customerElectronicCard.setMobilePhone(params.get("userPhone").toString());
  857. customerElectronicCard.setCustomerName(params.get("customerName").toString());
  858. //查询客户余额和卡的类型
  859. Map<String, String> map = this.selectCardBalance(customerElectronicCard, params);
  860. payOrderResultInfo.setBalance(map.get("balance"));
  861. payOrderResultInfo.setOilsCardFlag(map.get("oilsCardFlag"));
  862. payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
  863. payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
  864. String dzkAmt = payOrderResultInfo.getDzkAmt();
  865. if(oilLiters.toString().equals("0.0000")){
  866. payOrderResultInfo.setDzkAmt("0.01");
  867. payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
  868. }else {
  869. //如果电子卡的支付金额与微信支付金额相同
  870. if(amt.compareTo(new BigDecimal(dzkAmt)) == 0){
  871. payOrderResultInfo.setDzkDiscountPrice(discountPrice.toString());
  872. }else{
  873. //此处重新计算油升数原因:电子卡在计算支付0.01时优惠价格时,如果保留小数位数过低则会出现误差;
  874. BigDecimal oilLiters_dzk = receivableAmt.divide(oilPrice,7, BigDecimal.ROUND_HALF_UP);
  875. BigDecimal dzkDiscountPrice = oilLiters_dzk.toString().equals("0.0000000") ? oilPrice: new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
  876. //BigDecimal dzkDiscountPrice = new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
  877. payOrderResultInfo.setDzkDiscountPrice(dzkDiscountPrice.toString());
  878. }
  879. }
  880. }
  881. return payOrderResultInfo;
  882. }
  883. //计算独立直降
  884. public PayOrderResultInfo calculateZhiJiangDiscount(Map<String ,Object> params){
  885. BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString()); //油品价格
  886. BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString()); //应收金额
  887. BigDecimal oilLiters = new BigDecimal("0.0000"); //加油升数
  888. BigDecimal discountAmt = new BigDecimal(0); //营销方案优惠金额
  889. BigDecimal amt = receivableAmt;
  890. BigDecimal discountPrice = oilPrice;
  891. BigDecimal gradeDiscountAmt = new BigDecimal(0); //等级优惠金额
  892. BigDecimal gradeDiscountPriceAmt = new BigDecimal("0");
  893. BigDecimal dzkGradeDiscountAmt = new BigDecimal(0); //计算电子卡金额时所需等级优惠金额值
  894. BigDecimal dzkDiscountAmt = new BigDecimal(0); //计算电子卡金额时所需营销优惠金额值
  895. //加油升数
  896. oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_HALF_UP);
  897. // if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("0000")){
  898. // oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_UP);
  899. // }
  900. PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo(); //计算结果存放值
  901. //计算等级优惠
  902. PayOrderResultInfo payOrderResultInfoGrade = this.calculateGradeDiscount(params);
  903. gradeDiscountAmt = new BigDecimal(payOrderResultInfoGrade.getDiscountAmt());
  904. gradeDiscountPriceAmt = new BigDecimal(payOrderResultInfoGrade.getGradeDiscountPriceAmt());
  905. dzkGradeDiscountAmt = gradeDiscountAmt; //同时给电子卡赋值等级优惠金额
  906. params.put("discountPlanType", "3");
  907. List<Map> customerMarkertPlanList = customerGradeServices.getCustomerMarkertPlanList(params);
  908. if(customerMarkertPlanList !=null && customerMarkertPlanList.size() >0){
  909. BigDecimal discountAmt_b = new BigDecimal(customerMarkertPlanList.get(0).get("discountAmt").toString()); //条件金额
  910. BigDecimal gasoilDiscountAmt_b = new BigDecimal(customerMarkertPlanList.get(0).get("gasoilDiscountAmt").toString());
  911. String discountTerm = customerMarkertPlanList.get(0).get("discountTerm").toString();
  912. String discountSettingFlag;
  913. switch (discountTerm){
  914. case "1": //按加油升数
  915. if(oilLiters.compareTo(discountAmt_b) ==1 || oilLiters.compareTo(discountAmt_b) ==0){
  916. discountPrice = oilPrice.subtract(gasoilDiscountAmt_b);
  917. if(discountPrice.compareTo(oilPrice) ==0){
  918. amt = receivableAmt;
  919. discountAmt = new BigDecimal("0.00");
  920. }else {
  921. amt = discountPrice.multiply(oilLiters);
  922. discountAmt = receivableAmt.subtract(amt);
  923. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  924. }
  925. //会员活动是否开启:1是;0否'
  926. if(customerMarkertPlanList.get(0).containsKey("discountSettingFlag") && customerMarkertPlanList.get(0).get("discountSettingFlag").toString() !="") {
  927. discountSettingFlag = customerMarkertPlanList.get(0).get("discountSettingFlag").toString();
  928. if (discountSettingFlag != null && discountSettingFlag.equals("1")) {
  929. String discountType = customerMarkertPlanList.get(0).get("discountType").toString(); //会员日周期类型设置
  930. String discountDate = customerMarkertPlanList.get(0).get("discountDate").toString(); //按固定日期
  931. String discountActivityAmt = customerMarkertPlanList.get(0).get("discountActivityAmt").toString(); //会员日优惠金额
  932. if (StringUtils.isNotBlank(discountType) && StringUtils.isNotBlank(discountDate) && StringUtils.isNotBlank(discountActivityAmt)) {
  933. //当前时间是否是活动会员日
  934. boolean b = isActivityDay(discountType, discountDate);
  935. if (b) {
  936. discountPrice = oilPrice.subtract(new BigDecimal(discountActivityAmt));
  937. if(discountPrice.compareTo(oilPrice) == 0){
  938. amt = amt;
  939. discountAmt = discountAmt;
  940. }else {
  941. amt = discountPrice.multiply(oilLiters);
  942. discountAmt = receivableAmt.subtract(amt);
  943. //discountAmt = oilLiters.multiply(new BigDecimal(discountActivityAmt));
  944. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  945. }
  946. }
  947. }
  948. }
  949. }
  950. }
  951. break;
  952. case "2": //按加油金额
  953. if(receivableAmt.compareTo(discountAmt_b) ==1 || receivableAmt.compareTo(discountAmt_b) ==0){
  954. discountPrice = oilPrice.subtract(gasoilDiscountAmt_b);
  955. if(discountPrice.compareTo(oilPrice) == 0){
  956. amt = receivableAmt;
  957. discountAmt = new BigDecimal("0.00");
  958. }else {
  959. amt = discountPrice.multiply(oilLiters);
  960. discountAmt = receivableAmt.subtract(amt);
  961. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  962. }
  963. //会员活动是否开启:1是;0否'
  964. if(customerMarkertPlanList.get(0).containsKey("discountSettingFlag") && customerMarkertPlanList.get(0).get("discountSettingFlag").toString() !="") {
  965. discountSettingFlag = customerMarkertPlanList.get(0).get("discountSettingFlag").toString();
  966. if (discountSettingFlag != null && discountSettingFlag.equals("1")) {
  967. String discountType = customerMarkertPlanList.get(0).get("discountType").toString(); //会员日周期类型设置
  968. String discountDate = customerMarkertPlanList.get(0).get("discountDate").toString(); //按固定日期
  969. String discountActivityAmt = customerMarkertPlanList.get(0).get("discountActivityAmt").toString(); //会员日优惠金额
  970. if (StringUtils.isNotBlank(discountType) && StringUtils.isNotBlank(discountDate) && StringUtils.isNotBlank(discountActivityAmt)) {
  971. //当前时间是否是活动会员日
  972. boolean b = isActivityDay(discountType, discountDate);
  973. if (b) {
  974. discountPrice = oilPrice.subtract(new BigDecimal(discountActivityAmt));
  975. if(discountPrice.compareTo(oilPrice) == 0){
  976. amt = amt;
  977. discountAmt = discountAmt;
  978. }else {
  979. amt = discountPrice.multiply(oilLiters);
  980. discountAmt = receivableAmt.subtract(amt);
  981. //discountAmt = oilLiters.multiply(new BigDecimal(discountActivityAmt));
  982. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  983. }
  984. }
  985. }
  986. }
  987. }
  988. }
  989. break;
  990. }
  991. dzkDiscountAmt = discountAmt; //赋值电子卡优惠金额
  992. String vipDiscountyPlus = customerMarkertPlanList.get(0).get("vipDiscountyPlus").toString();
  993. //该营销方案是否叠加等级优惠
  994. if(vipDiscountyPlus.equals("1")){
  995. //如果叠加等级优惠
  996. discountPrice = discountPrice.subtract(gradeDiscountPriceAmt);
  997. discountAmt = discountAmt.add(gradeDiscountAmt);
  998. amt = receivableAmt.subtract(discountAmt);
  999. }
  1000. }
  1001. // amt = receivableAmt.subtract(discountAmt); //应收金额
  1002. amt = amt.setScale(2, BigDecimal.ROUND_HALF_UP);
  1003. if(amt.toString().equals("0.00")){
  1004. amt = new BigDecimal("0.01");
  1005. }
  1006. amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
  1007. //discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP); //优惠价格
  1008. payOrderResultInfo.setAmt(amt.toString());
  1009. payOrderResultInfo.setDiscountAmt(discountAmt.toString());
  1010. payOrderResultInfo.setDzkDiscountAmt(discountAmt.toString());
  1011. payOrderResultInfo.setDiscountPrice(discountPrice.toString());
  1012. payOrderResultInfo.setOilLiters(oilLiters.toString());
  1013. payOrderResultInfo.setReceivableAmt(receivableAmt.toString());
  1014. payOrderResultInfo.setOilPrice(oilPrice.toString());
  1015. payOrderResultInfo.setDzkAmt(amt.toString());
  1016. payOrderResultInfo.setOilsCardFlag("0");
  1017. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  1018. //表示开启共享
  1019. if(params.get("cardEnabledFlagGroup").toString().equals("1")){ //表示开启电子卡功能
  1020. payOrderResultInfo.setCardEnabledFlag("1");
  1021. }else {
  1022. payOrderResultInfo.setCardEnabledFlag("0");
  1023. }
  1024. }else {
  1025. //不共享,则查看油站电子卡是否开启
  1026. if(params.get("cardEnabledFlag").toString().equals("1")){
  1027. payOrderResultInfo.setCardEnabledFlag("1");
  1028. }else {
  1029. payOrderResultInfo.setCardEnabledFlag("0");
  1030. }
  1031. }
  1032. logger.info("油站是否开启电子会员卡功能: " +params.get("cardEnabledFlag").toString());
  1033. if(payOrderResultInfo.getCardEnabledFlag().equals("1")){
  1034. CustomerCardSetting customerCardSetting = new CustomerCardSetting();
  1035. customerCardSetting.setStationId(Integer.valueOf(params.get("stationId").toString()));
  1036. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  1037. customerCardSetting.setStationId(Integer.valueOf(params.get("groupId").toString()));
  1038. }
  1039. List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
  1040. if(cardRechargeSettingList !=null && cardRechargeSettingList.size() >0){
  1041. String isGradeSetting = cardRechargeSettingList.get(0).getIsGradeSetting(); //是否叠加等级方案
  1042. String isMarket = cardRechargeSettingList.get(0).getIsMarket(); //等候否叠加营销方案
  1043. if(isMarket.equals("1")){
  1044. if(isGradeSetting.equals("1")){
  1045. //都叠加 电子卡支付金额 = 应收金额 - 营销优惠金额 - 等级优惠金额
  1046. BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt).subtract(dzkGradeDiscountAmt);
  1047. dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
  1048. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt; //如果为负数,则默认设置0.01元
  1049. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  1050. BigDecimal dzkDiscountAmtSum = dzkDiscountAmt.add(dzkGradeDiscountAmt); //电子卡总优惠金额
  1051. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmtSum.toString());
  1052. }else {
  1053. //叠加营销方案不叠加等级优惠: 电子卡支付金额 =实收金额-营销优惠金额
  1054. BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt);
  1055. dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
  1056. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  1057. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  1058. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmt.toString());
  1059. }
  1060. }else {
  1061. if(isGradeSetting.equals("1")){
  1062. //不叠加营销方案叠加等级优惠:电子卡支付金额 =应收金额-等级优惠金额
  1063. BigDecimal dzkAmt = receivableAmt.subtract(dzkGradeDiscountAmt);
  1064. dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
  1065. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  1066. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  1067. payOrderResultInfo.setDzkDiscountAmt(dzkGradeDiscountAmt.toString());
  1068. }else {
  1069. //都不叠加: 电子卡支付金额 = 应收金额
  1070. payOrderResultInfo.setDzkAmt(receivableAmt.toString());
  1071. payOrderResultInfo.setDzkDiscountAmt("0");
  1072. }
  1073. }
  1074. }
  1075. CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
  1076. customerElectronicCard.setStationId(Integer.valueOf(params.get("stationId").toString()));
  1077. customerElectronicCard.setCardOilsType(params.get("cardOilsType").toString());
  1078. customerElectronicCard.setUnionId(params.get("unionId").toString());
  1079. customerElectronicCard.setMobilePhone(params.get("userPhone").toString());
  1080. customerElectronicCard.setCustomerName(params.get("customerName").toString());
  1081. //查询客户余额和卡的类型
  1082. Map<String, String> map = this.selectCardBalance(customerElectronicCard, params);
  1083. payOrderResultInfo.setBalance(map.get("balance"));
  1084. payOrderResultInfo.setOilsCardFlag(map.get("oilsCardFlag"));
  1085. payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
  1086. String dzkAmt = payOrderResultInfo.getDzkAmt();
  1087. payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
  1088. if(oilLiters.toString().equals("0.0000")){
  1089. payOrderResultInfo.setDzkAmt("0.01");
  1090. payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
  1091. }else {
  1092. //如果电子卡的支付金额与微信支付金额相同
  1093. if(amt.compareTo(new BigDecimal(dzkAmt)) == 0){
  1094. payOrderResultInfo.setDzkDiscountPrice(discountPrice.toString());
  1095. }else{
  1096. //此处重新计算油升数原因:电子卡在计算支付0.01时优惠价格时,如果保留小数位数过低则会出现误差;
  1097. BigDecimal oilLiters_dzk = receivableAmt.divide(oilPrice,7, BigDecimal.ROUND_HALF_UP);
  1098. BigDecimal dzkDiscountPrice = oilLiters_dzk.toString().equals("0.0000000") ? oilPrice: new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
  1099. //BigDecimal dzkDiscountPrice = new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
  1100. dzkDiscountPrice = dzkDiscountPrice.compareTo(oilPrice) == 1 ? oilPrice : dzkDiscountPrice;
  1101. payOrderResultInfo.setDzkDiscountPrice(dzkDiscountPrice.toString());
  1102. }
  1103. }
  1104. }
  1105. return payOrderResultInfo;
  1106. }
  1107. //计算立减
  1108. public PayOrderResultInfo calculateLiJianDiscount(Map<String ,Object> params){
  1109. BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString()); //油品价格
  1110. BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString()); //应收金额
  1111. BigDecimal oilLiters = new BigDecimal("0.0000"); //加油升数
  1112. BigDecimal discountAmt = new BigDecimal(0); //优惠金额
  1113. BigDecimal amt = receivableAmt;
  1114. BigDecimal discountPrice = oilPrice;
  1115. BigDecimal gradeDiscountAmt = new BigDecimal(0); //等级优惠金额
  1116. BigDecimal dzkGradeDiscountAmt = new BigDecimal(0); //计算电子卡金额时所需等级优惠金额值
  1117. BigDecimal dzkDiscountAmt = new BigDecimal(0); //计算电子卡金额时所需营销优惠金额值
  1118. //加油升数
  1119. oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_HALF_UP);
  1120. // if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("0000")){
  1121. // oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_UP);
  1122. // }
  1123. PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
  1124. //计算等级优惠
  1125. PayOrderResultInfo payOrderResultInfoGrade = this.calculateGradeDiscount(params);
  1126. gradeDiscountAmt = new BigDecimal(payOrderResultInfoGrade.getDiscountAmt());
  1127. dzkGradeDiscountAmt = gradeDiscountAmt; //同时给电子卡赋值等级优惠金额
  1128. params.put("discountPlanType", "2");
  1129. List<Map> customerMarkertPlanList = customerGradeServices.getCustomerMarkertPlanList(params);
  1130. if(customerMarkertPlanList !=null && customerMarkertPlanList.size() >0){
  1131. BigDecimal discountAmt_b = new BigDecimal(customerMarkertPlanList.get(0).get("discountAmt").toString()); //条件金额
  1132. BigDecimal gasoilDiscountAmt_b = new BigDecimal(customerMarkertPlanList.get(0).get("gasoilDiscountAmt").toString()); //享受的优惠
  1133. if(receivableAmt.compareTo(discountAmt_b) == 1 || receivableAmt.compareTo(discountAmt_b) == 0){
  1134. discountAmt = gasoilDiscountAmt_b;
  1135. //会员活动是否开启:1是;0否'
  1136. if(customerMarkertPlanList.get(0).containsKey("discountSettingFlag") && customerMarkertPlanList.get(0).get("discountSettingFlag").toString() !="") {
  1137. String discountSettingFlag = customerMarkertPlanList.get(0).get("discountSettingFlag").toString();
  1138. if (discountSettingFlag != null && discountSettingFlag.equals("1")) {
  1139. String discountType = customerMarkertPlanList.get(0).get("discountType").toString(); //会员日周期类型设置
  1140. String discountDate = customerMarkertPlanList.get(0).get("discountDate").toString(); //按固定日期
  1141. String discountActivityAmt = customerMarkertPlanList.get(0).get("discountActivityAmt").toString(); //会员日优惠金额
  1142. if (StringUtils.isNotBlank(discountType) && StringUtils.isNotBlank(discountDate) && StringUtils.isNotBlank(discountActivityAmt)) {
  1143. //当前时间是否是会员日
  1144. boolean b = isActivityDay(discountType, discountDate);
  1145. if (b) {
  1146. discountAmt = new BigDecimal(discountActivityAmt);
  1147. }
  1148. }
  1149. }
  1150. }
  1151. amt = receivableAmt.subtract(discountAmt); //应收金额
  1152. amt = amt.toString().equals("0.00") ? new BigDecimal("0.01") : amt;
  1153. amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
  1154. discountPrice = oilLiters.equals(new BigDecimal("0.0000")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP); //优惠价格
  1155. discountPrice =discountPrice.compareTo(oilPrice) == 1 ? oilPrice: discountPrice;
  1156. }
  1157. dzkDiscountAmt = discountAmt;
  1158. String vipDiscountyPlus = customerMarkertPlanList.get(0).get("vipDiscountyPlus").toString();
  1159. if(vipDiscountyPlus.equals("1")){
  1160. //如果叠加等级优惠
  1161. discountAmt = discountAmt.add(gradeDiscountAmt);
  1162. }
  1163. }
  1164. payOrderResultInfo.setAmt(amt.toString());
  1165. payOrderResultInfo.setDiscountAmt(discountAmt.toString());
  1166. payOrderResultInfo.setDzkDiscountAmt(discountAmt.toString());
  1167. payOrderResultInfo.setDiscountPrice(discountPrice.toString());
  1168. payOrderResultInfo.setOilLiters(oilLiters.toString());
  1169. payOrderResultInfo.setReceivableAmt(receivableAmt.toString());
  1170. payOrderResultInfo.setOilPrice(oilPrice.toString());
  1171. payOrderResultInfo.setDzkAmt(amt.toString());
  1172. payOrderResultInfo.setOilsCardFlag("0");
  1173. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  1174. //表示开启共享
  1175. if(params.get("cardEnabledFlagGroup").toString().equals("1")){ //表示开启电子卡功能
  1176. payOrderResultInfo.setCardEnabledFlag("1");
  1177. }else {
  1178. payOrderResultInfo.setCardEnabledFlag("0");
  1179. }
  1180. }else {
  1181. //不共享,则查看油站电子卡是否开启
  1182. if(params.get("cardEnabledFlag").toString().equals("1")){
  1183. payOrderResultInfo.setCardEnabledFlag("1");
  1184. }else {
  1185. payOrderResultInfo.setCardEnabledFlag("0");
  1186. }
  1187. }
  1188. logger.info("油站是否开启电子会员卡功能: " +params.get("cardEnabledFlag").toString());
  1189. if(payOrderResultInfo.getCardEnabledFlag().equals("1")){
  1190. CustomerCardSetting customerCardSetting = new CustomerCardSetting();
  1191. customerCardSetting.setStationId(Integer.valueOf(params.get("stationId").toString()));
  1192. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  1193. customerCardSetting.setStationId(Integer.valueOf(params.get("groupId").toString()));
  1194. }
  1195. List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
  1196. if(cardRechargeSettingList !=null && cardRechargeSettingList.size() >0){
  1197. String isGradeSetting = cardRechargeSettingList.get(0).getIsGradeSetting(); //是否叠加等级方案
  1198. String isMarket = cardRechargeSettingList.get(0).getIsMarket(); //等候否叠加营销方案
  1199. if(isMarket.equals("1")){
  1200. if(isGradeSetting.equals("1")){
  1201. BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt).subtract(dzkGradeDiscountAmt);
  1202. dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
  1203. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  1204. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  1205. BigDecimal dzkDiscountAmtSum = dzkDiscountAmt.add(dzkGradeDiscountAmt); //电子卡优惠金额
  1206. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmtSum.toString());
  1207. }else {
  1208. //如果电子卡设置执行营销方案不执行等级优惠 则 电子卡支付金额 =实收金额-营销优惠金额
  1209. BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt);
  1210. dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
  1211. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  1212. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  1213. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmt.toString());
  1214. }
  1215. }else {
  1216. if(isGradeSetting.equals("1")){
  1217. //如果电子卡设置不执行营销方案执行等级优惠 则 电子卡支付金额 =应收金额-等级优惠金额
  1218. BigDecimal dzkAmt = receivableAmt.subtract(dzkGradeDiscountAmt);
  1219. dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
  1220. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  1221. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  1222. payOrderResultInfo.setDzkDiscountAmt(dzkGradeDiscountAmt.toString());
  1223. }else {
  1224. payOrderResultInfo.setDzkAmt(receivableAmt.toString());
  1225. payOrderResultInfo.setDzkDiscountAmt("0");
  1226. }
  1227. }
  1228. }
  1229. CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
  1230. customerElectronicCard.setStationId(Integer.valueOf(params.get("stationId").toString()));
  1231. customerElectronicCard.setCardOilsType(params.get("cardOilsType").toString());
  1232. customerElectronicCard.setUnionId(params.get("unionId").toString());
  1233. customerElectronicCard.setMobilePhone(params.get("userPhone").toString());
  1234. customerElectronicCard.setCustomerName(params.get("customerName").toString());
  1235. //查询客户余额和卡的类型
  1236. Map<String, String> map = this.selectCardBalance(customerElectronicCard, params);
  1237. payOrderResultInfo.setBalance(map.get("balance"));
  1238. payOrderResultInfo.setOilsCardFlag(map.get("oilsCardFlag"));
  1239. payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
  1240. String dzkAmt = payOrderResultInfo.getDzkAmt();
  1241. payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
  1242. if(oilLiters.toString().equals("0.0000")){
  1243. payOrderResultInfo.setDzkAmt("0.01");
  1244. payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
  1245. }else {
  1246. //如果电子卡的支付金额与微信支付金额相同
  1247. if(amt.compareTo(new BigDecimal(dzkAmt)) == 0){
  1248. payOrderResultInfo.setDzkDiscountPrice(discountPrice.toString());
  1249. }else{
  1250. //此处重新计算油升数原因:电子卡在计算支付0.01时优惠价格时,如果保留小数位数过低则会出现误差;
  1251. BigDecimal oilLiters_dzk = receivableAmt.divide(oilPrice,7, BigDecimal.ROUND_HALF_UP);
  1252. BigDecimal dzkDiscountPrice = oilLiters_dzk.toString().equals("0.0000000") ? oilPrice: new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
  1253. //BigDecimal dzkDiscountPrice = new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
  1254. dzkDiscountPrice = dzkDiscountPrice.compareTo(oilPrice) ==1 ? oilPrice : dzkDiscountPrice;
  1255. payOrderResultInfo.setDzkDiscountPrice(dzkDiscountPrice.toString());
  1256. }
  1257. }
  1258. }
  1259. return payOrderResultInfo;
  1260. }
  1261. //计算满减
  1262. public PayOrderResultInfo calculateManJianDiscount(Map<String ,Object> params){
  1263. BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString()); //油品价格
  1264. BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString()); //应收金额
  1265. BigDecimal oilLiters = new BigDecimal("0.0000"); //加油升数
  1266. BigDecimal discountAmt = new BigDecimal(0); //优惠金额
  1267. BigDecimal amt = receivableAmt;
  1268. BigDecimal discountPrice = oilPrice;
  1269. BigDecimal gradeDiscountAmt = new BigDecimal(0); //等级优惠金额
  1270. BigDecimal dzkGradeDiscountAmt = new BigDecimal(0); //计算电子卡金额时所需等级优惠金额值
  1271. BigDecimal dzkDiscountAmt = new BigDecimal(0); //计算电子卡金额时所需营销优惠金额值
  1272. //加油升数
  1273. oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_HALF_UP);
  1274. // if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("0000")){
  1275. // oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_UP);
  1276. // }
  1277. PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
  1278. //计算等级优惠
  1279. PayOrderResultInfo payOrderResultInfoGrade = this.calculateGradeDiscount(params);
  1280. gradeDiscountAmt = new BigDecimal(payOrderResultInfoGrade.getDiscountAmt());
  1281. dzkGradeDiscountAmt = gradeDiscountAmt;
  1282. params.put("discountPlanType", "1");
  1283. List<Map> customerMarkertPlanList = customerGradeServices.getCustomerMarkertPlanList(params);
  1284. if(customerMarkertPlanList !=null && customerMarkertPlanList.size() >0){
  1285. BigDecimal discountAmt_b = new BigDecimal(customerMarkertPlanList.get(0).get("discountAmt").toString()); //条件金额
  1286. BigDecimal gasoilDiscountAmt_b = new BigDecimal(customerMarkertPlanList.get(0).get("gasoilDiscountAmt").toString()); //享受的优惠
  1287. if(receivableAmt.compareTo(discountAmt_b) == 1 || receivableAmt.compareTo(discountAmt_b) == 0){
  1288. discountAmt = receivableAmt.divide(discountAmt_b, 2, BigDecimal.ROUND_HALF_UP).multiply(gasoilDiscountAmt_b); //优惠金额
  1289. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  1290. //会员活动是否开启:1是;0否'
  1291. if(customerMarkertPlanList.get(0).containsKey("discountSettingFlag") && customerMarkertPlanList.get(0).get("discountSettingFlag").toString() !=""){
  1292. String discountSettingFlag = customerMarkertPlanList.get(0).get("discountSettingFlag").toString();
  1293. if(discountSettingFlag !=null && discountSettingFlag.equals("1")){
  1294. String discountType = customerMarkertPlanList.get(0).get("discountType").toString(); //会员日周期类型设置
  1295. String discountDate = customerMarkertPlanList.get(0).get("discountDate").toString(); //按固定日期
  1296. String discountActivityAmt = customerMarkertPlanList.get(0).get("discountActivityAmt").toString(); //会员日优惠金额
  1297. //当前时间是否是会员日
  1298. if(StringUtils.isNotBlank(discountType) && StringUtils.isNotBlank(discountDate) && StringUtils.isNotBlank(discountActivityAmt)){
  1299. boolean b = isActivityDay(discountType, discountDate);
  1300. if(b){
  1301. discountAmt = receivableAmt.divide(discountAmt_b, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(discountActivityAmt)); //优惠金额
  1302. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  1303. }
  1304. }
  1305. }
  1306. }
  1307. amt = receivableAmt.subtract(discountAmt); //应收金额
  1308. amt = amt.toString().equals("0.00") ? new BigDecimal("0.01") : amt;
  1309. amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
  1310. discountPrice = oilLiters.equals(new BigDecimal("0.0000")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP); //优惠价格
  1311. discountPrice =discountPrice.compareTo(oilPrice) == 1 ? oilPrice : discountPrice;
  1312. }
  1313. dzkDiscountAmt = discountAmt;
  1314. //是否共享会员等级优惠叠加: 1 代表是; 2 代表否;
  1315. String vipDiscountyPlus = customerMarkertPlanList.get(0).get("vipDiscountyPlus").toString();
  1316. if(vipDiscountyPlus.equals("1")){
  1317. //如果叠加等级优惠
  1318. discountAmt = discountAmt.add(gradeDiscountAmt);
  1319. }
  1320. }
  1321. payOrderResultInfo.setAmt(amt.toString());
  1322. payOrderResultInfo.setDiscountAmt(discountAmt.toString());
  1323. payOrderResultInfo.setDzkDiscountAmt(discountAmt.toString());
  1324. payOrderResultInfo.setDiscountPrice(discountPrice.toString());
  1325. payOrderResultInfo.setOilLiters(oilLiters.toString());
  1326. payOrderResultInfo.setReceivableAmt(receivableAmt.toString());
  1327. payOrderResultInfo.setOilPrice(oilPrice.toString());
  1328. payOrderResultInfo.setDzkAmt(amt.toString());
  1329. payOrderResultInfo.setOilsCardFlag("0");
  1330. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  1331. //表示开启共享
  1332. if(params.get("cardEnabledFlagGroup").toString().equals("1")){ //表示开启电子卡功能
  1333. payOrderResultInfo.setCardEnabledFlag("1");
  1334. }else {
  1335. payOrderResultInfo.setCardEnabledFlag("0");
  1336. }
  1337. }else {
  1338. //不共享,则查看油站电子卡是否开启
  1339. if(params.get("cardEnabledFlag").toString().equals("1")){
  1340. payOrderResultInfo.setCardEnabledFlag("1");
  1341. }else {
  1342. payOrderResultInfo.setCardEnabledFlag("0");
  1343. }
  1344. }
  1345. logger.info("油站是否开启电子会员卡功能: " +params.get("cardEnabledFlag").toString());
  1346. if(payOrderResultInfo.getCardEnabledFlag().equals("1")){
  1347. CustomerCardSetting customerCardSetting = new CustomerCardSetting();
  1348. customerCardSetting.setStationId(Integer.valueOf(params.get("stationId").toString()));
  1349. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  1350. customerCardSetting.setStationId(Integer.valueOf(params.get("groupId").toString()));
  1351. }
  1352. List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
  1353. if(cardRechargeSettingList !=null && cardRechargeSettingList.size() >0){
  1354. String isGradeSetting = cardRechargeSettingList.get(0).getIsGradeSetting(); //是否叠加等级方案
  1355. String isMarket = cardRechargeSettingList.get(0).getIsMarket(); //等候否叠加营销方案
  1356. if(isMarket.equals("1")){
  1357. if(isGradeSetting.equals("1")){
  1358. //如果电子卡设置执行营销方案不执行等级优惠 则 电子卡支付金额 =实收金额-营销优惠-等级优惠金额
  1359. BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt).subtract(dzkGradeDiscountAmt);
  1360. dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
  1361. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  1362. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  1363. BigDecimal dzkDiscountAmtSum = dzkDiscountAmt.add(dzkGradeDiscountAmt); //电子卡优惠金额
  1364. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmtSum.toString());
  1365. }else {
  1366. //如果电子卡设置执行营销方案不执行等级优惠 则 电子卡支付金额 =实收金额-营销优惠金额
  1367. BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt);
  1368. dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
  1369. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  1370. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  1371. payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmt.toString());
  1372. }
  1373. }else {
  1374. if(isGradeSetting.equals("1")){
  1375. //如果电子卡设置不执行营销方案执行等级优惠 则 电子卡支付金额 =应收金额-等级优惠金额
  1376. BigDecimal dzkAmt = receivableAmt.subtract(dzkGradeDiscountAmt);
  1377. dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
  1378. dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
  1379. payOrderResultInfo.setDzkAmt(dzkAmt.toString());
  1380. payOrderResultInfo.setDzkDiscountAmt(dzkGradeDiscountAmt.toString());
  1381. }else {
  1382. payOrderResultInfo.setDzkAmt(receivableAmt.toString());
  1383. payOrderResultInfo.setDzkDiscountAmt("0");
  1384. }
  1385. }
  1386. }
  1387. CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
  1388. customerElectronicCard.setStationId(Integer.valueOf(params.get("stationId").toString()));
  1389. customerElectronicCard.setCardOilsType(params.get("cardOilsType").toString());
  1390. customerElectronicCard.setUnionId(params.get("unionId").toString());
  1391. customerElectronicCard.setMobilePhone(params.get("userPhone").toString());
  1392. customerElectronicCard.setCustomerName(params.get("customerName").toString());
  1393. //查询客户余额和卡的类型
  1394. Map<String, String> map = this.selectCardBalance(customerElectronicCard, params);
  1395. payOrderResultInfo.setBalance(map.get("balance"));
  1396. payOrderResultInfo.setOilsCardFlag(map.get("oilsCardFlag"));
  1397. payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
  1398. String dzkAmt = payOrderResultInfo.getDzkAmt();
  1399. payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
  1400. if(oilLiters.toString().equals("0.0000")){
  1401. payOrderResultInfo.setDzkAmt("0.01");
  1402. payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
  1403. }else {
  1404. //如果电子卡的支付金额与微信支付金额相同
  1405. if(amt.compareTo(new BigDecimal(dzkAmt)) == 0){
  1406. payOrderResultInfo.setDzkDiscountPrice(discountPrice.toString());
  1407. }else{
  1408. //此处重新计算油升数原因:电子卡在计算支付0.01时优惠价格时,如果保留小数位数过低则会出现误差;
  1409. BigDecimal oilLiters_dzk = receivableAmt.divide(oilPrice,7, BigDecimal.ROUND_HALF_UP);
  1410. BigDecimal dzkDiscountPrice = oilLiters_dzk.toString().equals("0.0000000") ? oilPrice: new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
  1411. //BigDecimal dzkDiscountPrice = new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
  1412. dzkDiscountPrice = dzkDiscountPrice.compareTo(oilPrice) ==1 ? oilPrice : dzkDiscountPrice;
  1413. payOrderResultInfo.setDzkDiscountPrice(dzkDiscountPrice.toString());
  1414. }
  1415. }
  1416. }
  1417. return payOrderResultInfo;
  1418. }
  1419. //计算等级优惠
  1420. public PayOrderResultInfo calculateGradeDiscount(Map<String ,Object> params){
  1421. String oilName = params.get("oilName").toString();
  1422. String stationId = params.get("stationId").toString();
  1423. BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString()); //油品价格
  1424. BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString()); //应收金额
  1425. BigDecimal oilLiters = new BigDecimal("0.0000"); //加油升数
  1426. BigDecimal discountAmt = new BigDecimal("0.00"); //优惠金额
  1427. BigDecimal dzkDiscountAmt = discountAmt; //优惠金额
  1428. BigDecimal amt = receivableAmt;
  1429. BigDecimal discountPrice = oilPrice;
  1430. BigDecimal gradeDiscountPriceAmt = new BigDecimal("0.00"); //价格优惠金额
  1431. PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
  1432. oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_HALF_UP);
  1433. // if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("0000")){
  1434. // oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_UP);
  1435. // }
  1436. //当前客户是否已存在当前油站客户信息中
  1437. CustomerManage customerManage = new CustomerManage();
  1438. //customerManage.setPhoneNumber(params.get("mobilePhone").toString());
  1439. customerManage.setUnionId(params.get("unionId").toString());
  1440. customerManage.setOilName(oilName);
  1441. customerManage.setStationId(Integer.valueOf(stationId));
  1442. CustomerManage customerManageInfo = customerManagerService.getCustomerManageInfo(customerManage);
  1443. if(customerManageInfo !=null){
  1444. //当前客户所加油的订单已存在等级时
  1445. double amtSum = customerManageInfo.getAmt().doubleValue(); //当前客户已累计的金额
  1446. List<Map> cList = customerGradeServices.getCustomerGradeListOrderByDesc(params); //获取油站的等级优惠方案 倒叙查询规则
  1447. if(cList !=null && cList.size() >0){ //当前油站设置等级方案时
  1448. for(Map m : cList){
  1449. if(amtSum >= Double.valueOf(m.get("memberConditStart").toString())){
  1450. discountPrice = oilPrice.subtract(new BigDecimal(m.get("discountAmt").toString()));
  1451. gradeDiscountPriceAmt = new BigDecimal(m.get("discountAmt").toString());
  1452. if(discountPrice.compareTo(oilPrice) ==0){
  1453. discountAmt = new BigDecimal("0.00");
  1454. }else {
  1455. discountAmt = oilLiters.multiply(new BigDecimal(m.get("discountAmt").toString()));
  1456. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  1457. }
  1458. break;
  1459. }
  1460. }
  1461. }
  1462. }else {
  1463. //当前客户所加油的订单不存在等级时
  1464. List<Map> customerGradeList = customerGradeServices.getCustomerGradeList(params); //升序查询 取第一条
  1465. if(customerGradeList !=null && customerGradeList.size() >0){
  1466. discountPrice = oilPrice.subtract(new BigDecimal(customerGradeList.get(0).get("discountAmt").toString()));
  1467. gradeDiscountPriceAmt = new BigDecimal(customerGradeList.get(0).get("discountAmt").toString());
  1468. if(discountPrice.compareTo(oilPrice) == 0){
  1469. discountAmt = new BigDecimal("0.00");
  1470. }else {
  1471. discountAmt = oilLiters.multiply(new BigDecimal(customerGradeList.get(0).get("discountAmt").toString()));
  1472. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  1473. }
  1474. }
  1475. }
  1476. amt = receivableAmt.subtract(discountAmt); //应收金额
  1477. amt =amt.toString().equals("0.00") ? new BigDecimal("0.01"): amt;
  1478. amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
  1479. //discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP); //优惠价格
  1480. payOrderResultInfo.setGradeDiscountPriceAmt(gradeDiscountPriceAmt.toString());
  1481. payOrderResultInfo.setAmt(amt.toString());
  1482. payOrderResultInfo.setDiscountAmt(discountAmt.toString());
  1483. payOrderResultInfo.setDzkDiscountAmt(discountAmt.toString());
  1484. payOrderResultInfo.setDiscountPrice(discountPrice.toString());
  1485. payOrderResultInfo.setOilLiters(oilLiters.toString());
  1486. payOrderResultInfo.setReceivableAmt(receivableAmt.toString());
  1487. payOrderResultInfo.setOilPrice(oilPrice.toString());
  1488. payOrderResultInfo.setDzkAmt(amt.toString());
  1489. payOrderResultInfo.setOilsCardFlag("0");
  1490. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  1491. //表示开启共享
  1492. if(params.get("cardEnabledFlagGroup").toString().equals("1")){ //表示开启电子卡功能
  1493. payOrderResultInfo.setCardEnabledFlag("1");
  1494. }else {
  1495. payOrderResultInfo.setCardEnabledFlag("0");
  1496. }
  1497. }else {
  1498. //不共享,则查看油站电子卡是否开启
  1499. if(params.get("cardEnabledFlag").toString().equals("1")){
  1500. payOrderResultInfo.setCardEnabledFlag("1");
  1501. }else {
  1502. payOrderResultInfo.setCardEnabledFlag("0");
  1503. }
  1504. }
  1505. //电子卡功能是否开启
  1506. logger.info("油站是否开启电子会员卡功能: " +payOrderResultInfo.getCardEnabledFlag());
  1507. if(payOrderResultInfo.getCardEnabledFlag().equals("1")){
  1508. payOrderResultInfo.setDzkAmt(receivableAmt.toString());
  1509. payOrderResultInfo.setDzkDiscountAmt("0");
  1510. CustomerCardSetting customerCardSetting = new CustomerCardSetting();
  1511. customerCardSetting.setStationId(Integer.valueOf(params.get("stationId").toString()));
  1512. if(params.get("cardRuleFlagGroup").toString().equals("1")){
  1513. customerCardSetting.setStationId(Integer.valueOf(params.get("groupId").toString()));
  1514. }
  1515. List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
  1516. if(cardRechargeSettingList !=null && cardRechargeSettingList.size() >0){
  1517. String isGradeSetting = cardRechargeSettingList.get(0).getIsGradeSetting();
  1518. if(isGradeSetting.equals("1")){
  1519. payOrderResultInfo.setDzkAmt(amt.toString());
  1520. payOrderResultInfo.setDzkDiscountAmt(discountAmt.toString());
  1521. }
  1522. }
  1523. CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
  1524. customerElectronicCard.setStationId(Integer.valueOf(params.get("stationId").toString()));
  1525. customerElectronicCard.setCardOilsType(params.get("cardOilsType").toString());
  1526. customerElectronicCard.setUnionId(params.get("unionId").toString());
  1527. customerElectronicCard.setMobilePhone(params.get("userPhone").toString());
  1528. customerElectronicCard.setCustomerName(params.get("customerName").toString());
  1529. //查询客户余额和卡的类型
  1530. Map<String, String> map = this.selectCardBalance(customerElectronicCard, params);
  1531. payOrderResultInfo.setBalance(map.get("balance"));
  1532. payOrderResultInfo.setOilsCardFlag(map.get("oilsCardFlag"));
  1533. payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
  1534. String dzkAmt = payOrderResultInfo.getDzkAmt();
  1535. payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
  1536. if(oilLiters.toString().equals("0.0000")){
  1537. payOrderResultInfo.setDzkAmt("0.01");
  1538. payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
  1539. }else {
  1540. //如果电子卡的支付金额与微信支付金额相同
  1541. if(amt.compareTo(new BigDecimal(dzkAmt)) == 0){
  1542. payOrderResultInfo.setDzkDiscountPrice(discountPrice.toString());
  1543. }else{
  1544. //此处重新计算油升数原因:电子卡在计算支付0.01时优惠价格时,如果保留小数位数过低则会出现误差;
  1545. BigDecimal oilLiters_dzk = receivableAmt.divide(oilPrice,7, BigDecimal.ROUND_HALF_UP);
  1546. BigDecimal dzkDiscountPrice = oilLiters_dzk.toString().equals("0.0000000") ? oilPrice: new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
  1547. //BigDecimal dzkDiscountPrice = new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
  1548. dzkDiscountPrice = dzkDiscountPrice.compareTo(oilPrice) ==1 ? oilPrice : dzkDiscountPrice;
  1549. payOrderResultInfo.setDzkDiscountPrice(dzkDiscountPrice.toString());
  1550. }
  1551. }
  1552. }
  1553. return payOrderResultInfo;
  1554. }
  1555. //获取客户所拥有的优惠券并计算支付金额
  1556. public List<UserCoupon> getUserCouponAscList(PayOrderResultInfo p){
  1557. Integer stationId = p.getStationId();
  1558. String unionId = p.getUnionId();
  1559. List<UserCoupon> userCouponsList = new ArrayList<>();
  1560. StationInfo stationInfo = new StationInfo();
  1561. stationInfo.setStationId(stationId);
  1562. StationInfo stationInfos = stationService.selectStationInfo(stationInfo);
  1563. if(stationInfos !=null && stationInfos.getCouponEnabledFlag() !=null && stationInfos.getCouponEnabledFlag().equals("1")){
  1564. UserCoupon userCoupon = new UserCoupon();
  1565. userCoupon.setStationId(stationId);
  1566. if(stationInfos.getCouponFlag() !=null && stationInfos.getCouponFlag().equals("1")){
  1567. userCoupon.setStationId(stationInfos.getGroupId());
  1568. }
  1569. userCoupon.setUnionId(unionId);
  1570. userCoupon.setCouponIsUsed("0");
  1571. userCoupon.setExpireFlag("0"); // SQL 条件判断 过期标志: 1 代表使用的优惠券已过期查询参数; 0 代表未过期有效的优惠券
  1572. userCoupon.setNoVerificationVerFlag("0"); //SQL 条件判断 查询没有异业券的参数标识: 0代表只有加油券 1代表只有异业券
  1573. userCoupon.setCurrentTime(new Date());
  1574. userCoupon.setOilName(p.getOilName());
  1575. userCouponsList = couponService.selectUserCoupons(userCoupon);
  1576. //循环计算优惠券金额 并排序
  1577. if(userCouponsList !=null && userCouponsList.size()>0){
  1578. for (UserCoupon uc: userCouponsList){
  1579. String status = uc.getStatus();
  1580. if(status !=null && status.equals("1")){
  1581. //返回前端使用优惠券后的计算金额计算后
  1582. CouponReckonAmt couponReckonAmt = new CouponReckonAmt();
  1583. //couponReckonAmt.setAmt();
  1584. String amt = p.getAmt();
  1585. String discountAmt = p.getDiscountAmt();
  1586. String oilPrice = p.getOilPrice();
  1587. String discountPrice = p.getDiscountPrice();
  1588. String dzkAmt = p.getDzkAmt();
  1589. String dzkDiscountAmt = p.getDzkDiscountAmt();
  1590. String oilLiters = p.getOilLiters();
  1591. couponReckonAmt.setAmt(amt);
  1592. couponReckonAmt.setDiscountAmt(discountAmt);
  1593. couponReckonAmt.setOilPrice(oilPrice);
  1594. couponReckonAmt.setDiscountPrice(discountPrice);
  1595. couponReckonAmt.setDzkAmt(dzkAmt);
  1596. couponReckonAmt.setDzkDiscountAmt(dzkDiscountAmt);
  1597. couponReckonAmt.setOilLiters(oilLiters);
  1598. //优惠券时间类型
  1599. String availableControl = uc.getAvailableControl();
  1600. BigDecimal couponThresholdAmt = uc.getCouponThresholdAmt();
  1601. String oilName = p.getOilName();
  1602. String oilNames = uc.getOilName();
  1603. //判断该油品是否能用该张张优惠券
  1604. boolean contains = oilNames.contains(oilName);
  1605. if(contains){
  1606. BigDecimal receivableAmt = new BigDecimal(p.getReceivableAmt());
  1607. //应收金额大于优惠券门槛金额
  1608. if(!(receivableAmt.compareTo(couponThresholdAmt) == -1)){
  1609. switch (availableControl){
  1610. case "0":
  1611. couponReckonAmt = this.calCouponDiscount(couponReckonAmt, uc, p);
  1612. break;
  1613. case "1":
  1614. boolean activityDay_1 = this.isActivityDay("1", uc.getCycleDays());
  1615. if(activityDay_1)
  1616. //指定每周几
  1617. couponReckonAmt = this.calCouponDiscount(couponReckonAmt, uc, p);
  1618. break;
  1619. case "2":
  1620. boolean activityDay_2 = this.isActivityDay("2", uc.getCycleDays());
  1621. if(activityDay_2)
  1622. //指定每月的几号
  1623. couponReckonAmt = this.calCouponDiscount(couponReckonAmt, uc, p);
  1624. break;
  1625. case "3":
  1626. boolean activityDay_3 = this.isActivityDay("3", uc.getAppointedDays());
  1627. if (activityDay_3)
  1628. //指定日
  1629. couponReckonAmt = this.calCouponDiscount(couponReckonAmt, uc, p);
  1630. break;
  1631. }
  1632. }
  1633. }
  1634. uc.setCouponNo(""); //隐藏优惠券核销码
  1635. uc.setCouponReckonAmt(couponReckonAmt);
  1636. }
  1637. }
  1638. //根据支付金额大小进行优惠券排序
  1639. userCouponsList.sort((((o1, o2) -> o1.getCouponReckonAmt().getAmt().compareTo(o2.getCouponReckonAmt().getAmt()))));
  1640. }
  1641. }
  1642. return userCouponsList;
  1643. }
  1644. /*
  1645. * //计算使用优惠券后金额
  1646. * @param c //返回前端使用优惠券后的计算
  1647. * @param uc //用户所持有该张优惠券的信息
  1648. * @return
  1649. */
  1650. public CouponReckonAmt calCouponDiscount(CouponReckonAmt c, UserCoupon uc, PayOrderResultInfo p){
  1651. CouponReckonAmt couponReckonAmt = c;
  1652. String amt = c.getAmt();
  1653. String discountAmt = c.getDiscountAmt();
  1654. String dzkAmt = c.getDzkAmt();
  1655. String dzkDiscountAmt = c.getDzkDiscountAmt();
  1656. String oilLiters = c.getOilLiters();
  1657. String discountPrice = c.getDiscountPrice();
  1658. BigDecimal couponAmt = uc.getCouponAmt();
  1659. String receivableAmt = p.getReceivableAmt();
  1660. String dzkDiscountPrice = p.getDzkDiscountPrice();
  1661. BigDecimal dzkAmtNew = new BigDecimal(dzkAmt);
  1662. BigDecimal amtNew = new BigDecimal(amt);
  1663. BigDecimal discountPriceNew = new BigDecimal(discountPrice);
  1664. BigDecimal discountAmtNew = new BigDecimal(discountAmt);
  1665. BigDecimal dzkDiscountAmtNew = new BigDecimal(dzkDiscountAmt);
  1666. BigDecimal dzkDiscountPriceNew = new BigDecimal(dzkDiscountPrice);
  1667. //表示等级叠加
  1668. if("1".equals(p.getAllDiscountType())){
  1669. if("1".equals(uc.getIsGradeFlag())){
  1670. switch (uc.getCouponType()){
  1671. case "1":
  1672. amtNew = new BigDecimal(amt).subtract(couponAmt);
  1673. amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
  1674. if(!oilLiters.equals("0.0000")){
  1675. discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
  1676. }
  1677. couponReckonAmt.setDiscountPrice(discountPriceNew.toString());
  1678. discountAmtNew = discountAmtNew.add(couponAmt);
  1679. couponReckonAmt.setDiscountAmt(discountAmtNew.toString());
  1680. couponReckonAmt.setAmt(amtNew.toString());
  1681. break;
  1682. case "2":
  1683. BigDecimal zheKouAmt = new BigDecimal(amt).multiply(couponAmt).divide(new BigDecimal("100"));
  1684. discountAmtNew = discountAmtNew.add(zheKouAmt);
  1685. amtNew = amtNew.subtract(zheKouAmt);
  1686. amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
  1687. if(!oilLiters.equals("0.0000")){
  1688. discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
  1689. }
  1690. discountAmtNew = discountAmtNew.setScale(2, BigDecimal.ROUND_HALF_UP);
  1691. couponReckonAmt.setDiscountAmt(discountAmtNew.toString());
  1692. couponReckonAmt.setDiscountPrice(discountPriceNew.toString());
  1693. couponReckonAmt.setAmt(amtNew.toString());
  1694. break;
  1695. }
  1696. }else {
  1697. //表示不叠加 则只使用优惠券
  1698. switch (uc.getCouponType()){
  1699. case "1":
  1700. amtNew = new BigDecimal(receivableAmt).subtract(couponAmt);
  1701. amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
  1702. if(!oilLiters.equals("0.0000")){
  1703. discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
  1704. }
  1705. couponReckonAmt.setDiscountPrice(discountPriceNew.toString());
  1706. discountAmtNew = new BigDecimal("0.00");
  1707. discountAmtNew = discountAmtNew.add(couponAmt);
  1708. couponReckonAmt.setDiscountAmt(discountAmtNew.toString());
  1709. couponReckonAmt.setAmt(amtNew.toString());
  1710. break;
  1711. case "2":
  1712. //优惠券折扣金额
  1713. BigDecimal zheKouAmt = new BigDecimal(receivableAmt).multiply(couponAmt).divide(new BigDecimal("100"));
  1714. discountAmtNew = new BigDecimal("0.00");
  1715. discountAmtNew = discountAmtNew.add(zheKouAmt);
  1716. amtNew = amtNew.subtract(discountAmtNew);
  1717. amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
  1718. if(!oilLiters.equals("0.0000")){
  1719. discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
  1720. }
  1721. discountAmtNew = discountAmtNew.setScale(2, BigDecimal.ROUND_HALF_UP);
  1722. couponReckonAmt.setDiscountAmt(discountAmtNew.toString());
  1723. couponReckonAmt.setDiscountPrice(discountPriceNew.toString());
  1724. couponReckonAmt.setAmt(amtNew.toString());
  1725. break;
  1726. }
  1727. }
  1728. }
  1729. //表示营销叠加
  1730. if("2".equals(p.getAllDiscountType())){
  1731. if("1".equals(uc.getIsMarketFlag())){
  1732. switch (uc.getCouponType()){
  1733. case "1":
  1734. amtNew = new BigDecimal(amt).subtract(couponAmt);
  1735. amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
  1736. if(!oilLiters.equals("0.0000")){
  1737. discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
  1738. }
  1739. couponReckonAmt.setDiscountPrice(discountPriceNew.toString());
  1740. discountAmtNew = discountAmtNew.add(couponAmt);
  1741. couponReckonAmt.setDiscountAmt(discountAmtNew.toString());
  1742. couponReckonAmt.setAmt(amtNew.toString());
  1743. break;
  1744. case "2":
  1745. BigDecimal zheKouAmt = new BigDecimal(amt).multiply(couponAmt).divide(new BigDecimal("100"));
  1746. discountAmtNew = discountAmtNew.add(zheKouAmt);
  1747. amtNew = amtNew.subtract(zheKouAmt);
  1748. amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
  1749. if(!oilLiters.equals("0.0000")){
  1750. discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
  1751. }
  1752. discountAmtNew = discountAmtNew.setScale(2, BigDecimal.ROUND_HALF_UP);
  1753. couponReckonAmt.setDiscountAmt(discountAmtNew.toString());
  1754. couponReckonAmt.setDiscountPrice(discountPriceNew.toString());
  1755. couponReckonAmt.setAmt(amtNew.toString());
  1756. break;
  1757. }
  1758. }else {
  1759. //不叠加营销
  1760. switch (uc.getCouponType()){
  1761. case "1":
  1762. //优惠券后的优惠金额
  1763. amtNew = new BigDecimal(receivableAmt).subtract(couponAmt);
  1764. amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
  1765. //优惠券后的优惠价格
  1766. if(!oilLiters.equals("0.0000")){
  1767. discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
  1768. }
  1769. discountAmtNew = new BigDecimal("0.00");
  1770. discountAmtNew = discountAmtNew.add(couponAmt);
  1771. couponReckonAmt.setDiscountAmt(discountAmtNew.toString());
  1772. couponReckonAmt.setDiscountPrice(discountPriceNew.toString());
  1773. couponReckonAmt.setAmt(amtNew.toString());
  1774. break;
  1775. case "2":
  1776. //优惠券后的优惠金额
  1777. BigDecimal zheKouAmt = new BigDecimal(receivableAmt).multiply(couponAmt).divide(new BigDecimal("100"));
  1778. discountAmtNew = new BigDecimal("0.00");
  1779. discountAmtNew = discountAmtNew.add(zheKouAmt);
  1780. amtNew = amtNew.subtract(discountAmtNew);
  1781. amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
  1782. //优惠券后的优惠价格
  1783. if(!oilLiters.equals("0.0000")){
  1784. discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
  1785. }
  1786. discountAmtNew = discountAmtNew.setScale(2, BigDecimal.ROUND_HALF_UP);
  1787. couponReckonAmt.setDiscountAmt(discountAmtNew.toString());
  1788. couponReckonAmt.setDiscountPrice(discountPriceNew.toString());
  1789. couponReckonAmt.setAmt(amtNew.toString());
  1790. break;
  1791. }
  1792. }
  1793. }
  1794. //表示标签叠加
  1795. if("3".equals(p.getAllDiscountType())){
  1796. if("1".equals(uc.getIsLabelFlag())){
  1797. switch (uc.getCouponType()){
  1798. case "1":
  1799. amtNew = new BigDecimal(amt).subtract(couponAmt);
  1800. amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
  1801. if(!oilLiters.equals("0.0000")){
  1802. discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
  1803. }
  1804. couponReckonAmt.setDiscountPrice(discountPriceNew.toString());
  1805. discountAmtNew = discountAmtNew.add(couponAmt);
  1806. couponReckonAmt.setDiscountAmt(discountAmtNew.toString());
  1807. couponReckonAmt.setAmt(amtNew.toString());
  1808. break;
  1809. case "2":
  1810. BigDecimal zheKouAmt = new BigDecimal(amt).multiply(couponAmt).divide(new BigDecimal("100"));
  1811. discountAmtNew = discountAmtNew.add(zheKouAmt);
  1812. amtNew = amtNew.subtract(zheKouAmt);
  1813. amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
  1814. if(!oilLiters.equals("0.0000")){
  1815. discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
  1816. }
  1817. discountAmtNew = discountAmtNew.setScale(2, BigDecimal.ROUND_HALF_UP);
  1818. couponReckonAmt.setDiscountAmt(discountAmtNew.toString());
  1819. couponReckonAmt.setDiscountPrice(discountPriceNew.toString());
  1820. couponReckonAmt.setAmt(amtNew.toString());
  1821. break;
  1822. }
  1823. }else {
  1824. switch (uc.getCouponType()){
  1825. case "1":
  1826. //优惠券后的优惠金额
  1827. amtNew = new BigDecimal(receivableAmt).subtract(couponAmt);
  1828. amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
  1829. //优惠券后的优惠价格
  1830. if(!oilLiters.equals("0.0000")){
  1831. discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
  1832. }
  1833. discountAmtNew = new BigDecimal("0.00");
  1834. discountAmtNew = discountAmtNew.add(couponAmt);
  1835. couponReckonAmt.setDiscountAmt(discountAmtNew.toString());
  1836. couponReckonAmt.setDiscountPrice(discountPriceNew.toString());
  1837. couponReckonAmt.setAmt(amtNew.toString());
  1838. break;
  1839. case "2":
  1840. //优惠券后的优惠金额
  1841. BigDecimal zheKouAmt = new BigDecimal(receivableAmt).multiply(couponAmt).divide(new BigDecimal("100"));
  1842. discountAmtNew = new BigDecimal("0.00");
  1843. discountAmtNew = discountAmtNew.add(zheKouAmt);
  1844. amtNew = amtNew.subtract(discountAmtNew);
  1845. amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
  1846. //优惠券后的优惠价格
  1847. if(!oilLiters.equals("0.0000")){
  1848. discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
  1849. }
  1850. discountAmtNew = discountAmtNew.setScale(2, BigDecimal.ROUND_HALF_UP);
  1851. couponReckonAmt.setDiscountAmt(discountAmtNew.toString());
  1852. couponReckonAmt.setDiscountPrice(discountPriceNew.toString());
  1853. couponReckonAmt.setAmt(amtNew.toString());
  1854. break;
  1855. }
  1856. }
  1857. }
  1858. //表示电子卡
  1859. if("1".equals(p.getCardEnabledFlag())) {
  1860. if ("1".equals(uc.getIsCardFlag())) {
  1861. switch (uc.getCouponType()){
  1862. case "1":
  1863. //与电子卡共享
  1864. dzkAmtNew = new BigDecimal(dzkAmt).subtract(couponAmt);
  1865. dzkAmtNew = dzkAmtNew.signum() == -1 ? new BigDecimal("0.01") : dzkAmtNew.setScale(2, BigDecimal.ROUND_HALF_UP);
  1866. dzkDiscountAmtNew = dzkDiscountAmtNew.add(couponAmt);
  1867. couponReckonAmt.setDzkDiscountAmt(dzkDiscountAmtNew.toString());
  1868. couponReckonAmt.setDzkAmt(dzkAmtNew.toString());
  1869. if(!oilLiters.equals("0.0000")){
  1870. dzkDiscountPriceNew = dzkAmtNew.divide(new BigDecimal(oilLiters), 2 ,BigDecimal.ROUND_HALF_UP);
  1871. }
  1872. couponReckonAmt.setDzkDiscountPrice(dzkDiscountPriceNew.toString());
  1873. break;
  1874. case "2":
  1875. //与电子卡共享
  1876. BigDecimal zheKouDzkAmt = new BigDecimal(dzkAmt).multiply(couponAmt).divide(new BigDecimal("100"));
  1877. dzkDiscountAmtNew = dzkDiscountAmtNew.add(zheKouDzkAmt);
  1878. dzkAmtNew = dzkAmtNew.subtract(zheKouDzkAmt);
  1879. dzkAmtNew = dzkAmtNew.signum() == -1 ? new BigDecimal("0.01") : dzkAmtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
  1880. dzkDiscountAmtNew = dzkDiscountAmtNew.setScale(2, BigDecimal.ROUND_HALF_UP);
  1881. couponReckonAmt.setDzkDiscountAmt(dzkDiscountAmtNew.toString());
  1882. couponReckonAmt.setDzkAmt(dzkAmtNew.toString());
  1883. if(!oilLiters.equals("0.0000")){
  1884. dzkDiscountPriceNew = dzkAmtNew.divide(new BigDecimal(oilLiters), 2 ,BigDecimal.ROUND_HALF_UP);
  1885. }
  1886. couponReckonAmt.setDzkDiscountPrice(dzkDiscountPriceNew.toString());
  1887. break;
  1888. }
  1889. }else {
  1890. switch (uc.getCouponType()){
  1891. case "1":
  1892. //与电子卡共享
  1893. dzkAmtNew = new BigDecimal(receivableAmt).subtract(couponAmt);
  1894. dzkAmtNew = dzkAmtNew.signum() == -1 ? new BigDecimal("0.01") : dzkAmtNew.setScale(2, BigDecimal.ROUND_HALF_UP);
  1895. dzkDiscountAmtNew = new BigDecimal("0.00");
  1896. dzkDiscountAmtNew = dzkDiscountAmtNew.add(couponAmt);
  1897. couponReckonAmt.setDzkDiscountAmt(dzkDiscountAmtNew.toString());
  1898. couponReckonAmt.setDzkAmt(dzkAmtNew.toString());
  1899. if(!oilLiters.equals("0.0000")){
  1900. dzkDiscountPriceNew = dzkAmtNew.divide(new BigDecimal(oilLiters), 2 ,BigDecimal.ROUND_HALF_UP);
  1901. }
  1902. couponReckonAmt.setDzkDiscountPrice(dzkDiscountPriceNew.toString());
  1903. break;
  1904. case "2":
  1905. BigDecimal zheKouDzkAmt = new BigDecimal(receivableAmt).multiply(couponAmt).divide(new BigDecimal("100"));
  1906. dzkDiscountAmtNew = new BigDecimal("0.00");
  1907. dzkDiscountAmtNew = dzkDiscountAmtNew.add(zheKouDzkAmt);
  1908. dzkAmtNew = dzkAmtNew.subtract(dzkDiscountAmtNew);
  1909. dzkAmtNew = dzkAmtNew.signum() == -1 ? new BigDecimal("0.01") : dzkAmtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
  1910. dzkDiscountAmtNew = dzkDiscountAmtNew.setScale(2, BigDecimal.ROUND_HALF_UP);
  1911. couponReckonAmt.setDzkDiscountAmt(dzkDiscountAmtNew.toString());
  1912. couponReckonAmt.setDzkAmt(dzkAmtNew.toString());
  1913. if(!oilLiters.equals("0.0000")){
  1914. dzkDiscountPriceNew = dzkAmtNew.divide(new BigDecimal(oilLiters), 2 ,BigDecimal.ROUND_HALF_UP);
  1915. }
  1916. couponReckonAmt.setDzkDiscountPrice(dzkDiscountPriceNew.toString());
  1917. break;
  1918. }
  1919. }
  1920. }
  1921. return couponReckonAmt;
  1922. }
  1923. /*
  1924. * 获取领取方式
  1925. * @param stationId
  1926. * @return
  1927. */
  1928. public List<CouponIssue> getCouponIssue(Integer stationId){
  1929. CouponIssue c = new CouponIssue();
  1930. c.setStationId(stationId);
  1931. c.setIssueType("3");
  1932. c.setStatus("1");
  1933. List<CouponIssue> couponIssuesList = couponService.selectCouponIssueList(c);
  1934. return couponIssuesList;
  1935. }
  1936. /*
  1937. * 查询用户电子会员卡余额
  1938. * @param card
  1939. * @param params
  1940. * @return
  1941. */
  1942. public Map<String, String> selectCardBalance(CustomerElectronicCard card, Map params) {
  1943. CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
  1944. customerElectronicCard.setCardOilsType(card.getCardOilsType());
  1945. customerElectronicCard.setStationId(card.getStationId());
  1946. customerElectronicCard.setUnionId(card.getUnionId());
  1947. BigDecimal balance = new BigDecimal(0);
  1948. String cardOilsType1 ="";
  1949. Map<String, String> result = new HashMap<>();
  1950. CustomerCardSetting customerCardSetting = new CustomerCardSetting();
  1951. customerCardSetting.setStationId(card.getStationId());
  1952. if(params.get("cardRuleFlagGroup").equals("1")){ //
  1953. customerCardSetting.setStationId(Integer.valueOf(params.get("groupId").toString()));
  1954. customerElectronicCard.setStationId(Integer.valueOf(params.get("groupId").toString()));
  1955. }
  1956. List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
  1957. if(cardRechargeSettingList !=null && cardRechargeSettingList.size()>0){
  1958. String cardOilsTypeExist = cardRechargeSettingList.get(0).getCardOilsType();
  1959. String[] split = cardOilsTypeExist.split(",");
  1960. List<String> strings = Arrays.asList(split);
  1961. if(strings.contains(card.getCardOilsType())){
  1962. CustomerElectronicCard electronicCardInfo = electronicMembershipCardService.getElectronicCardInfoByUnionId(customerElectronicCard);
  1963. if(electronicCardInfo !=null){
  1964. //已存在卡
  1965. balance = electronicCardInfo.getAmt();
  1966. cardOilsType1 = electronicCardInfo.getCardOilsType();
  1967. result.put("balance",balance.toString());
  1968. result.put("oilsCardFlag", "1");
  1969. result.put("cardOilsType",cardOilsType1);
  1970. }else {
  1971. //如果油站已开启该卡,用户没有卡
  1972. String currentTime = String.valueOf(System.currentTimeMillis());
  1973. String customerNo = card.getStationId() + currentTime;
  1974. customerElectronicCard.setCustomerNo(customerNo);
  1975. customerElectronicCard.setAmt(new BigDecimal(0));
  1976. customerElectronicCard.setCreateTime(new Date());
  1977. customerElectronicCard.setCustomerName(card.getCustomerName());
  1978. customerElectronicCard.setMobilePhone(card.getMobilePhone());
  1979. electronicMembershipCardService.insetElectronicCard(customerElectronicCard);
  1980. CustomerElectronicCard electronicCardInfoNew = electronicMembershipCardService.getElectronicCardInfoByUnionId(customerElectronicCard);
  1981. balance = electronicCardInfoNew.getAmt();
  1982. result.put("balance",balance.toString());
  1983. result.put("oilsCardFlag", "1");
  1984. result.put("cardOilsType",electronicCardInfoNew.getCardOilsType());
  1985. }
  1986. }else {
  1987. result.put("oilsCardFlag", "0");
  1988. }
  1989. }else {
  1990. result.put("oilsCardFlag", "0");
  1991. }
  1992. return result;
  1993. }
  1994. /*
  1995. * 营销方案活动日优惠
  1996. * @param discountType 活动日时间类型
  1997. * @param discountDate 活动日时间字符串,格式:1,2,3,4,5
  1998. * @return
  1999. */
  2000. public boolean isActivityDay(String discountType, String discountDate){
  2001. boolean boo= false;
  2002. if(discountDate !=null && discountDate !=""){
  2003. String currentTime = null; //当前时间
  2004. String[] discountDateArray = discountDate.split(",");
  2005. Calendar calendar = Calendar.getInstance();
  2006. calendar.setTime(new Date()); //获取当前时间
  2007. switch (discountType){
  2008. case "1": // 1.按周来
  2009. int day_Week = calendar.get(Calendar.DAY_OF_WEEK);
  2010. day_Week= day_Week-1; //减一原因:数据库存的下标从零开始
  2011. currentTime = String.valueOf(day_Week);
  2012. break;
  2013. case "2": // 2.每月的 多少号
  2014. int day_month = calendar.get(Calendar.DAY_OF_MONTH);
  2015. day_month = day_month-1; //减一原因:数据库存的下标从零开始
  2016. currentTime = String.valueOf(day_month); //当前时间
  2017. break;
  2018. case "3": // 3.固定日期
  2019. currentTime =new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //当前时间
  2020. break;
  2021. }
  2022. //活动日优惠金额
  2023. for (String s : discountDateArray){
  2024. if(s.equals(currentTime)){
  2025. boo = true;
  2026. break;
  2027. }
  2028. }
  2029. }
  2030. return boo;
  2031. }
  2032. /*
  2033. * 根据订单号获取订单信息
  2034. * produces="application/json;charset=UTF-8",consumes = "application/json",
  2035. * @RequestBody String orderno
  2036. * @param
  2037. * @return
  2038. */
  2039. @RequestMapping(value = "/selectOrderInfoByOrdNo", method = RequestMethod.GET)
  2040. @ResponseBody
  2041. public String getPayOrderList(@RequestParam String orderNo){
  2042. Gson gson =new Gson();
  2043. ResultData resultData =null;
  2044. if(StringUtils.isNotBlank(orderNo)){
  2045. PayOrder payOrder = payOrderService.selectOrderInfoByOrdNo(orderNo);
  2046. resultData = ResultData.success(payOrder);
  2047. }else {
  2048. resultData=ResultData.error(CodeMsg.SEARCH_FAIL);
  2049. }
  2050. return gson.toJson(resultData);
  2051. }
  2052. /*
  2053. * 根据用户openId和用户类型userType查询用户订单
  2054. * @param openId
  2055. * @param userType
  2056. * @return
  2057. */
  2058. @RequestMapping(value = "/getOrderListByOpenIdAndUserType", method = RequestMethod.GET)
  2059. @ResponseBody
  2060. public String getOrderListByOpenIdAndUserType(@RequestParam("openId") String openId){
  2061. Gson gson =new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
  2062. ResultData resultData =null;
  2063. if(StringUtils.isNotBlank(openId)){
  2064. AppUserInfo appUserInfo = new AppUserInfo();
  2065. appUserInfo.setMinaOpenid(openId);
  2066. // switch (userType){
  2067. // case "1":
  2068. // appUserInfo.setMinaOpenid(openId);
  2069. // break;
  2070. // case "2":
  2071. // appUserInfo.setALiId(openId);
  2072. // break;
  2073. // }
  2074. List<PayOrder> payOrderList = payOrderService.getOrderListByOpenIdAndUserType(appUserInfo);
  2075. resultData=ResultData.success(payOrderList);
  2076. }else {
  2077. resultData=ResultData.error(CodeMsg.SEARCH_FAIL);
  2078. }
  2079. return gson.toJson(resultData);
  2080. }
  2081. /*
  2082. * 根据用户unionId和stationId查询用户订单
  2083. */
  2084. @RequestMapping(value = "/getUserOrderListByUnionId", method = RequestMethod.POST)
  2085. @ResponseBody
  2086. public String getUserOrderListByUnionId(@RequestBody AppUserInfo request){
  2087. Gson gson =new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
  2088. ResultData resultData =null;
  2089. if(StringUtils.isNotBlank(request.getUnionId()) && request.getStationId() !=null){
  2090. AppUserInfo appUserInfo = new AppUserInfo();
  2091. appUserInfo.setUnionId(request.getUnionId());
  2092. if(request.getPageNum() !=null && request.getPageSize() !=null){
  2093. //Map<String, Object> resultMap = new HashMap<>();
  2094. StationInfo s = new StationInfo();
  2095. s.setStationId(request.getStationId());
  2096. StationInfo stationInfo = stationService.selectStationInfo(s);
  2097. if (stationInfo !=null){
  2098. String jiBie = stationInfo.getJiBie();
  2099. switch (jiBie){
  2100. case "1":
  2101. appUserInfo.setStaJiBie("1");
  2102. break;
  2103. case "2":
  2104. appUserInfo.setStaJiBie("2");
  2105. break;
  2106. }
  2107. appUserInfo.setPayType(request.getPayType());
  2108. appUserInfo.setStationId(request.getStationId());
  2109. PageHelper.startPage(request.getPageNum(), request.getPageSize());
  2110. List<PayOrder> payOrderList = payOrderService.getUserOrderListByUnionId(appUserInfo);
  2111. PageInfo pageInfo = new PageInfo(payOrderList);
  2112. resultData = ResultData.success(pageInfo);
  2113. }else {
  2114. resultData = ResultData.error(CodeMsg.SEARCH_FAIL);
  2115. }
  2116. }else {
  2117. resultData = ResultData.error(CodeMsg.PARAMS_NUll);
  2118. }
  2119. }else {
  2120. resultData=ResultData.error(CodeMsg.PARAMS_NUll);
  2121. }
  2122. return gson.toJson(resultData);
  2123. }
  2124. //支付宝支付生成订单
  2125. @RequestMapping(value = "/AddPayOrderFromAliPay", consumes = "application/json", method = RequestMethod.POST)
  2126. @ResponseBody
  2127. @Transactional
  2128. public String AddPayOrderFromAliPay(@RequestBody PayOrderRequest payOrderRequest){
  2129. logger.info("支付宝支付----生成订单前端传来参数油站ID:"+payOrderRequest.getStationId()+"; 用户openId(用户的userId):"+ payOrderRequest.getOpenId() +";");
  2130. Gson gson =new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
  2131. ResultData resultData =null;
  2132. PayOrder payOrder = new PayOrder(); //生成订单参数
  2133. StationInfo stationInfo = new StationInfo();
  2134. stationInfo.setStationId(payOrderRequest.getStationId());
  2135. StationInfo stationInfos = stationService.selectStationInfo(stationInfo);
  2136. Map<String ,Object> resultMap = new HashMap<>(); //返回结果集
  2137. if(stationInfos !=null) {
  2138. if(stationInfos.getIsAliPayFlag() !=null && stationInfos.getIsAliPayFlag().equals("1")){
  2139. payOrder.setStationName(stationInfos.getStationName());
  2140. //获取油站图片和名称
  2141. resultMap.put("stationPic", stationInfos.getStationPic());
  2142. resultMap.put("stationName", stationInfos.getStationName());
  2143. payOrder.setConsumer(payOrderRequest.getCustomerName()); //昵称
  2144. payOrder.setConsumerId(1); //用户id
  2145. Random random = new Random();
  2146. String result = "";
  2147. for (int i = 0; i < 6; i++) {
  2148. result += random.nextInt(10);
  2149. }
  2150. String ordNo = System.nanoTime() + result;
  2151. payOrder.setOrderNo(ordNo); //订单号
  2152. logger.info("生成的订单号:" + ordNo);
  2153. payOrder.setDiscountCouponAmt(payOrderRequest.getDiscountCouponAmt()); //优惠劵金额
  2154. payOrder.setDiscountCoupon(payOrderRequest.getDiscountCoupon()); //优惠券
  2155. payOrder.setCarNo(payOrderRequest.getCarNo()); //车牌号、
  2156. payOrder.setCustomerGrade(payOrderRequest.getCustomerGrade()); //客户电话
  2157. payOrder.setMemberNo(payOrderRequest.getMemberNo()); //会员卡号
  2158. payOrder.setMemberAmt(payOrderRequest.getMemberAmt()); //会员支付金额
  2159. payOrder.setScore(payOrderRequest.getScore()); //积分
  2160. payOrder.setStationId(payOrderRequest.getStationId()); //油站id
  2161. payOrder.setStatus("0"); //创建订单 未支付状态 0
  2162. payOrder.setCreatedDate(new Timestamp(new Date().getTime())); //创建时间
  2163. payOrder.setOrderType(payOrderRequest.getOrderType()); //订单类型
  2164. payOrder.setOilGun(payOrderRequest.getOilGun()); //油枪号
  2165. payOrder.setReceivableAmt(Double.valueOf(payOrderRequest.getReceivableAmt())); //订单应收金额
  2166. String oilName = payOrderRequest.getOilName();
  2167. //获取该油品所属哪一类
  2168. Oil oil = new Oil();
  2169. oil.setOilName(oilName);
  2170. oil.setDictType("oil_name");
  2171. Oil oilInfo = sysDictDataService.selectOilType(oil);
  2172. payOrder.setOilType(oilInfo.getOilsType()); //油品类型
  2173. resultMap.put("cardOilsType", oilInfo.getOilsType());
  2174. String oilsType = oilInfo.getOilsType(); //获取订单类型
  2175. logger.info("订单油品类型:" + oilsType);
  2176. if(oilsType.equals("3")) { //订单类型是油品时计算
  2177. payOrder.setOrderType("2");
  2178. }else {
  2179. payOrder.setOrderType("1");
  2180. }
  2181. payOrder.setOilName(oilName); //油品名称
  2182. payOrder.setAmt(Double.valueOf(payOrderRequest.getReceivableAmt()));
  2183. payOrder.setDiscountAmt(Double.valueOf("0.00"));
  2184. Map<String, Object> map = new HashMap<>();
  2185. map.put("oilName", oilName);
  2186. map.put("stationId", payOrderRequest.getStationId());
  2187. //获取油站油品价格 优惠方案 是否开启电子卡
  2188. Map<String, Object> resultOilPrice = stationService.selectStationOilPriceAndDiscountSetting(map);
  2189. BigDecimal oilPrice = new BigDecimal(resultOilPrice.get("oilPrice").toString()); //油站油品价格
  2190. payOrder.setOilPirce(resultOilPrice.get("oilPrice").toString());
  2191. BigDecimal orderLiters = new BigDecimal(payOrderRequest.getReceivableAmt()).divide(oilPrice, 4, BigDecimal.ROUND_HALF_UP);
  2192. payOrder.setOrderLiters(orderLiters.toString());
  2193. if(stationInfos.getIsLngFlagGroup() !=null && stationInfos.getIsLngFlagGroup().equals("1")){
  2194. //如果是加气站
  2195. payOrder.setSellAmt(Double.valueOf(payOrderRequest.getReceivableAmt()));
  2196. payOrder.setSellDiscountAmt(Double.valueOf("0.00"));
  2197. payOrder.setSellOilPrice(Double.valueOf(resultOilPrice.get("oilPrice").toString()));
  2198. payOrder.setDriverDiscountAmt(Double.valueOf("0.00"));
  2199. payOrder.setDriverOilPrice(Double.valueOf(resultOilPrice.get("oilPrice").toString()));
  2200. resultMap.put("driverDiscountAmt", "0.00");
  2201. resultMap.put("sellDiscountAmt", "0.00");
  2202. }
  2203. resultMap.put("discountAmt", "0.00"); //优惠价格
  2204. resultMap.put("amt", payOrderRequest.getReceivableAmt()); //实收价格
  2205. resultMap.put("receivableAmt", payOrderRequest.getReceivableAmt()); //应收价格
  2206. resultMap.put("oilLiters", orderLiters.toString());
  2207. resultMap.put("discountPrice", oilPrice);
  2208. BigDecimal discountPrice = oilPrice;
  2209. BigDecimal amt = new BigDecimal(payOrderRequest.getReceivableAmt());
  2210. BigDecimal discountAmt = new BigDecimal("0.00");
  2211. BigDecimal receivableAmt = new BigDecimal(payOrderRequest.getReceivableAmt());
  2212. //表示支付宝支付只走满减
  2213. if(stationInfos.getDiscountSetting() !=null && stationInfos.getDiscountSetting().equals("1")){
  2214. Map<String ,Object> params = new HashMap<>();
  2215. params.put("discountPlanType", "1");
  2216. params.put("stationId", payOrderRequest.getStationId().toString());
  2217. params.put("oilName", oilName);
  2218. List<Map> customerMarkertPlanList = customerGradeServices.getCustomerMarkertPlanList(params);
  2219. if(customerMarkertPlanList !=null && customerMarkertPlanList.size() >0) {
  2220. BigDecimal discountAmt_b = new BigDecimal(customerMarkertPlanList.get(0).get("discountAmt").toString()); //条件金额
  2221. BigDecimal gasoilDiscountAmt_b = new BigDecimal(customerMarkertPlanList.get(0).get("gasoilDiscountAmt").toString()); //享受的优惠
  2222. if (receivableAmt.compareTo(discountAmt_b) == 1 || receivableAmt.compareTo(discountAmt_b) == 0) {
  2223. discountAmt = receivableAmt.divide(discountAmt_b, 2, BigDecimal.ROUND_HALF_UP).multiply(gasoilDiscountAmt_b); //优惠金额
  2224. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  2225. //会员活动是否开启:1是;0否'
  2226. if (customerMarkertPlanList.get(0).containsKey("discountSettingFlag") && customerMarkertPlanList.get(0).get("discountSettingFlag").toString() != "") {
  2227. String discountSettingFlag = customerMarkertPlanList.get(0).get("discountSettingFlag").toString();
  2228. if (discountSettingFlag != null && discountSettingFlag.equals("1")) {
  2229. String discountType = customerMarkertPlanList.get(0).get("discountType").toString(); //会员日周期类型设置
  2230. String discountDate = customerMarkertPlanList.get(0).get("discountDate").toString(); //按固定日期
  2231. String discountActivityAmt = customerMarkertPlanList.get(0).get("discountActivityAmt").toString(); //会员日优惠金额
  2232. //当前时间是否是会员日
  2233. if (StringUtils.isNotBlank(discountType) && StringUtils.isNotBlank(discountDate) && StringUtils.isNotBlank(discountActivityAmt)) {
  2234. boolean b = isActivityDay(discountType, discountDate);
  2235. if (b) {
  2236. discountAmt = receivableAmt.divide(discountAmt_b, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(discountActivityAmt)); //优惠金额
  2237. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  2238. }
  2239. }
  2240. }
  2241. }
  2242. amt = receivableAmt.subtract(discountAmt); //应收金额
  2243. amt = amt.toString().equals("0.00") ? new BigDecimal("0.01") : amt;
  2244. amt = amt.signum() == -1 ? new BigDecimal("0.01") : amt;
  2245. discountPrice = orderLiters.equals(new BigDecimal("0.0000")) ? discountPrice : amt.divide(orderLiters, 2, BigDecimal.ROUND_HALF_UP); //优惠价格
  2246. discountPrice = discountPrice.compareTo(oilPrice) == 1 ? oilPrice : discountPrice;
  2247. }
  2248. }
  2249. payOrder.setAmt(Double.valueOf(amt.toString()));
  2250. payOrder.setDiscountAmt(Double.valueOf(discountAmt.toString()));
  2251. resultMap.put("discountAmt", discountAmt.toString()); //优惠价格
  2252. resultMap.put("amt", amt.toString()); //实收价格
  2253. resultMap.put("discountPrice", discountPrice.toString());
  2254. }
  2255. //表示支付宝支付只走立减
  2256. if(stationInfos.getDiscountSetting() !=null && stationInfos.getDiscountSetting().equals("2")){
  2257. Map<String ,Object> params = new HashMap<>();
  2258. params.put("discountPlanType", "2");
  2259. params.put("stationId", payOrderRequest.getStationId().toString());
  2260. params.put("oilName", oilName);
  2261. List<Map> customerMarkertPlanList = customerGradeServices.getCustomerMarkertPlanList(params);
  2262. if(customerMarkertPlanList !=null && customerMarkertPlanList.size() >0){
  2263. BigDecimal discountAmt_b = new BigDecimal(customerMarkertPlanList.get(0).get("discountAmt").toString()); //条件金额
  2264. BigDecimal gasoilDiscountAmt_b = new BigDecimal(customerMarkertPlanList.get(0).get("gasoilDiscountAmt").toString()); //享受的优惠
  2265. if(receivableAmt.compareTo(discountAmt_b) == 1 || receivableAmt.compareTo(discountAmt_b) == 0){
  2266. discountAmt = receivableAmt.divide(discountAmt_b, 2, BigDecimal.ROUND_HALF_UP).multiply(gasoilDiscountAmt_b); //优惠金额
  2267. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  2268. //会员活动是否开启:1是;0否'
  2269. if(customerMarkertPlanList.get(0).containsKey("discountSettingFlag") && customerMarkertPlanList.get(0).get("discountSettingFlag").toString() !=""){
  2270. String discountSettingFlag = customerMarkertPlanList.get(0).get("discountSettingFlag").toString();
  2271. if(discountSettingFlag !=null && discountSettingFlag.equals("1")){
  2272. String discountType = customerMarkertPlanList.get(0).get("discountType").toString(); //会员日周期类型设置
  2273. String discountDate = customerMarkertPlanList.get(0).get("discountDate").toString(); //按固定日期
  2274. String discountActivityAmt = customerMarkertPlanList.get(0).get("discountActivityAmt").toString(); //会员日优惠金额
  2275. //当前时间是否是会员日
  2276. if(StringUtils.isNotBlank(discountType) && StringUtils.isNotBlank(discountDate) && StringUtils.isNotBlank(discountActivityAmt)){
  2277. boolean b = isActivityDay(discountType, discountDate);
  2278. if(b){
  2279. discountAmt = receivableAmt.divide(discountAmt_b, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(discountActivityAmt)); //优惠金额
  2280. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  2281. }
  2282. }
  2283. }
  2284. }
  2285. amt = receivableAmt.subtract(discountAmt); //应收金额
  2286. amt = amt.toString().equals("0.00") ? new BigDecimal("0.01") : amt;
  2287. amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
  2288. discountPrice = orderLiters.equals(new BigDecimal("0.0000")) ? discountPrice : amt.divide(orderLiters, 2, BigDecimal.ROUND_HALF_UP); //优惠价格
  2289. discountPrice =discountPrice.compareTo(oilPrice) == 1 ? oilPrice : discountPrice;
  2290. }
  2291. }
  2292. payOrder.setAmt(Double.valueOf(amt.toString()));
  2293. payOrder.setDiscountAmt(Double.valueOf(discountAmt.toString()));
  2294. resultMap.put("discountAmt", discountAmt.toString()); //优惠价格
  2295. resultMap.put("amt", amt.toString()); //实收价格
  2296. resultMap.put("discountPrice", discountPrice.toString());
  2297. }
  2298. //表示支付宝支付只走直降
  2299. if(stationInfos.getDiscountSetting() !=null && stationInfos.getDiscountSetting().equals("3")){
  2300. //只有直降
  2301. Map<String ,Object> params = new HashMap<>();
  2302. params.put("discountPlanType", "3");
  2303. params.put("stationId", payOrderRequest.getStationId().toString());
  2304. params.put("oilName", oilName);
  2305. List<Map> customerMarkertPlanList = customerGradeServices.getCustomerMarkertPlanList(params);
  2306. if(customerMarkertPlanList !=null && customerMarkertPlanList.size() >0){
  2307. BigDecimal discountAmt_b = new BigDecimal(customerMarkertPlanList.get(0).get("discountAmt").toString()); //条件金额
  2308. BigDecimal gasoilDiscountAmt_b = new BigDecimal(customerMarkertPlanList.get(0).get("gasoilDiscountAmt").toString());
  2309. String discountTerm = customerMarkertPlanList.get(0).get("discountTerm").toString();
  2310. String discountSettingFlag;
  2311. switch (discountTerm){
  2312. case "1": //按照加油升数
  2313. if(orderLiters.compareTo(discountAmt_b) == 1 || orderLiters.compareTo(discountAmt_b) ==0){
  2314. discountPrice = oilPrice.subtract(gasoilDiscountAmt_b);
  2315. if(discountPrice.compareTo(oilPrice) ==0){
  2316. amt = new BigDecimal(payOrderRequest.getReceivableAmt());
  2317. discountAmt = new BigDecimal("0.00");
  2318. }else {
  2319. amt = discountPrice.multiply(orderLiters);
  2320. discountAmt = receivableAmt.subtract(amt);
  2321. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  2322. }
  2323. //会员活动是否开启:1是;0否'
  2324. if(customerMarkertPlanList.get(0).containsKey("discountSettingFlag") && customerMarkertPlanList.get(0).get("discountSettingFlag").toString() !="") {
  2325. discountSettingFlag = customerMarkertPlanList.get(0).get("discountSettingFlag").toString();
  2326. if (discountSettingFlag != null && discountSettingFlag.equals("1")) {
  2327. String discountType = customerMarkertPlanList.get(0).get("discountType").toString(); //会员日周期类型设置
  2328. String discountDate = customerMarkertPlanList.get(0).get("discountDate").toString(); //按固定日期
  2329. String discountActivityAmt = customerMarkertPlanList.get(0).get("discountActivityAmt").toString(); //会员日优惠金额
  2330. if (StringUtils.isNotBlank(discountType) && StringUtils.isNotBlank(discountDate) && StringUtils.isNotBlank(discountActivityAmt)) {
  2331. //当前时间是否是活动会员日
  2332. boolean b = isActivityDay(discountType, discountDate);
  2333. if (b) {
  2334. discountPrice = oilPrice.subtract(new BigDecimal(discountActivityAmt));
  2335. if(discountPrice.compareTo(oilPrice) == 0){
  2336. amt = amt;
  2337. discountAmt = discountAmt;
  2338. }else {
  2339. amt = discountPrice.multiply(orderLiters);
  2340. discountAmt = receivableAmt.subtract(amt);
  2341. //discountAmt = oilLiters.multiply(new BigDecimal(discountActivityAmt));
  2342. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  2343. }
  2344. }
  2345. }
  2346. }
  2347. }
  2348. }
  2349. break;
  2350. case "2": //按照加油金额
  2351. if(receivableAmt.compareTo(discountAmt_b) ==1 || receivableAmt.compareTo(discountAmt_b) ==0){
  2352. discountPrice = oilPrice.subtract(gasoilDiscountAmt_b);
  2353. if(discountPrice.compareTo(oilPrice) == 0){
  2354. //
  2355. amt = receivableAmt;
  2356. discountAmt = new BigDecimal("0.00");
  2357. }else {
  2358. //
  2359. amt = discountPrice.multiply(orderLiters);
  2360. discountAmt = receivableAmt.subtract(amt);
  2361. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  2362. }
  2363. //会员活动是否开启:1是;0否'
  2364. if(customerMarkertPlanList.get(0).containsKey("discountSettingFlag") && customerMarkertPlanList.get(0).get("discountSettingFlag").toString() !="") {
  2365. discountSettingFlag = customerMarkertPlanList.get(0).get("discountSettingFlag").toString();
  2366. if (discountSettingFlag != null && discountSettingFlag.equals("1")) {
  2367. String discountType = customerMarkertPlanList.get(0).get("discountType").toString(); //会员日周期类型设置
  2368. String discountDate = customerMarkertPlanList.get(0).get("discountDate").toString(); //按固定日期
  2369. String discountActivityAmt = customerMarkertPlanList.get(0).get("discountActivityAmt").toString(); //会员日优惠金额
  2370. if (StringUtils.isNotBlank(discountType) && StringUtils.isNotBlank(discountDate) && StringUtils.isNotBlank(discountActivityAmt)) {
  2371. //当前时间是否是活动会员日
  2372. boolean b = isActivityDay(discountType, discountDate);
  2373. if (b) {
  2374. discountPrice = oilPrice.subtract(new BigDecimal(discountActivityAmt));
  2375. if(discountPrice.compareTo(oilPrice) == 0){
  2376. amt = amt;
  2377. discountAmt = discountAmt;
  2378. }else {
  2379. amt = discountPrice.multiply(orderLiters);
  2380. discountAmt = receivableAmt.subtract(amt);
  2381. //discountAmt = oilLiters.multiply(new BigDecimal(discountActivityAmt));
  2382. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  2383. }
  2384. }
  2385. }
  2386. }
  2387. }
  2388. }
  2389. break;
  2390. }
  2391. }
  2392. amt = amt.setScale(2, BigDecimal.ROUND_HALF_UP);
  2393. if(amt.toString().equals("0.00")){
  2394. amt = new BigDecimal("0.01");
  2395. }
  2396. amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
  2397. payOrder.setAmt(Double.valueOf(amt.toString()));
  2398. payOrder.setDiscountAmt(Double.valueOf(discountAmt.toString()));
  2399. resultMap.put("discountAmt", discountAmt.toString()); //优惠价格
  2400. resultMap.put("amt", amt.toString()); //实收价格
  2401. resultMap.put("discountPrice", discountPrice.toString());
  2402. }
  2403. //表示支付宝支付只走阶梯
  2404. if(stationInfos.getDiscountSetting() !=null && stationInfos.getDiscountSetting().equals("4")){
  2405. Map<String ,Object> params = new HashMap<>();
  2406. params.put("discountPlanType", "4");
  2407. params.put("stationId", payOrderRequest.getStationId().toString());
  2408. params.put("oilName", oilName);
  2409. List<Map> customerMarkertPlanList = customerGradeServices.getCustomerMarkertPlanList(params);
  2410. if(customerMarkertPlanList !=null && customerMarkertPlanList.size() >0){
  2411. for(Map m : customerMarkertPlanList){
  2412. BigDecimal discountAmt_b = new BigDecimal(m.get("discountAmt").toString()); //条件金额
  2413. BigDecimal gasoilDiscountAmt_b = new BigDecimal(m.get("gasoilDiscountAmt").toString());
  2414. String discountTerm = m.get("discountTerm").toString();
  2415. if(discountTerm.equals("1")){
  2416. if(orderLiters.compareTo(discountAmt_b) ==1 || orderLiters.compareTo(discountAmt_b) ==0){
  2417. discountPrice = oilPrice.subtract(gasoilDiscountAmt_b);
  2418. if(discountPrice.compareTo(oilPrice) ==0){
  2419. amt = receivableAmt;
  2420. discountAmt = new BigDecimal("0.00");
  2421. }else {
  2422. amt = discountPrice.multiply(orderLiters);
  2423. discountAmt = receivableAmt.subtract(amt);
  2424. //discountAmt = oilLiters.multiply(gasoilDiscountAmt_b);
  2425. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  2426. }
  2427. break;
  2428. }
  2429. }else if(discountTerm.equals("2")){
  2430. if(receivableAmt.compareTo(discountAmt_b) ==1 || receivableAmt.compareTo(discountAmt_b) ==0){
  2431. discountPrice = oilPrice.subtract(gasoilDiscountAmt_b);
  2432. if(discountPrice.compareTo(oilPrice) == 0){
  2433. amt = receivableAmt;
  2434. discountAmt = new BigDecimal("0.00");
  2435. }else {
  2436. amt = discountPrice.multiply(orderLiters);
  2437. discountAmt = receivableAmt.subtract(amt);
  2438. //discountAmt = oilLiters.multiply(gasoilDiscountAmt_b);
  2439. discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
  2440. }
  2441. break;
  2442. }
  2443. }
  2444. }
  2445. }
  2446. //amt = receivableAmt.subtract(discountAmt); //应收金额
  2447. amt = amt.setScale(2, BigDecimal.ROUND_HALF_UP);
  2448. if(amt.toString().equals("0.00")){
  2449. amt = new BigDecimal("0.01");
  2450. }
  2451. amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
  2452. payOrder.setAmt(Double.valueOf(amt.toString()));
  2453. payOrder.setDiscountAmt(Double.valueOf(discountAmt.toString()));
  2454. resultMap.put("discountAmt", discountAmt.toString()); //优惠价格
  2455. resultMap.put("amt", amt.toString()); //实收价格
  2456. resultMap.put("discountPrice", discountPrice.toString());
  2457. }
  2458. //返回订单号
  2459. resultMap.put("ordNo", ordNo);
  2460. //表示为一人一码:一个加油员一个码
  2461. Map<String, Object> params = new HashMap<>();
  2462. params.put("personnelId", payOrderRequest.getPersonnelId());
  2463. params.put("stationId", payOrderRequest.getStationId());
  2464. List<Map<String, Object>> list = stationOilGunService.selectOilGunByPersonalId(params);
  2465. if (list != null && list.size() > 0) {
  2466. if (list.get(0).containsKey("personnelName") && list.get(0).get("personnelName") != null && list.get(0).get("personnelName").toString() != "") {
  2467. payOrder.setOilPersonnel(list.get(0).get("personnelName").toString());
  2468. payOrder.setOilPersonnelId(list.get(0).get("personnelId").toString());
  2469. }
  2470. payOrderMapper.insertSelective(payOrder);
  2471. logger.info("返回前端的结果:" +resultMap.toString());
  2472. resultData = ResultData.success(resultMap);
  2473. }else {
  2474. //根据油站和油枪获取加油员
  2475. HashMap<String, Object> params_1 = new HashMap<>();
  2476. params_1.put("oliGunNo", payOrderRequest.getOilGun());
  2477. params_1.put("stationId", payOrderRequest.getStationId());
  2478. List<Map> mapResultList = payOrderMapper.selectPersonelName(params_1); //使用list原因:一个枪号对应多个加油员场景
  2479. logger.info("加油员信息:"+ mapResultList.toString());
  2480. if(mapResultList != null && mapResultList.size() == 1){
  2481. String oilPersonnel = "";
  2482. String oilPersonnelId ="";
  2483. for (Map per : mapResultList){
  2484. if(per.containsKey("personnelName") && per.get("personnelName").toString() !=null && per.get("personnelName").toString() !=""){
  2485. oilPersonnel += per.get("personnelName").toString() +",";
  2486. oilPersonnelId += per.get("personnelId").toString() +",";
  2487. }
  2488. }
  2489. if(oilPersonnel !=""){
  2490. payOrder.setOilPersonnel(oilPersonnel.substring(0, oilPersonnel.length()-1)); //加油员
  2491. payOrder.setOilPersonnelId(oilPersonnelId.substring(0, oilPersonnelId.length()-1));
  2492. }
  2493. payOrderMapper.insertSelective(payOrder);
  2494. logger.info("返回前端的结果:" +resultMap.toString());
  2495. resultData = ResultData.success(resultMap);
  2496. }else {
  2497. resultData = ResultData.error(CodeMsg.MORE_PERSONNAL);
  2498. }
  2499. }
  2500. }else {
  2501. resultData = ResultData.error(CodeMsg.NOT_ALIPAY);
  2502. }
  2503. }else {
  2504. resultData = ResultData.error(CodeMsg.STATION_NULL_INFO);
  2505. }
  2506. return gson.toJson(resultData);
  2507. }
  2508. }