ElectronicMembershipCardController.java 84 KB

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