ElectronicMembershipCardController.java 108 KB

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