ElectronicMembershipCardController.java 84 KB

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