ElectronicMembershipCardController.java 90 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436
  1. package com.platform.yijia.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.alibaba.fastjson.parser.Feature;
  5. import com.google.gson.Gson;
  6. import com.platform.yijia.param.request.RechargeBalance;
  7. import com.platform.yijia.pojo.*;
  8. import com.platform.yijia.service.*;
  9. import com.platform.yijia.utils.*;
  10. import com.platform.yijia.utils.weixinapp.WxPushUtil;
  11. import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
  12. import org.apache.commons.lang3.StringUtils;
  13. import org.slf4j.Logger;
  14. import org.slf4j.LoggerFactory;
  15. import org.springframework.stereotype.Controller;
  16. import org.springframework.transaction.annotation.Transactional;
  17. import org.springframework.web.bind.annotation.*;
  18. import javax.annotation.Resource;
  19. import java.math.BigDecimal;
  20. import java.text.ParseException;
  21. import java.text.SimpleDateFormat;
  22. import java.util.*;
  23. /*
  24. * <Title> ElectronicMembershipCardController </Title>
  25. * <Description> 电子会员卡(储蓄卡)功能模块 </Description>
  26. * @Author JK
  27. * @Date 2021年3月22日
  28. */
  29. @Controller
  30. @RequestMapping("/demo")
  31. public class ElectronicMembershipCardController {
  32. private static Logger logger =(Logger) LoggerFactory.getLogger(ElectronicMembershipCardController.class);
  33. @Resource
  34. private ElectronicMembershipCardService electronicMembershipCardService;
  35. @Resource
  36. private StationService stationService;
  37. @Resource
  38. private GzhNewsTemplateService gzhNewsTemplateService;
  39. @Resource
  40. private WxPushUtil wxPushUtil;
  41. @Resource
  42. private PayOrderService payOrderService;
  43. @Resource
  44. private CustomerGradeServices customerGradeServices;
  45. @Resource
  46. private CustomerManagerService customerManagerService;
  47. @Resource
  48. private CustomerPointsService customerPointsService;
  49. @Resource
  50. private IntegralRuleService integralRuleService;
  51. @Resource
  52. private CustomerPointsRecordService customerPointsRecordService;
  53. @Resource
  54. private StationOilGunService stationOilGunService;
  55. //查询该油站是否启用电子会员卡
  56. @RequestMapping(value = "/getStationCardEnabledFlag", method = RequestMethod.GET)
  57. @ResponseBody
  58. public String getStationCardEnabledFlag(@RequestParam Integer stationId){
  59. Gson gson =new Gson();
  60. //返回结果集
  61. ResultData resultData = null;
  62. if(stationId !=null){
  63. String stationCardEnabledFlag = electronicMembershipCardService.getStationCardEnabledFlag(stationId);
  64. resultData = ResultData.success(stationCardEnabledFlag);
  65. }else {
  66. resultData = ResultData.error(CodeMsg.REQUEST_FAIL);
  67. }
  68. return gson.toJson(resultData);
  69. }
  70. //获取用户电子会员卡(储蓄卡)列表
  71. @RequestMapping(value = "/getElectronicCardList", method = RequestMethod.GET)
  72. @ResponseBody
  73. public String getElectronicCardList(@RequestParam Integer stationId, String unionId){
  74. Gson gson =new Gson();
  75. //返回结果集
  76. ResultData resultData = null;
  77. logger.info("获取用户电子会员卡信息参数:油站ID:"+ stationId+"用户unionId:"+unionId);
  78. if(stationId !=null && unionId !=null && unionId !=""){
  79. String stationCardEnabledFlag = electronicMembershipCardService.getStationCardEnabledFlag(stationId);
  80. if(stationCardEnabledFlag.equals("1")){
  81. CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
  82. customerElectronicCard.setStationId(stationId);
  83. customerElectronicCard.setUnionId(unionId);
  84. List<CustomerElectronicCard> electronicCardList = electronicMembershipCardService.getElectronicCardList(customerElectronicCard);
  85. resultData = ResultData.success(electronicCardList);
  86. }else {
  87. resultData = ResultData.error(CodeMsg.NO_CARDENABLEFLAG);
  88. }
  89. }else {
  90. resultData = ResultData.error(CodeMsg.REQUEST_FAIL);
  91. }
  92. return gson.toJson(resultData);
  93. }
  94. //用户充值电子会员卡(储蓄卡)生成充值记录
  95. @RequestMapping(value = "/rechargeBalance", consumes = "application/json", method = RequestMethod.POST)
  96. @ResponseBody
  97. @Transactional
  98. public String rechargeBalance(@RequestBody RechargeBalance rechargeBalance){
  99. Gson gson =new Gson();
  100. //返回结果集
  101. ResultData resultData = null;
  102. if(rechargeBalance !=null){
  103. BigDecimal amt = new BigDecimal(rechargeBalance.getAmt());
  104. //String openId = rechargeBalance.getOpenId(); //公众号的openId
  105. Integer stationId = rechargeBalance.getStationId();
  106. //BigDecimal presentAmt = new BigDecimal(rechargeBalance.getPresentAmt());
  107. String payType = rechargeBalance.getPayType();
  108. String customerName = rechargeBalance.getCustomerName();
  109. String cardOilsType = rechargeBalance.getCardOilsType();
  110. String unionId = rechargeBalance.getUnionId();
  111. String stationName = rechargeBalance.getStationName();
  112. String stationCardEnabledFlag = electronicMembershipCardService.getStationCardEnabledFlag(stationId);
  113. logger.info("充值金额:"+amt);
  114. logger.info("支付类型:"+payType);
  115. logger.info("充值卡类型:"+cardOilsType);
  116. logger.info("充值金额:"+amt);
  117. logger.info("油站ID:"+stationId);
  118. logger.info("充值unionId:"+unionId);
  119. //是否启用电子卡功能
  120. if(stationCardEnabledFlag.equals("1")){
  121. CustomerCardUseRecord customerCardUseRecord = new CustomerCardUseRecord(); //电子会员卡使用记录
  122. CustomerCardSetting customerCardSetting = new CustomerCardSetting(); //电子卡优惠规则设置
  123. customerCardSetting.setStationId(stationId);
  124. customerCardSetting.setCardOilsType(cardOilsType);
  125. customerCardSetting.setOrderBy("DESC");
  126. //获取用户要充值电子卡的优惠规则信息
  127. List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
  128. if(cardRechargeSettingList !=null && cardRechargeSettingList.size() ==1){
  129. String discountTime = cardRechargeSettingList.get(0).getDiscountTime();
  130. //stationName = cardRechargeSettingList.get(0).getStationName();
  131. String[] dctime={}; //会员充值活动时间
  132. if(discountTime.contains(",")){
  133. dctime =discountTime.split(",");
  134. }else {
  135. dctime =new String[1];
  136. dctime[0] = discountTime;
  137. }
  138. String currentTime =null;
  139. Calendar calendar = Calendar.getInstance();
  140. calendar.setTime(new Date()); //获取当前时间
  141. //循环优惠规则明细
  142. for (CustomerCardSettingDetail cardDetail : cardRechargeSettingList.get(0).getCustomerCardSettingDetailList()){
  143. if(amt.compareTo(cardDetail.getDiscountAmtStart()) ==1 || amt.compareTo(cardDetail.getDiscountAmtStart()) ==0){
  144. //String isDiscountCoupon = cardRechargeSettingList.get(0).getIsDiscountCoupon(); //是否使用优惠券
  145. //充值优惠类型
  146. if(cardDetail.getSettingRuleType().equals("1")){ //按充值金额
  147. BigDecimal presentAmt = cardDetail.getPresentAmt(); //当前赠送金额
  148. if(cardRechargeSettingList.get(0).getDiscountTimeSetting().equals("1") && dctime !=null){
  149. String discountTimeType = cardRechargeSettingList.get(0).getDiscountTimeType(); //获取日期类型
  150. switch (discountTimeType){
  151. case "1": // 1.按周来
  152. int day_Week = calendar.get(Calendar.DAY_OF_WEEK);
  153. day_Week= day_Week-1; //减一原因:数据库存的下标从零开始
  154. currentTime = String.valueOf(day_Week);
  155. break;
  156. case "2": // 2.每月的多少号
  157. int day_month = calendar.get(Calendar.DAY_OF_MONTH);
  158. day_month = day_month-1; //减一原因:数据库存的下标从零开始
  159. currentTime = String.valueOf(day_month); //当前时间
  160. break;
  161. case "3": // 3.固定日期
  162. currentTime =new SimpleDateFormat("yyyy-MM-dd").format(new Date());
  163. break;
  164. }
  165. for (String str : dctime){
  166. if(str.equals(currentTime)){ //如果当前时间在会员日活动时间内
  167. //计算会员日内的总赠送积分
  168. if(cardRechargeSettingList.get(0).getPresentScale() !=null){
  169. presentAmt = presentAmt.multiply(new BigDecimal(cardRechargeSettingList.get(0).getPresentScale()).divide(new BigDecimal(100))).add(presentAmt);
  170. }
  171. break;
  172. }
  173. }
  174. }
  175. customerCardUseRecord.setAmt(amt);
  176. customerCardUseRecord.setPresentAmt(presentAmt);
  177. }else if(cardDetail.getSettingRuleType().equals("2")){ //按充值金额的比例
  178. BigDecimal presentAmt = amt.multiply(cardDetail.getPresentAmt().divide(new BigDecimal(100))); //当前赠送金额比例的赠送积分
  179. if(cardRechargeSettingList.get(0).getDiscountTimeSetting().equals("1") && dctime !=null){
  180. String discountTimeType = cardRechargeSettingList.get(0).getDiscountTimeType(); //获取日期类型
  181. switch (discountTimeType){
  182. case "1": // 1.按周来
  183. int day_Week = calendar.get(Calendar.DAY_OF_WEEK);
  184. day_Week= day_Week-1; //减一原因:数据库存的下标从零开始
  185. currentTime = String.valueOf(day_Week);
  186. break;
  187. case "2": // 2.每月的多少号
  188. int day_month = calendar.get(Calendar.DAY_OF_MONTH);
  189. day_month = day_month-1; //减一原因:数据库存的下标从零开始
  190. currentTime = String.valueOf(day_month); //当前时间
  191. break;
  192. case "3": // 3.固定日期
  193. currentTime =new SimpleDateFormat("yyyy-MM-dd").format(new Date());
  194. break;
  195. }
  196. for (String str : dctime){
  197. if(str.equals(currentTime)){ //如果当前时间在会员日活动时间内
  198. //计算会员日期内的总赠送积分
  199. if(cardRechargeSettingList.get(0).getPresentScale() !=null){
  200. presentAmt = presentAmt.multiply(new BigDecimal(cardRechargeSettingList.get(0).getPresentScale()).divide(new BigDecimal(100))).add(presentAmt);
  201. }
  202. break;
  203. }
  204. }
  205. }
  206. customerCardUseRecord.setAmt(amt);
  207. customerCardUseRecord.setPresentAmt(presentAmt);
  208. }
  209. break;
  210. }else {
  211. customerCardUseRecord.setAmt(amt);
  212. customerCardUseRecord.setPresentAmt(new BigDecimal(0));
  213. }
  214. }
  215. }else {
  216. customerCardUseRecord.setAmt(amt);
  217. customerCardUseRecord.setPresentAmt(new BigDecimal(0));
  218. }
  219. customerCardUseRecord.setUnionId(unionId);
  220. customerCardUseRecord.setStationId(stationId);
  221. customerCardUseRecord.setCardOilsType(cardOilsType);
  222. customerCardUseRecord.setStationName(stationName);
  223. customerCardUseRecord.setCustomerName(customerName);
  224. customerCardUseRecord.setUsageType("+");
  225. customerCardUseRecord.setPayType(payType); //1表示微信
  226. customerCardUseRecord.setCreateTime(new Date());
  227. customerCardUseRecord.setStatus("0");
  228. CustomerElectronicCard c = new CustomerElectronicCard(); //电子会员卡
  229. c.setUnionId(unionId);
  230. c.setStationId(stationId);
  231. c.setCardOilsType(cardOilsType);
  232. CustomerElectronicCard electronicCardInfoByUnionId = electronicMembershipCardService.getElectronicCardInfoByUnionId(c);
  233. if(electronicCardInfoByUnionId !=null && electronicCardInfoByUnionId.getCustomerNo() !=null){
  234. customerCardUseRecord.setCustomerNo(electronicCardInfoByUnionId.getCustomerNo());
  235. customerCardUseRecord.setBalance(electronicCardInfoByUnionId.getAmt());
  236. }
  237. //订单规则 时间+6位随机数
  238. Random random = new Random();
  239. String str="";
  240. for(int i=0; i<6; i++){
  241. str+=random.nextInt(10);
  242. }
  243. String orderNo = System.nanoTime()+str;
  244. customerCardUseRecord.setOrderNo(orderNo);
  245. logger.info("电子卡的充值单号:" +orderNo);
  246. electronicMembershipCardService.insetCardUseRecordRecharge(customerCardUseRecord); //插入电子会员卡的使用记录
  247. resultData = ResultData.success(orderNo);
  248. }
  249. }
  250. return gson.toJson(resultData);
  251. }
  252. //电子卡支付
  253. @RequestMapping(value = "/dzkPaySet", method = RequestMethod.GET)
  254. @ResponseBody
  255. @Transactional
  256. public String dzkPaySet(@RequestParam String ordNo) throws ParseException {
  257. Gson gson =new Gson();
  258. ResultData resultData =null;
  259. if(ordNo !=null){
  260. PayOrder payOrder = new PayOrder();
  261. payOrder.setOrderNo(ordNo);
  262. //获取用户订单信息
  263. Map<String, Object> resultMap = payOrderService.getOrderInfoAndUserInfoByOrderNo(payOrder);
  264. logger.info("电子卡支付时用户订单信息和用户信息:", resultMap.toString());
  265. if(resultMap !=null && resultMap.get("status").toString().equals("0")){
  266. String stationId = resultMap.get("stationId").toString();
  267. String oilName =resultMap.get("oilName").toString();
  268. String mobilePhone =resultMap.get("mobilePhone").toString();
  269. String unionId =resultMap.get("unionId").toString();
  270. String minaOpenid =resultMap.get("minaOpenid").toString();
  271. String consumerId =resultMap.get("consumerId").toString();
  272. String registeDate =resultMap.get("registeDate").toString();
  273. String stationName =resultMap.get("stationName").toString();
  274. String consumer =resultMap.get("consumer").toString();
  275. String oilLiters = resultMap.get("orderLiters").toString(); //orderLiters
  276. String receivableAmt = resultMap.get("receivableAmt").toString();
  277. String amt = resultMap.get("amt").toString();
  278. String orderType = resultMap.get("orderType").toString();
  279. String groupId = resultMap.get("groupId").toString();
  280. CustomerCardUseRecord customerCardUseRecord = new CustomerCardUseRecord(); //电子会员卡插入消费记录
  281. BigDecimal balance = null; //电子会员卡余额
  282. CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
  283. String cardOilsType ="";
  284. switch (oilName){ //根据油品名称存储电子卡油品类型 1.汽油 2.柴油
  285. case "92#":
  286. cardOilsType ="1";
  287. break;
  288. case "95#":
  289. cardOilsType ="1";
  290. break;
  291. case "98#":
  292. cardOilsType ="1";
  293. break;
  294. case "0#":
  295. cardOilsType ="2";
  296. break;
  297. case "-10#":
  298. cardOilsType ="2";
  299. break;
  300. case "-20#":
  301. cardOilsType ="2";
  302. break;
  303. }
  304. customerElectronicCard.setCardOilsType(cardOilsType);
  305. customerElectronicCard.setUnionId(resultMap.get("unionId").toString());
  306. customerElectronicCard.setStationId(Integer.valueOf(resultMap.get("stationId").toString()));
  307. //获取用户电子会员卡信息
  308. CustomerElectronicCard cardInfo = electronicMembershipCardService.getElectronicCardInfoByUnionId(customerElectronicCard);
  309. if(cardInfo !=null ){
  310. customerCardUseRecord.setOrderNo(ordNo); //电子会员卡记录订单号
  311. customerCardUseRecord.setUnionId(cardInfo.getUnionId()); //电子会员卡记录用户唯一标识
  312. customerCardUseRecord.setCustomerNo(cardInfo.getCustomerNo());
  313. customerCardUseRecord.setAmt(new BigDecimal(amt)); //电子会员卡记录用户余额
  314. customerCardUseRecord.setStatus("1");
  315. customerCardUseRecord.setCardOilsType(cardInfo.getCardOilsType());
  316. customerCardUseRecord.setBalance(cardInfo.getAmt().subtract(new BigDecimal(amt)));
  317. customerCardUseRecord.setStationName(cardInfo.getStationName());
  318. customerCardUseRecord.setStationId(cardInfo.getStationId());
  319. customerCardUseRecord.setUsageType("-");
  320. customerCardUseRecord.setCustomerName(consumer);
  321. customerCardUseRecord.setCreateTime(new Date());
  322. balance = cardInfo.getAmt();
  323. }
  324. //判断订单金额是否小于电子会员卡的余额
  325. if(balance !=null && customerCardUseRecord.getAmt().compareTo(balance) == -1 || customerCardUseRecord.getAmt().compareTo(balance) ==0){
  326. electronicMembershipCardService.insetCardUseRecordConsumption(customerCardUseRecord);
  327. //更新电子会员卡余额
  328. CustomerElectronicCard c = new CustomerElectronicCard();
  329. c.setAmt(balance.subtract(customerCardUseRecord.getAmt()));
  330. c.setUnionId(customerCardUseRecord.getUnionId());
  331. c.setStationId(customerCardUseRecord.getStationId());
  332. c.setCardOilsType(cardOilsType);
  333. c.setRecentlyTime(new Date());
  334. electronicMembershipCardService.updateElectronicCardInfoByUnionId(c);
  335. payOrder.setPayType("dzk"); //支付方式 //支付类型
  336. payOrder.setStatus("1");
  337. payOrder.setPayDate(new Date()); //支付时间
  338. payOrder.setReceivedAmt(Double.valueOf(amt));
  339. payOrder.setDzkAmt(Double.valueOf(amt));
  340. //payOrder.setTransactionId(ordNo);
  341. payOrderService.getUpdatePayOrder(payOrder);
  342. resultMap.put("payType","dzk");
  343. //插入集团客户信息
  344. //insertCustomerGroup(resultMap);
  345. //更新客户表
  346. CustomerManage customerManage = new CustomerManage();
  347. customerManage.setStationId(Integer.valueOf(stationId));
  348. customerManage.setMinaOpenid(minaOpenid);
  349. customerManage.setOilName(oilName);
  350. customerManage.setPhoneNumber(mobilePhone);
  351. Map<String, Object> params_1 = new HashMap<>();
  352. params_1.put("stationId", stationId);
  353. params_1.put("oilName", oilName);
  354. //获取该油站的优惠方式
  355. String discountPlanType = stationService.getStationDiscountWay(stationId);
  356. logger.info("油站优惠方式:"+discountPlanType);
  357. //获取客户会员信息
  358. CustomerManage customerManageInfo = customerManagerService.getCustomerManageInfo(customerManage);
  359. customerManage.setGroupId(Integer.valueOf(groupId));
  360. if(customerManageInfo !=null){
  361. //此处用于更新没有会员ID的用户
  362. if(!StringUtils.isNotBlank(customerManageInfo.getMemberId())){
  363. String customerId=groupId+stationId+System.nanoTime();
  364. customerManage.setMemberId(customerId);
  365. }
  366. customerManage.setGroupId(Integer.valueOf(groupId));
  367. customerManage.setPhoneNumber(mobilePhone);
  368. customerManage.setAmt(customerManageInfo.getAmt().add(new BigDecimal(amt)));
  369. customerManage.setLiters(customerManageInfo.getLiters().add(new BigDecimal(oilLiters)));
  370. logger.info("存在客户 更新时手机号参数: " + customerManage.getPhoneNumber());
  371. List<Map> customerGradeInfo = customerGradeServices.getCustomerGradeListOrderByDesc(params_1); //直降
  372. logger.info("该站直降等级信息:"+ customerGradeInfo);
  373. for (Map m: customerGradeInfo){
  374. //&& Double.valueOf(customerManage.getAmt().toString()) < Double.valueOf(m.get("memberConditEnd").toString())
  375. if(Double.valueOf(customerManage.getAmt().toString()) >= Double.valueOf(m.get("memberConditStart").toString())){
  376. customerManage.setGrade(m.get("grade").toString()); //存入等级名称
  377. customerManage.setMemberGrade(m.get("id").toString()); //存入等级ID
  378. break;
  379. }
  380. }
  381. logger.info("存在客户时直降等级信息是否存入客户表:"+ "直降ID:"+ customerManage.getMemberGrade()+ "直降名称: "+customerManage.getGrade());
  382. customerManagerService.updateCustomerInfo(customerManage);
  383. }else {
  384. customerManage.setCustomerName(consumer);
  385. customerManage.setStationName(stationName);
  386. customerManage.setLiters(new BigDecimal(oilLiters));
  387. customerManage.setAmt(new BigDecimal(amt));
  388. customerManage.setPhoneNumber(mobilePhone);
  389. customerManage.setMinaUserId(Integer.valueOf(consumerId));
  390. customerManage.setUnionId(unionId);
  391. customerManage.setRegtime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(registeDate));
  392. List<Map> customerGradeInfo = customerGradeServices.getCustomerGradeList(params_1); //直降
  393. logger.info("该站直降等级信息:"+ customerGradeInfo);
  394. if(customerGradeInfo !=null && customerGradeInfo.size() >0){
  395. customerManage.setGrade(customerGradeInfo.get(0).get("grade").toString()); //存入等级名称
  396. customerManage.setMemberGrade(customerGradeInfo.get(0).get("id").toString()); //存入等级ID
  397. }
  398. logger.info("不存在客户时直降等级信息是否存入客户表:"+ "直降ID:"+ customerManage.getMemberGrade()+ "直降名称: "+customerManage.getGrade());
  399. //客户会员号
  400. String memberId=groupId+stationId+System.nanoTime();
  401. CustomerManage cm = new CustomerManage();
  402. cm.setStationId(Integer.valueOf(stationId));
  403. cm.setPhoneNumber(mobilePhone);
  404. List<CustomerManage> customerManageInfoList = customerManagerService.getCustomerManageInfoList(cm);
  405. if(customerManageInfoList !=null && customerManageInfoList.size()>0){
  406. if(StringUtils.isNotBlank(customerManageInfoList.get(0).getMemberId())){
  407. customerManage.setMemberId(customerManageInfoList.get(0).getMemberId());
  408. }else {
  409. customerManage.setMemberId(memberId);
  410. }
  411. }else {
  412. customerManage.setMemberId(memberId);
  413. }
  414. customerManagerService.insertCustomerInfo(customerManage);
  415. }
  416. //电子卡消费公众号通知
  417. if(cardInfo.getBlogOpenid() !=null){
  418. String gzhAppId ="";
  419. String gzhAppSecret ="";
  420. Map<String, String> m = stationService.getStationAppIdAndAppSecret(cardInfo.getStationId());
  421. if(m !=null && m.containsKey("stationName") && m.containsKey("gzhAppId") && m.containsKey("gzhAppSecret")){
  422. stationName = m.get("stationName");
  423. gzhAppId = m.get("gzhAppId");
  424. gzhAppSecret = m.get("gzhAppSecret");
  425. //推送模板
  426. List<WxMpTemplateData> wxMpTemplate = new ArrayList<>();
  427. wxMpTemplate.add(new WxMpTemplateData("first","尊敬的"+cardInfo.getCustomerName()+",您好:\n" + "您在"+stationName+"的最新消费交易信息如下"));
  428. wxMpTemplate.add(new WxMpTemplateData("keyword1", new SimpleDateFormat("yyyy年MM月dd日HH时mm分").format(new Date())));
  429. wxMpTemplate.add(new WxMpTemplateData("keyword2", stationName));
  430. wxMpTemplate.add(new WxMpTemplateData("keyword3", oilName));
  431. wxMpTemplate.add(new WxMpTemplateData("keyword4", "电子卡"));
  432. wxMpTemplate.add(new WxMpTemplateData("keyword5", amt));
  433. wxMpTemplate.add(new WxMpTemplateData("remark","感谢您在"+stationName+"本次消费,当前还剩余额 "+c.getAmt()+"元,祝您生活愉快~!"));
  434. GzhNewsTemplate gzhNewsTemplate = new GzhNewsTemplate();
  435. gzhNewsTemplate.setStationId(cardInfo.getStationId());
  436. gzhNewsTemplate.setTemplateType("5");
  437. GzhNewsTemplate gzhNewsTemplateInfo = gzhNewsTemplateService.getGzhNewsTemplate(gzhNewsTemplate);
  438. if(gzhNewsTemplateInfo !=null && gzhNewsTemplateInfo.getTemplateId() !=null){
  439. wxPushUtil.push(gzhAppId, gzhAppSecret, gzhNewsTemplateInfo.getTemplateId(), cardInfo.getBlogOpenid(), wxMpTemplate);
  440. }
  441. }
  442. }
  443. int integral =0;
  444. StationPayManage stationPayManage = new StationPayManage();
  445. stationPayManage.setStationId(Integer.valueOf(stationId));
  446. StationPayManage stationPayManageInfo = stationService.selectStationPayManage(stationPayManage);
  447. //是否启用积分功能
  448. if(stationPayManageInfo !=null && stationPayManageInfo.getIntegralFlag().equals("1")){
  449. //计算积分
  450. CalculateIntegral calculateIntegral = new CalculateIntegral();
  451. calculateIntegral.setAmt(new BigDecimal(amt));
  452. calculateIntegral.setReceivableAmt(new BigDecimal(receivableAmt));
  453. calculateIntegral.setOilLiters(new BigDecimal(oilLiters));
  454. calculateIntegral.setOilName(oilName);
  455. calculateIntegral.setOilType(orderType);
  456. calculateIntegral.setStationId(Integer.valueOf(stationId));
  457. calculateIntegral.setUnionId(unionId);
  458. calculateIntegral.setOpenId(minaOpenid); //小程序openId
  459. //计算积分且推送积分
  460. integral = calculateIntegralAndPushIntegral(calculateIntegral, customerManage);
  461. }
  462. resultData = ResultData.success(CodeMsg.SUCCESS);
  463. //打印小票
  464. this.printReceipt(payOrder);
  465. //pos机打印小票
  466. payOrder.setIntegral(String.valueOf(integral));
  467. payOrder.setTransactionId(ordNo);
  468. this.posPrintReceipt(payOrder);
  469. }else {
  470. resultData=ResultData.error(CodeMsg.BALANCE_NOT_EENOUGH);
  471. }
  472. }
  473. else {
  474. resultData=ResultData.error(CodeMsg.NO_ORDER);
  475. }
  476. }
  477. if(resultData !=null) {
  478. return gson.toJson(resultData);
  479. }else {
  480. resultData = ResultData.error(CodeMsg.SELECT_ORDER_ERROR);
  481. return gson.toJson(resultData);
  482. }
  483. }
  484. //POS机打印小票
  485. public void posPrintReceipt(PayOrder payOrder){
  486. Map<String, Object> infoMap = payOrderService.getOrderInfoAndUserInfoByOrderNo(payOrder);
  487. Map<String, Object> m = new HashMap<>();
  488. if(payOrder.getTransactionId() !=null){
  489. m.put("transactionId", payOrder.getTransactionId());
  490. }
  491. if(payOrder.getIntegral() !=null){
  492. m.put("integral", payOrder.getIntegral());
  493. }
  494. //ordNo
  495. if(infoMap !=null && infoMap.containsKey("orderNo") && infoMap.get("orderNo") !=null){
  496. m.put("orderNo", infoMap.get("orderNo").toString());
  497. }
  498. if(infoMap !=null && infoMap.containsKey("amt") && infoMap.get("amt") !=null){
  499. m.put("amt", infoMap.get("amt").toString());
  500. }
  501. if(infoMap !=null && infoMap.containsKey("receivableAmt") && infoMap.get("receivableAmt") !=null){
  502. m.put("receivableAmt", infoMap.get("receivableAmt").toString());
  503. }
  504. if(infoMap !=null && infoMap.containsKey("discountAmt") && infoMap.get("discountAmt") !=null){
  505. m.put("discountAmt", infoMap.get("discountAmt").toString());
  506. }
  507. if(infoMap !=null && infoMap.containsKey("oilName") && infoMap.get("oilName") !=null){
  508. m.put("oilName", infoMap.get("oilName").toString());
  509. }
  510. if(infoMap !=null && infoMap.containsKey("oilGun") && infoMap.get("oilGun") !=null){
  511. m.put("oilGun", infoMap.get("oilGun").toString());
  512. }
  513. if(infoMap !=null && infoMap.containsKey("createdDate") && infoMap.get("createdDate") !=null){
  514. //格式化日期
  515. SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  516. String createdDate = sdf.format(infoMap.get("createdDate"));
  517. m.put("createdDate", createdDate);
  518. }
  519. if(infoMap !=null && infoMap.containsKey("payDate") && infoMap.get("payDate") !=null){
  520. //格式化日期
  521. SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  522. String payDate = sdf.format(infoMap.get("payDate"));
  523. m.put("payDate", payDate);
  524. }
  525. if(infoMap !=null && infoMap.containsKey("payType") && infoMap.get("payType") !=null){
  526. String payType = "";
  527. if(infoMap.get("payType").equals("wx")){
  528. payType ="微信";
  529. }
  530. if(infoMap.get("payType").equals("dzk")){
  531. payType ="电子卡";
  532. }
  533. m.put("payType", payType);
  534. }
  535. if(infoMap !=null && infoMap.containsKey("mobilePhone") && infoMap.get("mobilePhone") !=null){
  536. String phone =infoMap.get("mobilePhone")+"";
  537. //手机号中间四位****代替
  538. phone = phone.substring(0, 3) + "****" + phone.substring(7, phone.length());
  539. m.put("mobilePhone", phone);
  540. }
  541. if(infoMap !=null && infoMap.containsKey("orderLiters") && infoMap.get("orderLiters") !=null){
  542. m.put("orderLiters", infoMap.get("orderLiters").toString());
  543. }
  544. if(infoMap !=null && infoMap.containsKey("stationName") && infoMap.get("stationName") !=null){
  545. m.put("stationName", infoMap.get("stationName").toString());
  546. }
  547. if(infoMap !=null && infoMap.containsKey("oilPirce") && infoMap.get("oilPirce") !=null){
  548. m.put("oilPirce", infoMap.get("oilPirce").toString());
  549. }
  550. if(infoMap !=null && infoMap.containsKey("stationId") && infoMap.get("stationId") !=null){
  551. m.put("stationId", infoMap.get("stationId").toString());
  552. }
  553. if(infoMap !=null && infoMap.containsKey("orderType") && infoMap.get("orderType") !=null){
  554. m.put("orderType", infoMap.get("orderType").toString());
  555. }
  556. logger.info("要推送的订单的信息:" +m.toString());
  557. //定义推送格式
  558. Map<String, Object> params = new HashMap<>();
  559. params.put("messageTitle", "pos");
  560. params.put("messageType", "sys");
  561. //获取油枪绑定的POS机信息
  562. StationDeviceManager stationDeviceManager = new StationDeviceManager();
  563. stationDeviceManager.setDeviceType("2");
  564. stationDeviceManager.setStationId(Integer.valueOf(infoMap.get("stationId").toString()));
  565. stationDeviceManager.setGunNo(infoMap.get("oilGun").toString());
  566. StationDeviceManager stationDeviceManagerInfo = stationService.getStationDeviceManager(stationDeviceManager);
  567. if(stationDeviceManagerInfo !=null && stationDeviceManagerInfo.getPosFanoutExchange() !=null && stationDeviceManagerInfo.getPosQueue() !=null){
  568. params.put("posFanoutExchange", stationDeviceManagerInfo.getPosFanoutExchange());
  569. params.put("posQueue", stationDeviceManagerInfo.getPosQueue());
  570. }
  571. List<Map<String, Object>> list = new ArrayList<>();
  572. list.add(m);
  573. Map<String, Object> map = new HashMap<>();
  574. map.put("contentData", list);
  575. params.put("messageContent", map);
  576. logger.info("开始推送消息:" +JSONObject.toJSONString(params));
  577. String resultString = PosPrinterUtil.sendPosPrintDirectMessage(params);
  578. JSONObject jsonObject = JSONObject.parseObject(resultString);
  579. if(jsonObject.containsKey("code") && jsonObject.get("code").toString().equals("200")){
  580. //如果打印成功 添加小票数量
  581. PayOrder p = new PayOrder();
  582. p.setPrintCount(1);
  583. p.setOrderNo(infoMap.get("orderNo").toString());
  584. payOrderService.getUpdatePayOrder(p);
  585. }
  586. }
  587. /**
  588. * 打印小票
  589. */
  590. public void printReceipt(PayOrder payOrder) {
  591. Map<String, Object> infoMap = payOrderService.getOrderInfoAndUserInfoByOrderNo(payOrder);
  592. //打印机打印小票
  593. String content1;
  594. String content2;
  595. String orderNoP = "";
  596. String createdDateP ="";
  597. String stationNameP ="";
  598. String oilNameP ="";
  599. String orderLitersP ="";
  600. String oilPirceP ="";
  601. String receivableAmtP = "";
  602. String discountAmtP = "";
  603. String amtP = "";
  604. String mobilePhoneP = "";
  605. String payWayP = "";
  606. String sn; //打印机编号
  607. if(StringUtils.isNotBlank(infoMap.get("orderNo").toString())){
  608. orderNoP =infoMap.get("orderNo").toString();
  609. }
  610. if(infoMap.containsKey("createdDate") && infoMap.get("createdDate") !=null ){
  611. //格式化日期
  612. SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  613. createdDateP =sdf.format(infoMap.get("createdDate"));
  614. }
  615. if(infoMap.containsKey("stationName") && infoMap.get("stationName") !=null ){
  616. stationNameP =infoMap.get("stationName").toString();
  617. }
  618. if(infoMap.containsKey("oilName") && infoMap.get("oilName") !=null ){
  619. oilNameP =infoMap.get("oilName").toString();
  620. }
  621. if(infoMap.containsKey("orderType") && infoMap.get("orderType").equals("1")) {
  622. //加油升数
  623. if (infoMap.containsKey("orderLiters") && infoMap.get("orderLiters") != null) {
  624. orderLitersP = infoMap.get("orderLiters") + "";
  625. }
  626. //油价
  627. if (infoMap.containsKey("oilPirce") && infoMap.get("oilPirce") != null) {
  628. oilPirceP = infoMap.get("oilPirce") + "";
  629. }
  630. if(infoMap.containsKey("discountAmt") && infoMap.get("discountAmt") !=null ){
  631. discountAmtP =infoMap.get("discountAmt")+"";
  632. }
  633. }else if(infoMap.containsKey("orderType") && infoMap.get("orderType").equals("2")) {
  634. orderLitersP ="0.00";
  635. oilPirceP = "0.00";
  636. discountAmtP ="0.00";
  637. receivableAmtP=infoMap.get("amt")+"";
  638. }
  639. if(infoMap.containsKey("receivableAmt") && infoMap.get("receivableAmt") !=null ){
  640. receivableAmtP =infoMap.get("receivableAmt")+"";
  641. }
  642. if(infoMap.containsKey("amt") && infoMap.get("amt") !=null ){
  643. amtP =infoMap.get("amt")+"";
  644. }
  645. if(infoMap.containsKey("mobilePhone") && infoMap.get("mobilePhone") !=null ){
  646. String phone =infoMap.get("mobilePhone")+"";
  647. //手机号中间四位****代替
  648. mobilePhoneP = phone.substring(0, 3) + "****" + phone.substring(7, phone.length());
  649. }
  650. if(infoMap.containsKey("payType") && infoMap.get("payType") !=null ){
  651. if(infoMap.get("payType").equals("wx")){
  652. payWayP ="微信";
  653. }
  654. if(infoMap.get("payType").equals("dzk")){
  655. payWayP ="电子卡";
  656. }
  657. }
  658. content1 = "<CB>支付小票--顾客联</CB><BR>";
  659. content1 += "订单号:"+orderNoP+" <BR>";
  660. content1 += "时间:"+createdDateP+" <BR>";
  661. content1 += "油站:"+stationNameP+" <BR>";
  662. if(infoMap.containsKey("orderType") && infoMap.get("orderType").toString().equals("1")){
  663. content1 += "油品: "+oilNameP+" <BR>";
  664. content1 += "油量: "+orderLitersP+" 升<BR>";
  665. content1 += "单价: "+oilPirceP+" L/元<BR>";
  666. }
  667. content1 += "<BOLD><B>原价: "+receivableAmtP+" 元</B></BOLD><BR>";
  668. if(infoMap.containsKey("orderType") && infoMap.get("orderType").toString().equals("1")){
  669. content1 += "优惠: "+discountAmtP+" 元<BR>";
  670. }
  671. content1 += "支付: "+amtP+" 元<BR>";
  672. content1 += "支付方式: "+payWayP+" <BR>";
  673. content1 += "<BR>";
  674. //content1 += "--------------------------------<BR>";
  675. content1 += "<BR>";
  676. content2 = "<CB>支付小票--商户联</CB><BR>";
  677. content2 += "订单号:"+orderNoP+" <BR>";
  678. content2 += "时间:"+createdDateP+"<BR>";
  679. content2 += "油站:"+stationNameP+" <BR>";
  680. if(infoMap.containsKey("orderType") && infoMap.get("orderType").toString().equals("1")){
  681. content2 += "油品: "+oilNameP+" <BR>";
  682. content2 += "油量: "+orderLitersP+" 升<BR>";
  683. content2 += "单价: "+oilPirceP+" L/元<BR>";
  684. }
  685. content2 += "<BOLD><B>原价: "+receivableAmtP+" 元</B></BOLD><BR>";
  686. if(infoMap.containsKey("orderType") && infoMap.get("orderType").toString().equals("1")){
  687. content2 += "优惠: "+discountAmtP+" 元<BR>";
  688. }
  689. content2 += "支付: "+amtP+" 元<BR>";
  690. content2 += "手机号: "+mobilePhoneP+" <BR>";
  691. content2 += "支付方式: "+payWayP+" <BR>";
  692. content2 += "<BR>";
  693. //获取打印机编号
  694. //sn = "921611605"; //测试打印机 sn:921611605 key:72338zma
  695. Map params =new HashMap();
  696. params.put("stationId", infoMap.get("stationId").toString());
  697. params.put("oilGunNo", infoMap.get("oilGun").toString());
  698. params.put("deviceType", "1");
  699. Map m = stationOilGunService.getPrinterSnByStationIdAndOilGunNo(params);
  700. if(m !=null && m.containsKey("printerSn") && m.get("printerSn").toString()!= null && m.get("printerSn").toString()!=""){
  701. sn = m.get("printerSn").toString();
  702. //开始打印
  703. String printInfo=""; //打印信息
  704. if(m.containsKey("printSetting") && m.get("printSetting").toString()!= null && m.get("printSetting").toString()!=""){
  705. switch (m.get("printSetting").toString()){
  706. case "1": //1 客户联
  707. printInfo = FeiEPrinterUtil.printReceipt(sn, content1);
  708. break;
  709. case "2": //2 商户联
  710. printInfo = FeiEPrinterUtil.printReceipt(sn, content2);
  711. break;
  712. case "3": //3商户联和客户联
  713. printInfo = FeiEPrinterUtil.printReceipt(sn, content1 + content2);
  714. break;
  715. }
  716. }
  717. JSONObject jsonObject = JSONObject.parseObject(printInfo);
  718. if(jsonObject != null && jsonObject.getString("msg").equals("ok")){
  719. logger.info("打印成功:" + jsonObject.toString());
  720. //如果打印成功 添加小票数量
  721. PayOrder p = new PayOrder();
  722. p.setPrintCount(1);
  723. p.setOrderNo(infoMap.get("orderNo").toString());
  724. payOrderService.getUpdatePayOrder(p);
  725. }
  726. }else {
  727. logger.info("请正确配置打印机");
  728. }
  729. }
  730. //用户充值电子会员卡(储蓄卡)拉起随行付支付接口
  731. @RequestMapping(value = "/rechargeBalanceSXFPay", method = RequestMethod.POST)
  732. @ResponseBody
  733. public String rechargeBalanceSXFPay(@RequestBody RechargeBalance rechargeBalance){
  734. Gson gson =new Gson();
  735. //返回结果集
  736. ResultData resultData = null;
  737. if(rechargeBalance !=null){
  738. String amt = rechargeBalance.getAmt();
  739. String openId = rechargeBalance.getOpenId(); //公众号的openId
  740. Integer stationId = rechargeBalance.getStationId();
  741. String userType = rechargeBalance.getUserType();
  742. String subject = rechargeBalance.getSubject();
  743. String orderNo = rechargeBalance.getOrderNo();
  744. //将业务参数存放在 JSON 对象中
  745. JSONObject reqData = new JSONObject();
  746. Map<String, String> resultMap = stationService.getStationAppIdAndAppSecret(stationId);
  747. if(resultMap !=null && resultMap.containsKey("gzhAppId") && resultMap.containsKey("mno")){
  748. logger.info("=================================电子会员卡(储蓄卡)充值功能调用随行付接口================================");
  749. try {
  750. if(userType.equals("1")){
  751. //1 是公众号
  752. reqData.put("payWay", "02"); //支付方式 02 公众号/服 务窗/js支付 03 小程序
  753. reqData.put("userId", openId); //用户号 微信:openid; 支付宝:userid;银联:userid;微信&支付宝必传,银联js为非必传
  754. reqData.put("subAppid", resultMap.get("gzhAppId")); //微信公众号
  755. logger.info("支付子商户:"+ resultMap.get("gzhAppId"));
  756. }else if(userType.equals("2")){
  757. reqData.put("payWay", "03"); //支付方式 02 公众号/服 务窗/js支付 03 小程序
  758. reqData.put("userId", openId); //用户号 微信:openid; 支付宝:userid;银联:userid;微信&支付宝必传,银联js为非必传
  759. reqData.put("subAppid", resultMap.get("appId")); //微信小程序
  760. logger.info("支付子商户:"+ resultMap.get("appId"));
  761. }
  762. reqData.put("mno", resultMap.get("mno")); //商户编号
  763. logger.info("商户编号:"+ resultMap.get("mno"));
  764. reqData.put("ordNo", orderNo); //商户订单号
  765. reqData.put("amt", amt); //订单总金额
  766. reqData.put("payType", "WECHAT"); //支付渠道
  767. reqData.put("subject", subject); //订单标题
  768. reqData.put("tradeSource", "01"); //交易来源 01服务商,02收银台,03硬件
  769. reqData.put("trmIp", "172.16.2.1");//商家ip地址
  770. reqData.put("outFrontFailUrl", ""); //js 支付,前台 事变通知地址
  771. reqData.put("notifyUrl", "https://www.huijy.net/demo/getCardRechargeCallback"); //回调地址
  772. // reqData.put("notifyUrl", "https://www.huijy.net/api/getCardRechargeCallback"); //回调地址
  773. // reqData.put("subMechId", ""); //子商户号
  774. // reqData.put("amt", "0.01");
  775. // reqData.put("discountAmt", ""); //参与优惠金额
  776. // reqData.put("unDiscountAmt", ""); //不参与优惠金额
  777. // reqData.put("timeExpire", "10"); //订单失效时间, 以分钟为单位
  778. // reqData.put("limitPay", "00"); //限制卡类型: 00-全部 01-限定不能使 用信用卡支付 默认值 00
  779. // reqData.put("hbFqNum", "6"); //花呗分期数,仅可上送 6 或 12
  780. // reqData.put("customerIp", ""); //持卡人ip地址,银联js支付时必传
  781. // reqData.put("outFrontUrl", ""); //js 支付,前台 成功通知地址
  782. // reqData.put("needReceipt", "00"); //电子发票功能 微信开具电子 发票使用
  783. // reqData.put("ledgerAccountFlag", "00"); //是否做分账 分账交易使 用;00:做; 01:不做;不传默认为不做分账
  784. // reqData.put("ledgerAccountEffectTime", "00"); //分账有效时间 单位为天;是 否做分账选择 00 时该字段必传
  785. // reqData.put("ruleId", "00"); //同 步 分 账 规 则 id
  786. // reqData.put("fusruleId", "00"); //同步分账规则
  787. // reqData.put("ylTrmNo", ""); //银联终端号
  788. // reqData.put("terminalId", ""); //TQ机具编号
  789. // reqData.put("deviceNo ", "1111"); //设备号
  790. // reqData.put("identityFlag", ""); //是否是实名支付
  791. // reqData.put("buyerIdType", "IDCARD"); //证件类型
  792. // reqData.put("buyerIdNo", "410523198701054018"); //证件号
  793. // reqData.put("buyerName", "张三"); //买家姓名
  794. // reqData.put("mobileNum", ""); //手机号
  795. // reqData.put("extend", ""); //备用
  796. String req= SXFPaySign.getSXFPay(reqData);
  797. logger.debug("参数信息:"+req);
  798. System.out.println("req:" + req);
  799. //此处不要改变reqData里面值的顺序用LinkedHashMap
  800. HashMap reqMap = JSON.parseObject(req, LinkedHashMap.class, Feature.OrderedField);
  801. //组装加密串
  802. String signContent = RSASignature.getOrderContent(reqMap);
  803. System.out.println("拼接后的参数:" + signContent);
  804. logger.debug("拼接后的参数:"+signContent);
  805. //sign
  806. String sign = RSASignature.encryptBASE64(RSASignature.sign(signContent, SXFPaySign.privateKey));
  807. System.out.println("============签名:" + sign);
  808. reqMap.put("sign", sign);
  809. String reqStr = JSON.toJSONString(reqMap);
  810. System.out.println("请求参数:" + reqMap);
  811. System.out.println("请求参数:" + reqStr);
  812. //调用第三方接口地址
  813. //String url = "https://openapi-test.tianquetech.com/order/jsapiScan";//测试地址
  814. String url = "https://openapi.suixingpay.com/order/jsapiScan";//生产地址
  815. String resultJson = HttpUtils.connectPostUrl(url, reqStr);
  816. System.out.println("返回信息:" + resultJson);
  817. // logger.debug("返回信息:"+resultJson);
  818. //不要对reqData排序 所以用LinkedHashMap
  819. HashMap<String, Object> result = JSON.parseObject(resultJson, LinkedHashMap.class, Feature.OrderedField);
  820. if ("0000".equals(result.get("code"))) {
  821. //验签
  822. String signResult = result.get("sign").toString();
  823. result.remove("sign");
  824. String resultStr = RSASignature.getOrderContent(result);
  825. System.out.println(resultStr);
  826. //sign
  827. String resultSign = RSASignature.encryptBASE64(RSASignature.sign(signContent, SXFPaySign.privateKey));
  828. System.out.println("resultSign:" + resultSign);
  829. //组装加密串
  830. if (RSASignature.doCheck(resultStr, signResult, SXFPaySign.sxfPublic)) {
  831. System.out.println("===================验签成功==============");
  832. }
  833. }
  834. resultData=ResultData.success(result);
  835. }catch (Exception e){
  836. resultData=ResultData.error(CodeMsg.YEWU_FAIL,"订单支付失败");
  837. e.printStackTrace();
  838. }
  839. }
  840. }else {
  841. resultData = ResultData.error(CodeMsg.REQUEST_FAIL);
  842. }
  843. return gson.toJson(resultData);
  844. }
  845. //用户电子会员卡(储蓄卡)充值功能随行付回调功能
  846. @RequestMapping(value = "/getCardRechargeCallback", consumes = "application/json", method = RequestMethod.POST)
  847. @ResponseBody
  848. @Transactional
  849. public void getCardRechargeCallback(@RequestBody JSONObject request){
  850. logger.info("=========================电子会员卡(储蓄卡)充值功能随行付回调功能===============================");
  851. logger.info("电子会员卡(储蓄卡)充值功能随行付回调返回过来的参数:"+request);
  852. //logger.info("ordNo信息:" + request.get("ordNo").toString());
  853. //logger.info("sign信息:" + request.get("sign").toString());
  854. Gson gson =new Gson();
  855. String sxfUuid=request.get("sxfUuid").toString(); //随行付落单号
  856. String payWay=request.get("payWay").toString(); //随行付交易方式
  857. String payTime=request.get("payTime").toString(); //随行付交易时间
  858. String uuid=request.get("uuid").toString(); //随行付交易流水号
  859. String mno=request.get("mno").toString();//发起交易的商户编号
  860. String ordNo=request.get("ordNo").toString();//商户生成的订单号
  861. String amt=request.get("amt").toString();//金额
  862. String buyerId=request.get("buyerId").toString();//用户登录
  863. String transactionId=request.get("transactionId").toString();//用户登录
  864. String drType=request.get("drType").toString();//借贷记标识 1-借,2-贷,3-其他
  865. String payType=request.get("payType").toString();//对订单的描述,取值范围:WECHAT:微信,ALIPAY:支付宝,UNIONPAY:
  866. String payBank=request.get("payBank").toString();//付款银行银行编码,例如 ICBC
  867. String pointAmount=request.get("pointAmount").toString();//代金券金额
  868. String totalOffstAmt=request.get("totalOffstAmt").toString();//消 费 者 付 款金额
  869. String settleAmt=request.get("settleAmt").toString();//商家入账金额
  870. String timeStamp=request.get("timeStamp").toString();//响应时间
  871. String sign=request.get("sign").toString();//签名
  872. String bizCode=request.get("bizCode").toString();//业务返回码
  873. String bizMsg=request.get("bizMsg").toString();//业 务 返 回 信息
  874. String openid=request.get("openid").toString();//微 信 或 支 付宝身份id()opendid userid
  875. String channelId=request.get("channelId").toString();//渠道商户号
  876. String subMechId=request.get("subMechId").toString();//子商户号
  877. String finishTime=request.get("finishTime").toString();//交易完成时间
  878. String clearDt=request.get("clearDt").toString();
  879. String settlementBatchNo=request.get("settlementBatchNo").toString();
  880. //String origOrdNo=request.get("origOrdNo").toString();//反交易退款异步通知
  881. //String origUuid=request.get("origUuid").toString();//token
  882. //String scene=request.get("scene").toString();//用户登录
  883. //String buyerAccount=request.get("buyerAccount").toString();//
  884. //String realRefundAmount=request.get("realRefundAmount").toString();//商家出账金额
  885. //String recFeeAmt=request.get("recFeeAmt").toString();//交易手续费
  886. //String recFeeRate=request.get("recFeeRate").toString();//交易手续费率
  887. //String refBuyerAmt=request.get("refBuyerAmt").toString();//消 费 者 到 账金额
  888. //String extend = extend=request.get("extend").toString();//备用
  889. //将业务参数存放在 JSON 对象中
  890. JSONObject reqData = new JSONObject();
  891. //备用
  892. if(request.containsKey("extend") && request.get("extend") !=null){
  893. String extend = request.get("extend").toString();
  894. reqData.put("extend", extend);
  895. }
  896. //优惠券参数
  897. if(request.containsKey("promotionDetail") && request.get("promotionDetail") !=null){
  898. String promotionDetail = request.get("promotionDetail").toString();
  899. reqData.put("promotionDetail", promotionDetail);
  900. }
  901. //商家出账金额
  902. if(request.containsKey("realRefundAmount") && request.get("realRefundAmount") !=null){
  903. String realRefundAmount = request.get("realRefundAmount").toString();
  904. reqData.put("realRefundAmount", realRefundAmount);
  905. }
  906. //szltFlag
  907. if(request.containsKey("szltFlag") && request.get("szltFlag") !=null){
  908. String szltFlag = request.get("szltFlag").toString();
  909. reqData.put("szltFlag", szltFlag);
  910. }
  911. //recFeeAmt
  912. if(request.containsKey("recFeeAmt") && request.get("recFeeAmt") !=null){
  913. String recFeeAmt = request.get("recFeeAmt").toString();
  914. reqData.put("recFeeAmt", recFeeAmt);
  915. }
  916. //szltRecfeeAmt
  917. if(request.containsKey("szltRecfeeAmt") && request.get("szltRecfeeAmt") !=null){
  918. String szltRecfeeAmt = request.get("szltRecfeeAmt").toString();
  919. reqData.put("szltRecfeeAmt", szltRecfeeAmt);
  920. }
  921. reqData.put("sxfUuid",sxfUuid);
  922. reqData.put("payWay",payWay);
  923. reqData.put("payTime",payTime);
  924. reqData.put("uuid",uuid);
  925. reqData.put("mno",mno);
  926. reqData.put("ordNo",ordNo);
  927. reqData.put("amt",amt);
  928. reqData.put("buyerId",buyerId);
  929. reqData.put("transactionId",transactionId);
  930. reqData.put("drType",drType);
  931. reqData.put("payType",payType);
  932. reqData.put("payBank",payBank);
  933. reqData.put("pointAmount",pointAmount);
  934. reqData.put("totalOffstAmt",totalOffstAmt);
  935. reqData.put("settleAmt",settleAmt);
  936. reqData.put("timeStamp",timeStamp);
  937. reqData.put("bizCode",bizCode);
  938. reqData.put("bizMsg",bizMsg);
  939. reqData.put("openid",openid);
  940. reqData.put("channelId",channelId);
  941. reqData.put("subMechId",subMechId);
  942. reqData.put("finishTime",finishTime);
  943. reqData.put("clearDt",clearDt);
  944. reqData.put("settlementBatchNo",settlementBatchNo);
  945. //reqData.put("realRefundAmount",realRefundAmount);
  946. //reqData.put("recFeeAmt",recFeeAmt);
  947. //reqData.put("recFeeRate",recFeeRate);
  948. //reqData.put("buyerAccount",buyerAccount);
  949. //reqData.put("origOrdNo",origOrdNo);
  950. //reqData.put("origUuid",origUuid);
  951. //reqData.put("scene",scene);
  952. //reqData.put("refBuyerAmt",refBuyerAmt);
  953. //reqData.put("extend",extend);
  954. //根据回调信息,先进行验签,验签后修改状态
  955. logger.info("打印参数信息"+gson.toJson(reqData));
  956. //不要对reqData排序 所以用LinkedHashMap
  957. HashMap<String, Object> result = JSON.parseObject(gson.toJson(reqData), LinkedHashMap.class, Feature.OrderedField);
  958. //验签
  959. String resultStr = RSASignature.getOrderContent(result);
  960. //JSONObject req = new JSONObject();
  961. System.out.println(resultStr);
  962. if (RSASignature.doCheck(resultStr, sign, SXFPaySign.sxfPublic)) {
  963. logger.info("验签成功");
  964. //随行付回调验签成功更新客户电子卡余额 和 更新客户充值记录状态
  965. CustomerCardUseRecord customerCardUseRecord = new CustomerCardUseRecord();
  966. customerCardUseRecord.setOrderNo(ordNo);
  967. CustomerCardUseRecord customerCardUseRecordInfo = electronicMembershipCardService.getCardRecordByOrderNo(customerCardUseRecord);
  968. // 0表示未支付 1表示已支付
  969. if(customerCardUseRecordInfo !=null && customerCardUseRecordInfo.getStatus().equals("0")){
  970. logger.info("客户unionId:" +customerCardUseRecordInfo.getUnionId());
  971. logger.info("充值单号:" + ordNo);
  972. CustomerElectronicCard customerElectronicCard = new CustomerElectronicCard();
  973. customerElectronicCard.setUnionId(customerCardUseRecordInfo.getUnionId());
  974. customerElectronicCard.setStationId(customerCardUseRecordInfo.getStationId());
  975. //customerCardUseRecord.setStationId(customerCardUseRecordInfo.getStationId());
  976. //是否有赠送金额
  977. BigDecimal presentAmt =new BigDecimal(0);
  978. //BigDecimal cardSumAmt = null;
  979. if(customerCardUseRecordInfo.getPresentAmt() !=null){
  980. presentAmt = customerCardUseRecordInfo.getPresentAmt(); //客户充值赠送金额
  981. logger.info("客户充值赠送金额:" +presentAmt.toString());
  982. }
  983. customerElectronicCard.setRecentlyTime(new Date());
  984. customerElectronicCard.setCardOilsType(customerCardUseRecordInfo.getCardOilsType());
  985. logger.info("查询客户电子卡信息所传递参数: 油站ID:"+customerElectronicCard.getStationId()+"; 客户unionId:" + customerElectronicCard.getUnionId()+"; 卡的类型:"+ customerElectronicCard.getCardOilsType());
  986. //获取客户充值的得电子卡信息
  987. CustomerElectronicCard electronicCardInfo = electronicMembershipCardService.getElectronicCardInfoByUnionId(customerElectronicCard);
  988. if(electronicCardInfo !=null){
  989. logger.info("客户当前原有金额:" + electronicCardInfo.getAmt().toString());
  990. customerElectronicCard.setAmt(electronicCardInfo.getAmt().add(new BigDecimal(amt)).add(presentAmt));
  991. //更新客户要充值的电子会员卡的信息
  992. if(customerElectronicCard.getStationId()!=null && customerElectronicCard.getUnionId() !=null){
  993. logger.info("客户当前充值后应有金额:" + customerElectronicCard.getAmt().toString());
  994. electronicMembershipCardService.updateElectronicCardInfoByUnionId(customerElectronicCard);
  995. }
  996. customerCardUseRecord.setStatus("1");
  997. customerCardUseRecord.setBalance(customerElectronicCard.getAmt());
  998. customerCardUseRecord.setOrderNo(ordNo);
  999. //更新充值记录的状态和余额
  1000. electronicMembershipCardService.updateCardRecordStatusByOrderNo(customerCardUseRecord);
  1001. logger.info("===========客户电子会员卡充值成功已到账====");
  1002. logger.info("===========开始微信公众号推送消息功能:");
  1003. String stationName = electronicCardInfo.getStationName();
  1004. String blogOpenid = electronicCardInfo.getBlogOpenid();
  1005. Integer stationId = electronicCardInfo.getStationId(); //油站ID
  1006. String customerName = electronicCardInfo.getCustomerName(); //客户名称
  1007. BigDecimal balance = customerElectronicCard.getAmt(); //当前余额
  1008. String customerNo = electronicCardInfo.getCustomerNo(); //电子卡号
  1009. //获取要推送充值成功模板的ID
  1010. GzhNewsTemplate gzhNewsTemplate = new GzhNewsTemplate();
  1011. gzhNewsTemplate.setTemplateType("3"); //3 代表电子会员卡充值成功模板类型
  1012. gzhNewsTemplate.setStationId(stationId);
  1013. GzhNewsTemplate gzhNewsTemplateInfo = gzhNewsTemplateService.getGzhNewsTemplate(gzhNewsTemplate);
  1014. if(gzhNewsTemplateInfo !=null && gzhNewsTemplateInfo.getTemplateId() !=null){
  1015. logger.info("推送消息的油站ID:"+ gzhNewsTemplateInfo.getStationId().toString());
  1016. logger.info("当前要推送消息所用使用的模板ID:"+ gzhNewsTemplateInfo.getTemplateId());
  1017. List<WxMpTemplateData> wxMpTemplate = new ArrayList<>();
  1018. String cardName = customerCardUseRecordInfo.getCardOilsType().equals("1")? "汽油":"柴油";
  1019. wxMpTemplate.add(new WxMpTemplateData("first","尊敬的"+customerName+",您好:\n" + "您在"+stationName+"的"+cardName+"电子会员卡充值成功信息如下"));
  1020. wxMpTemplate.add(new WxMpTemplateData("keyword1", customerNo));
  1021. wxMpTemplate.add(new WxMpTemplateData("keyword2", amt + " 元"));
  1022. wxMpTemplate.add(new WxMpTemplateData("keyword3", presentAmt.toString()+ " 元"));
  1023. wxMpTemplate.add(new WxMpTemplateData("keyword4", balance.toString()+ " 元"));
  1024. wxMpTemplate.add(new WxMpTemplateData("keyword5", new SimpleDateFormat("yyyy年MM月dd日HH时mm分").format(new Date())));
  1025. wxMpTemplate.add(new WxMpTemplateData("remark","感谢您在"+ stationName+"的本次充值!"));
  1026. logger.info("要推送的消息内容:" +wxMpTemplate.toString());
  1027. Map<String, String> m = stationService.getStationAppIdAndAppSecret(stationId);
  1028. if(m !=null && m.containsKey("gzhAppId") && m.containsKey("gzhAppSecret")){
  1029. String gzhAppId = m.get("gzhAppId");
  1030. String gzhAppSecret = m.get("gzhAppSecret");
  1031. if(electronicCardInfo.getBlogOpenid() !=null){
  1032. wxPushUtil.push(gzhAppId, gzhAppSecret, gzhNewsTemplateInfo.getTemplateId(), blogOpenid, wxMpTemplate);
  1033. logger.info("电子会员卡公众号消息推送成功,推送人:"+ blogOpenid);
  1034. logger.info("===================================本次充值流程结束===========================================");
  1035. }
  1036. }
  1037. }
  1038. }
  1039. }
  1040. }else {
  1041. logger.info("验签失败");
  1042. }
  1043. }
  1044. //获取用户电子会员卡(储蓄卡)充值消费记录
  1045. @RequestMapping(value = "/getCardRecordList", method = RequestMethod.GET)
  1046. @ResponseBody
  1047. public String getCardRecordList(@RequestParam Integer stationId, String unionId, String usageType){
  1048. Gson gson =new Gson();
  1049. //返回结果集
  1050. ResultData resultData = null;
  1051. if(stationId !=null && unionId !=null){
  1052. CustomerCardUseRecord customerCardUseRecord = new CustomerCardUseRecord();
  1053. customerCardUseRecord.setUsageType(usageType); // '1' 代表充值 '0' 代表消费
  1054. customerCardUseRecord.setStationId(stationId);
  1055. customerCardUseRecord.setUnionId(unionId);
  1056. List<CustomerCardUseRecord> cardUseRecordList = electronicMembershipCardService.getCardUseRecordList(customerCardUseRecord);
  1057. resultData = ResultData.success(cardUseRecordList);
  1058. }else {
  1059. resultData = ResultData.error(CodeMsg.REQUEST_FAIL);
  1060. }
  1061. return gson.toJson(resultData);
  1062. }
  1063. //查询油站电子会员卡(储蓄卡)充值设置规则
  1064. @RequestMapping(value = "/getCardRechargeSettingList", method = RequestMethod.GET)
  1065. @ResponseBody
  1066. public String getCardRechargeSettingList(@RequestParam Integer stationId, String cardOilsType){
  1067. Gson gson =new Gson();
  1068. //返回结果集
  1069. ResultData resultData = null;
  1070. if(stationId !=null){
  1071. CustomerCardSetting customerCardSetting = new CustomerCardSetting();
  1072. customerCardSetting.setStationId(stationId);
  1073. if(StringUtils.isNotBlank(cardOilsType)){
  1074. customerCardSetting.setCardOilsType(cardOilsType);
  1075. }
  1076. customerCardSetting.setOrderBy("ASC"); //优惠规则升序排序
  1077. List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
  1078. resultData = ResultData.success(cardRechargeSettingList);
  1079. }else {
  1080. resultData = ResultData.error(CodeMsg.REQUEST_FAIL);
  1081. }
  1082. return gson.toJson(resultData);
  1083. }
  1084. /*
  1085. * 计算消费生成积分
  1086. * 注释: 1.判断油站配置的优惠类型
  1087. * 2.如果是等级直降则存在等级取对应等级的积分规则,否则按照其他优惠方式
  1088. */
  1089. public int calculateIntegralAndPushIntegral(CalculateIntegral calculateIntegral, CustomerManage customerManage){
  1090. int integral =0;
  1091. //获取该油站的优惠方式
  1092. String discountPlanType = stationService.getStationDiscountWay(calculateIntegral.getStationId().toString());
  1093. IntegralRule integralRule = new IntegralRule();
  1094. integralRule.setStationId(calculateIntegral.getStationId());
  1095. integralRule.setEmptyDate(new Date());
  1096. integralRule.setOilName(calculateIntegral.getOilName());
  1097. integralRule.setOilType(calculateIntegral.getOilType());
  1098. //获取该油站的积分规则
  1099. List<IntegralRule> integralRuleList = integralRuleService.getIntegralRule(integralRule);
  1100. if(integralRuleList !=null && integralRuleList.size() >0){
  1101. logger.info("该油站积分规则信息:" + integralRuleList.toString());
  1102. List<IntegralRuleDetail> integralRuleDetailList = integralRuleList.get(0).getIntegralRuleDetailList();
  1103. String currentTime = null; //当前时间
  1104. String datePickerTime=null; //活动时间
  1105. String[] datePickerTimeArray ={};
  1106. String integralActivity = integralRuleList.get(0).getIntegralActivity();
  1107. String integralProportion =null;
  1108. if(integralActivity !=null && integralActivity.equals("1")){
  1109. datePickerTime = integralRuleList.get(0).getDatePickerTime();
  1110. integralProportion = integralRuleList.get(0).getIntegralProportion();
  1111. if(datePickerTime.contains(",")){
  1112. datePickerTimeArray = datePickerTime.split(",");
  1113. }else {
  1114. datePickerTimeArray= new String[1];
  1115. datePickerTimeArray[0] = datePickerTime;
  1116. }
  1117. }
  1118. if(integralRuleDetailList !=null && integralRuleDetailList.size() >0){
  1119. Calendar calendar = Calendar.getInstance();
  1120. calendar.setTime(new Date()); //获取当前时间
  1121. for (IntegralRuleDetail integralRuleDetail : integralRuleDetailList){
  1122. if(integralRuleDetail.getOilType().equals("1")){ //油品
  1123. if (integralRuleDetail.getRuleType().equals("1")){ //按照实收金额
  1124. if(calculateIntegral.getAmt().compareTo(integralRuleDetail.getRuleTerms()) == 1 || calculateIntegral.getAmt().compareTo(integralRuleDetail.getRuleTerms()) == 0){
  1125. BigDecimal divide = null;
  1126. BigDecimal multiply = null;
  1127. //判断油站配置的优惠类型
  1128. if(discountPlanType.equals("1") && integralRuleDetail.getGread() !=null && customerManage.getGrade().equals(integralRuleDetail.getGread())){ //等级直降
  1129. divide = calculateIntegral.getAmt().divide(integralRuleDetail.getSaleAmt(), 0, BigDecimal.ROUND_HALF_DOWN);
  1130. multiply = divide.multiply(integralRuleDetail.getIntegral());
  1131. }else {
  1132. divide = calculateIntegral.getAmt().divide(integralRuleDetail.getSaleAmt(), 0, BigDecimal.ROUND_HALF_DOWN);
  1133. multiply = divide.multiply(integralRuleDetail.getIntegral());
  1134. }
  1135. if(integralActivity !=null && integralActivity.equals("1") && datePickerTimeArray !=null && integralProportion !=null){
  1136. String datePicker = integralRuleList.get(0).getDatePicker();
  1137. switch (datePicker){
  1138. case "1": // 1.按周来
  1139. int day_Week = calendar.get(Calendar.DAY_OF_WEEK);
  1140. day_Week= day_Week-1; //减一原因:数据库存的下标从零开始
  1141. currentTime = String.valueOf(day_Week);
  1142. break;
  1143. case "2": // 2.每月的多少号
  1144. int day_month = calendar.get(Calendar.DAY_OF_MONTH);
  1145. day_month = day_month-1; //减一原因:数据库存的下标从零开始
  1146. currentTime = String.valueOf(day_month); //当前时间
  1147. break;
  1148. case "3": // 3.固定日期
  1149. currentTime =new SimpleDateFormat("yyyy-MM-dd").format(new Date());
  1150. break;
  1151. }
  1152. for (String s : datePickerTimeArray){
  1153. if(s.equals(currentTime)){
  1154. multiply = multiply.multiply(new BigDecimal(integralProportion));
  1155. break;
  1156. }
  1157. }
  1158. }
  1159. integral =multiply.intValue();
  1160. logger.info("本次客户所得积分:" + integral);
  1161. break;
  1162. }
  1163. }else if (integralRuleDetail.getRuleType().equals("2")){ //按应收金额
  1164. if(calculateIntegral.getReceivableAmt().compareTo(integralRuleDetail.getRuleTerms()) ==1 || calculateIntegral.getReceivableAmt().compareTo(integralRuleDetail.getRuleTerms()) ==0){
  1165. BigDecimal divide = null;
  1166. BigDecimal multiply = null;
  1167. //判断油站配置的优惠类型
  1168. if(discountPlanType.equals("1") && integralRuleDetail.getGread() !=null && customerManage.getGrade().equals(integralRuleDetail.getGread())){ //等级直降
  1169. divide = calculateIntegral.getReceivableAmt().divide(integralRuleDetail.getSaleAmt(), 0, BigDecimal.ROUND_HALF_DOWN);
  1170. multiply = divide.multiply(integralRuleDetail.getIntegral());
  1171. }else {
  1172. divide = calculateIntegral.getReceivableAmt().divide(integralRuleDetail.getSaleAmt(), 0, BigDecimal.ROUND_HALF_DOWN);
  1173. multiply = divide.multiply(integralRuleDetail.getIntegral());
  1174. }
  1175. if(integralActivity !=null && integralActivity.equals("1") && datePickerTimeArray !=null && integralProportion !=null){
  1176. String datePicker = integralRuleList.get(0).getDatePicker();
  1177. switch (datePicker){
  1178. case "1": // 1.按周来
  1179. int day_Week = calendar.get(Calendar.DAY_OF_WEEK);
  1180. day_Week= day_Week-1; //减一原因:数据库存的下标从零开始
  1181. currentTime = String.valueOf(day_Week);
  1182. break;
  1183. case "2": // 2.每月的 多少号
  1184. int day_month = calendar.get(Calendar.DAY_OF_MONTH);
  1185. day_month = day_month-1; //减一原因:数据库存的下标从零开始
  1186. currentTime = String.valueOf(day_month); //当前时间
  1187. break;
  1188. case "3": // 3.固定日期
  1189. currentTime =new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //当前时间
  1190. break;
  1191. }
  1192. for (String s : datePickerTimeArray){
  1193. if(s.equals(currentTime)){
  1194. multiply = multiply.multiply(new BigDecimal(integralProportion));
  1195. break;
  1196. }
  1197. }
  1198. }
  1199. integral = multiply.intValue();
  1200. logger.info("本次客户所得积分:" + integral);
  1201. break;
  1202. }
  1203. }else if (integralRuleDetail.getRuleType().equals("3")){ //按照加油升数
  1204. if(calculateIntegral.getOilLiters().compareTo(integralRuleDetail.getRuleTerms()) ==1 || calculateIntegral.getOilLiters().compareTo(integralRuleDetail.getRuleTerms()) ==0){
  1205. BigDecimal divide = null;
  1206. BigDecimal multiply = null;
  1207. //判断油站配置的优惠类型
  1208. if(discountPlanType.equals("1") && integralRuleDetail.getGread() !=null && customerManage.getGrade().equals(integralRuleDetail.getGread())){ //等级直降
  1209. divide = calculateIntegral.getOilLiters().divide(integralRuleDetail.getSaleAmt(), 0, BigDecimal.ROUND_HALF_DOWN);
  1210. multiply = divide.multiply(integralRuleDetail.getIntegral());
  1211. }else {
  1212. divide = calculateIntegral.getOilLiters().divide(integralRuleDetail.getSaleAmt(), 0, BigDecimal.ROUND_HALF_DOWN);
  1213. multiply = divide.multiply(integralRuleDetail.getIntegral());
  1214. }
  1215. if(integralActivity !=null && integralActivity.equals("1") && datePickerTimeArray !=null && integralProportion !=null){
  1216. String datePicker = integralRuleList.get(0).getDatePicker();
  1217. switch (datePicker){
  1218. case "1": // 1.按周来
  1219. int day_Week = calendar.get(Calendar.DAY_OF_WEEK);
  1220. day_Week= day_Week-1; //减一原因:数据库存的下标从零开始
  1221. currentTime = String.valueOf(day_Week);
  1222. break;
  1223. case "2": // 2.每月的 多少号
  1224. int day_month = calendar.get(Calendar.DAY_OF_MONTH);
  1225. day_month = day_month-1; //减一原因:数据库存的下标从零开始
  1226. currentTime = String.valueOf(day_month); //当前时间
  1227. break;
  1228. case "3": // 3.固定日期
  1229. currentTime =new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //当前时间
  1230. break;
  1231. }
  1232. for (String s : datePickerTimeArray){
  1233. if(s.equals(currentTime)){
  1234. multiply = multiply.multiply(new BigDecimal(integralProportion));
  1235. break;
  1236. }
  1237. }
  1238. }
  1239. integral =multiply.intValue();
  1240. logger.info("本次客户所得积分:" + integral);
  1241. break;
  1242. }
  1243. }
  1244. }else if (integralRuleDetail.getOilType().equals("2")){ //非油品
  1245. if (calculateIntegral.getReceivableAmt().compareTo(integralRuleDetail.getRuleTerms()) ==1 || calculateIntegral.getReceivableAmt().compareTo(integralRuleDetail.getRuleTerms()) ==0){
  1246. BigDecimal divide = null;
  1247. BigDecimal multiply = null;
  1248. //判断油站配置的优惠类型
  1249. if(discountPlanType.equals("1") && integralRuleDetail.getGread() !=null && customerManage.getGrade().equals(integralRuleDetail.getGread())){ //等级直降
  1250. divide = calculateIntegral.getReceivableAmt().divide(integralRuleDetail.getSaleAmt(), 0, BigDecimal.ROUND_HALF_DOWN);
  1251. multiply = divide.multiply(integralRuleDetail.getIntegral());
  1252. }else {
  1253. divide = calculateIntegral.getReceivableAmt().divide(integralRuleDetail.getSaleAmt(), 0, BigDecimal.ROUND_HALF_DOWN);
  1254. multiply = divide.multiply(integralRuleDetail.getIntegral());
  1255. }
  1256. if(integralActivity !=null && integralActivity.equals("1") && datePickerTimeArray !=null && integralProportion !=null){
  1257. String datePicker = integralRuleList.get(0).getDatePicker(); //获取日期类型
  1258. switch (datePicker){
  1259. case "1": // 1.按周来
  1260. int day_Week = calendar.get(Calendar.DAY_OF_WEEK);
  1261. day_Week= day_Week-1; //减一原因:数据库存的下标从零开始
  1262. currentTime = String.valueOf(day_Week);
  1263. break;
  1264. case "2": // 2.每月的 多少号
  1265. int day_month = calendar.get(Calendar.DAY_OF_MONTH);
  1266. day_month = day_month-1; //减一原因:数据库存的下标从零开始
  1267. currentTime = String.valueOf(day_month); //当前时间
  1268. break;
  1269. case "3": // 3.固定日期
  1270. currentTime =new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //当前时间
  1271. break;
  1272. }
  1273. for (String s : datePickerTimeArray){
  1274. if(s.equals(currentTime)){
  1275. multiply = multiply.multiply(new BigDecimal(integralProportion));
  1276. break;
  1277. }
  1278. }
  1279. }
  1280. integral = multiply.intValue();
  1281. logger.info("本次客户所得积分:" + integral);
  1282. break;
  1283. }
  1284. }
  1285. }
  1286. }
  1287. CustomerCardSetting customerCardSetting = new CustomerCardSetting();
  1288. customerCardSetting.setStationId(calculateIntegral.getStationId());
  1289. //判断电子会员卡消费时是否享用基本倍数
  1290. List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
  1291. if(cardRechargeSettingList !=null && cardRechargeSettingList.size()==1){
  1292. String enjoyIntegralMultiple = cardRechargeSettingList.get(0).getEnjoyIntegralMultiple();
  1293. if(StringUtils.isNotBlank(enjoyIntegralMultiple)){
  1294. BigDecimal integral_b = new BigDecimal(integral).multiply(new BigDecimal(enjoyIntegralMultiple));
  1295. integral = integral_b.intValue();
  1296. }
  1297. }
  1298. calculateIntegral.setIntegral(integral);
  1299. this.pushIntegral(calculateIntegral);
  1300. }
  1301. return integral;
  1302. }
  1303. //更新积分并公众号推送积分
  1304. public void pushIntegral(CalculateIntegral calculateIntegral){
  1305. String gzhAppId ="";
  1306. String gzhAppSecret ="";
  1307. String stationName = ""; //油站名称
  1308. BigDecimal surplusIntegral=null;
  1309. String customerName =calculateIntegral.getNickName(); //客户昵称
  1310. String openId = calculateIntegral.getOpenId(); //客户小程序ID
  1311. Integer stationId = calculateIntegral.getStationId(); //油站ID
  1312. int integral = calculateIntegral.getIntegral(); //当前加油积分
  1313. String unionId = calculateIntegral.getUnionId();
  1314. String mobilePhone = calculateIntegral.getMobilePhone();
  1315. logger.info("客户小程序openId:" + openId);
  1316. if(StringUtils.isNotBlank(calculateIntegral.getOpenId())){
  1317. Map<String, String> m = stationService.getStationAppIdAndAppSecret(stationId);
  1318. if(m !=null && m.containsKey("stationName") && m.containsKey("gzhAppId") && m.containsKey("gzhAppSecret")){
  1319. stationName = m.get("stationName");
  1320. gzhAppId = m.get("gzhAppId");
  1321. gzhAppSecret = m.get("gzhAppSecret");
  1322. }
  1323. CustomerPoints customerPoints = new CustomerPoints();
  1324. customerPoints.setStationId(calculateIntegral.getStationId());
  1325. customerPoints.setMinaOpenId(openId);
  1326. customerPoints.setUnionId(calculateIntegral.getUnionId());
  1327. CustomerPoints customerPointsInfo = customerPointsService.getCustomerPointsInfoByUnionId(customerPoints);
  1328. if(customerPointsInfo !=null){
  1329. logger.info("当前存在客户:"+ customerPointsInfo.getMinaOpenId());
  1330. logger.info("当前客户原有剩余积分:"+ customerPointsInfo.getPoints().toString());
  1331. customerName =customerPointsInfo.getCustomerName();
  1332. surplusIntegral =new BigDecimal(customerPointsInfo.getPoints()).add(new BigDecimal(integral));
  1333. CustomerPointsRecord customerPointsRecord = new CustomerPointsRecord();
  1334. customerPointsRecord.setCreateTime(new Date());
  1335. customerPointsRecord.setCustomerName(customerName);
  1336. customerPointsRecord.setStationName(stationName);
  1337. customerPointsRecord.setStationId(stationId);
  1338. customerPointsRecord.setRecordType("+");
  1339. customerPointsRecord.setUnionId(customerPointsInfo.getUnionId());
  1340. customerPointsRecord.setIntegral(integral);
  1341. customerPointsRecordService.insertCustomerPointsRecordInfo(customerPointsRecord);
  1342. //customerPoints.setUnionId(customerPointsInfo.getUnionId());
  1343. customerPoints.setPoints(surplusIntegral.intValue());
  1344. logger.info("本次加油后客户应有总积分:"+ customerPoints.getPoints().toString());
  1345. //用户已累积积分
  1346. BigDecimal add = new BigDecimal(customerPointsInfo.getAccumulatePoints()).add(new BigDecimal(integral));
  1347. customerPoints.setAccumulatePoints(add.intValue());
  1348. customerPoints.setRecentConsumptionDate(new Date());
  1349. //更新客户积分
  1350. customerPointsService.updateCustomerPointsInfo(customerPoints);
  1351. logger.info("更新客户积分信息成功!");
  1352. String blogOpenId = customerPointsInfo.getBlogOpenId(); //公众号openId
  1353. if(blogOpenId !=null){
  1354. //推送模板
  1355. List<WxMpTemplateData> wxMpTemplate = new ArrayList<>();
  1356. wxMpTemplate.add(new WxMpTemplateData("first","尊敬的"+customerName+",您好:\n" + "您在"+stationName+"的积分最新交易信息如下"));
  1357. wxMpTemplate.add(new WxMpTemplateData("time", new SimpleDateFormat("yyyy年MM月dd日HH时mm分").format(new Date())));
  1358. wxMpTemplate.add(new WxMpTemplateData("type", "增加"));
  1359. wxMpTemplate.add(new WxMpTemplateData("Point", String.valueOf(integral)));
  1360. wxMpTemplate.add(new WxMpTemplateData("From", stationName));
  1361. wxMpTemplate.add(new WxMpTemplateData("remark",
  1362. "截止至" + new SimpleDateFormat(" yyyy年MM月dd日HH时mm分").format(new Date())+",您在"+stationName+"的可用积分为 "+surplusIntegral.toString()+" 分"));
  1363. GzhNewsTemplate gzhNewsTemplate = new GzhNewsTemplate();
  1364. gzhNewsTemplate.setStationId(stationId);
  1365. gzhNewsTemplate.setTemplateType("1");
  1366. GzhNewsTemplate gzhNewsTemplateInfo = gzhNewsTemplateService.getGzhNewsTemplate(gzhNewsTemplate);
  1367. if(gzhNewsTemplateInfo !=null && gzhNewsTemplateInfo.getTemplateId() !=null){
  1368. wxPushUtil.push(gzhAppId, gzhAppSecret, gzhNewsTemplateInfo.getTemplateId(), blogOpenId, wxMpTemplate);
  1369. }
  1370. }
  1371. }else {
  1372. logger.info("当前系统不存在该客户积分信息");
  1373. //customerName =userName;
  1374. surplusIntegral =new BigDecimal(integral);
  1375. CustomerPointsRecord customerPointsRecord = new CustomerPointsRecord();
  1376. customerPointsRecord.setCreateTime(new Date());
  1377. customerPointsRecord.setCustomerName(customerName);
  1378. customerPointsRecord.setStationName(stationName);
  1379. customerPointsRecord.setStationId(stationId);
  1380. customerPointsRecord.setRecordType("+");
  1381. customerPointsRecord.setUnionId(unionId);
  1382. customerPointsRecord.setIntegral(integral);
  1383. customerPointsRecordService.insertCustomerPointsRecordInfo(customerPointsRecord);
  1384. customerPoints.setUnionId(unionId);
  1385. customerPoints.setPoints(surplusIntegral.intValue());
  1386. customerPoints.setPoints(integral);
  1387. customerPoints.setConsumptionPoints(0);
  1388. customerPoints.setMobilePhone(mobilePhone);
  1389. customerPoints.setCustomerName(customerName);
  1390. customerPoints.setStationName(stationName);
  1391. customerPoints.setAccumulatePoints(integral);
  1392. customerPoints.setInvalidPoints(0);
  1393. customerPoints.setRecentConsumptionDate(new Date());
  1394. customerPoints.setCreateTime(new Date());
  1395. //新增客户积分
  1396. customerPointsService.insertCustomerPointsInfo(customerPoints);
  1397. logger.info("新增客户积分信息成功!");
  1398. }
  1399. }
  1400. }
  1401. }