PayController.java 77 KB

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