ElectronicMembershipCardController.java 90 KB

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