YijiaApplicationTests.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. package com.palatform.yijia;
  2. import com.platform.yijia.YijiaApplication;
  3. import com.platform.yijia.pojo.*;
  4. import com.platform.yijia.service.CustomerPointsRecordService;
  5. import com.platform.yijia.service.CustomerPointsService;
  6. import com.platform.yijia.service.IntegralRuleService;
  7. import com.platform.yijia.service.StationService;
  8. import com.platform.yijia.utils.weixinapp.WxPushUtil;
  9. import javafx.application.Application;
  10. import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
  11. import org.junit.Test;
  12. import org.junit.runner.RunWith;
  13. import org.mybatis.spring.annotation.MapperScan;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.boot.test.context.SpringBootTest;
  16. import org.springframework.stereotype.Component;
  17. import org.springframework.test.context.junit4.SpringRunner;
  18. import javax.annotation.Resource;
  19. import java.math.BigDecimal;
  20. import java.text.SimpleDateFormat;
  21. import java.util.*;
  22. @RunWith(SpringRunner.class)
  23. @SpringBootTest(classes = YijiaApplication.class)
  24. public class YijiaApplicationTests {
  25. @Resource
  26. private IntegralRuleService integralRuleService;
  27. @Resource
  28. private CustomerPointsService customerPointsService;
  29. @Resource
  30. private CustomerPointsRecordService customerPointsRecordService;
  31. @Resource
  32. private StationService stationService;
  33. @Resource
  34. private WxPushUtil wxPushUtil;
  35. // @Resource
  36. // private CustomerManage customerManage;
  37. @Test
  38. public void testIntegral() {
  39. /*//================================================================================================================================
  40. CustomerManage customerManage = new CustomerManage();
  41. //customerManage.setGrade("铜牌");
  42. String discountPlanType ="1";
  43. Map infoMap = new HashMap();
  44. infoMap.put("stationId", 1);
  45. infoMap.put("oilName", "92#");
  46. infoMap.put("consumer", "M");
  47. infoMap.put("mobilePhone", "18654585051");
  48. infoMap.put("userType", "2");
  49. infoMap.put("amt", "200");
  50. infoMap.put("receivableAmt", "300");
  51. infoMap.put("orderLiters", "55");
  52. //客户积分
  53. IntegralRule integralRule =new IntegralRule();
  54. integralRule.setStationId(Integer.valueOf(infoMap.get("stationId").toString()));
  55. integralRule.setOilName(infoMap.get("oilName").toString());
  56. //获取该油站的积分规则
  57. List<IntegralRule> rule = integralRuleService.getIntegralRule(integralRule);
  58. if(rule !=null && rule.size() > 0 && rule.get(0).getEmptyDate().compareTo(new Date()) ==1){
  59. CustomerPoints customerPoints = new CustomerPoints(); //客户积分实体表
  60. CustomerPointsRecord customerPointsRecord = new CustomerPointsRecord(); //客户积分记录实体表
  61. if(infoMap.containsKey("unionId")){
  62. customerPoints.setUnionId(infoMap.get("unionId").toString());
  63. customerPointsRecord.setUnionId(infoMap.get("unionId").toString());
  64. }
  65. customerPoints.setCustomerName(infoMap.get("consumer").toString());
  66. customerPoints.setMobilePhone(infoMap.get("mobilePhone").toString()); //存入手机号
  67. customerPointsRecord.setCustomerName(infoMap.get("consumer").toString()); //客户名称
  68. customerPointsRecord.setRecordType("+"); // "+"表示增加积分
  69. customerPointsRecord.setStationId(Integer.valueOf(infoMap.get("stationId").toString()));
  70. customerPointsRecord.setCreateTime(new Date());
  71. if(infoMap.containsKey("userType") && infoMap.get("userType") !=null){
  72. switch (infoMap.get("userType").toString()){
  73. case "1":
  74. customerPoints.setBlogOpenId(infoMap.get("blogOpenid").toString());
  75. break;
  76. case "2":
  77. customerPoints.setMinaOpenId(infoMap.get("minaOpenid").toString());
  78. break;
  79. }
  80. }
  81. //获取该用户积分信息
  82. CustomerPoints customerPointsInfo = customerPointsService.getCustomerPointsInfo(customerPoints);
  83. if(customerPointsInfo !=null){
  84. //String ruleType = rule.get(0).getRuleType(); //获取积分规则类型
  85. String[] datePicker={}; //积分比例时间
  86. if(rule.get(0).getDatePicker() != null && rule.get(0).getDatePicker() !=""){
  87. datePicker = rule.get(0).getDatePicker().split(",");
  88. }
  89. String currentTime = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //当前时间
  90. List<IntegralRuleDetail> integralRuleDetailList = rule.get(0).getIntegralRuleDetailList(); //积分规则详细计算信息
  91. if(integralRuleDetailList !=null && integralRuleDetailList.size() > 0){
  92. BigDecimal realAmt = new BigDecimal(infoMap.get("amt").toString()); //本次消费实收金额
  93. BigDecimal receivableAmt = new BigDecimal(infoMap.get("receivableAmt").toString()); //本次消费实收金额
  94. BigDecimal orderLiters = new BigDecimal(infoMap.get("orderLiters").toString()); //本次加油升数
  95. //循环规则明细
  96. for(IntegralRuleDetail integralRuleDetail : integralRuleDetailList){
  97. //规则类型
  98. String ruleType = integralRuleDetail.getRuleType();
  99. if(ruleType !=null && ruleType.equals("1") && realAmt.compareTo(integralRuleDetail.getRuleTerms()) ==1){
  100. //以实收金额为准时
  101. if(discountPlanType == "1" && integralRuleDetail.getGread() !=null && customerManage.getGrade().equals(integralRuleDetail.getGread())){
  102. //计算积分并取整
  103. BigDecimal integral = realAmt.divide(integralRuleDetail.getSaleAmt(), 0).multiply(integralRuleDetail.getIntegral()).setScale(0, BigDecimal.ROUND_DOWN);
  104. //设置积分多倍时间时
  105. if(datePicker !=null){
  106. for(String str: datePicker){
  107. //如果当前时间在改日期比例时间内
  108. if (str.contains(currentTime) && rule.get(0).getIntegralProportion() != null){
  109. integral=integral.multiply(new BigDecimal(rule.get(0).getIntegralProportion()));
  110. break;
  111. }
  112. }
  113. }
  114. customerPoints.setPoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
  115. customerPoints.setAccumulatePoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
  116. customerPointsRecord.setIntegral(Integer.valueOf(integral.toString()));
  117. break;
  118. }else {
  119. //计算积分并取整
  120. BigDecimal integral = realAmt.divide(integralRuleDetail.getSaleAmt(), 0).multiply(integralRuleDetail.getIntegral()).setScale(0, BigDecimal.ROUND_DOWN);
  121. //设置积分多倍时间时
  122. if(datePicker !=null){
  123. for(String str: datePicker){
  124. if (str.contains(currentTime) && rule.get(0).getIntegralProportion() != null){
  125. integral=integral.multiply(new BigDecimal(rule.get(0).getIntegralProportion()));
  126. break;
  127. }
  128. }
  129. }
  130. customerPoints.setPoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
  131. customerPoints.setAccumulatePoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
  132. customerPointsRecord.setIntegral(Integer.valueOf(integral.toString()));
  133. break;
  134. }
  135. }else if(ruleType !=null && ruleType.equals("2") && receivableAmt.compareTo(integralRuleDetail.getRuleTerms()) ==1){
  136. //应收金额为准时
  137. if(discountPlanType == "1" && integralRuleDetail.getGread() !=null && customerManage.getGrade().equals(integralRuleDetail.getGread())){
  138. //计算积分并取整
  139. BigDecimal integral = receivableAmt.divide(integralRuleDetail.getSaleAmt(), 0).multiply(integralRuleDetail.getIntegral()).setScale(0, BigDecimal.ROUND_DOWN);
  140. //设置积分多倍时间时
  141. if(datePicker !=null){
  142. for(String str: datePicker){
  143. if (str.contains(currentTime) && rule.get(0).getIntegralProportion() != null){
  144. integral=integral.multiply(new BigDecimal(rule.get(0).getIntegralProportion()));
  145. break;
  146. }
  147. }
  148. }
  149. customerPoints.setPoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
  150. customerPoints.setAccumulatePoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
  151. customerPointsRecord.setIntegral(Integer.valueOf(integral.toString()));
  152. break;
  153. }else {
  154. //计算积分并取整
  155. BigDecimal integral = receivableAmt.divide(integralRuleDetail.getSaleAmt(), 0).multiply(integralRuleDetail.getIntegral()).setScale(0, BigDecimal.ROUND_DOWN);
  156. //设置积分多倍时间时
  157. if(datePicker !=null){
  158. for(String str: datePicker){
  159. if (str.contains(currentTime) && rule.get(0).getIntegralProportion() != null){
  160. integral=integral.multiply(new BigDecimal(rule.get(0).getIntegralProportion()));
  161. break;
  162. }
  163. }
  164. }
  165. customerPoints.setPoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
  166. customerPoints.setAccumulatePoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
  167. customerPointsRecord.setIntegral(Integer.valueOf(integral.toString()));
  168. break;
  169. }
  170. }else if(ruleType !=null && ruleType.equals("3") && orderLiters.compareTo(integralRuleDetail.getRuleTerms()) ==1){
  171. //加油升数为准时
  172. if(discountPlanType == "1" && integralRuleDetail.getGread() !=null && customerManage.getGrade().equals(integralRuleDetail.getGread())){
  173. //计算积分并取整
  174. BigDecimal integral = orderLiters.divide(integralRuleDetail.getSaleAmt(), 0).multiply(integralRuleDetail.getIntegral()).setScale(0, BigDecimal.ROUND_DOWN);
  175. //设置积分多倍时间时
  176. if(datePicker !=null){
  177. for(String str: datePicker){
  178. if (str.contains(currentTime) && rule.get(0).getIntegralProportion() !=null ){
  179. integral=integral.multiply(new BigDecimal(rule.get(0).getIntegralProportion()));
  180. break;
  181. }
  182. }
  183. }
  184. customerPoints.setPoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
  185. customerPoints.setAccumulatePoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
  186. customerPointsRecord.setIntegral(Integer.valueOf(integral.toString()));
  187. break;
  188. }else {
  189. //计算积分并取整
  190. BigDecimal integral = orderLiters.divide(integralRuleDetail.getSaleAmt(), 0).multiply(integralRuleDetail.getIntegral()).setScale(0, BigDecimal.ROUND_DOWN);
  191. //设置积分多倍时间时
  192. if(datePicker !=null){
  193. for(String str: datePicker){
  194. if (str.contains(currentTime) && rule.get(0).getIntegralProportion() !=null ){
  195. integral=integral.multiply(new BigDecimal(rule.get(0).getIntegralProportion()));
  196. break;
  197. }
  198. }
  199. }
  200. customerPoints.setPoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
  201. customerPoints.setAccumulatePoints(customerPointsInfo.getPoints() + Integer.valueOf(integral.toString()));
  202. customerPointsRecord.setIntegral(Integer.valueOf(integral.toString()));
  203. break;
  204. }
  205. }
  206. }
  207. }
  208. //更新客户余额积分
  209. customerPointsService.updateCustomerPointsInfo(customerPoints);
  210. //插入客户积分记录表
  211. customerPointsRecordService.insertCustomerPointsInfo(customerPointsRecord);
  212. //客户公众号积分增加通知
  213. String gzhAppId ="";
  214. String gzhAppSecret ="";
  215. String stationName = ""; //油站名称
  216. Map<String, String> m = stationService.getStationAppIdAndAppSecret(Integer.valueOf(infoMap.get("stationId").toString()));
  217. if(m !=null && m.containsKey("stationName") && m.containsKey("gzhAppId") && m.containsKey("gzhAppSecret")){
  218. stationName = m.get("stationName");
  219. gzhAppId = m.get("gzhAppId");
  220. gzhAppSecret = m.get("gzhAppSecret");
  221. }
  222. List<WxMpTemplateData> wxMpTemplate = new ArrayList<>();
  223. wxMpTemplate.add(new WxMpTemplateData("first","尊敬的"+infoMap.get("consumer").toString()+",您好:\n" + "您在"+stationName+"的积分最新交易信息如下"));
  224. wxMpTemplate.add(new WxMpTemplateData("time", new SimpleDateFormat("yyyy年MM月dd日HH时mm分").format(new Date())));
  225. wxMpTemplate.add(new WxMpTemplateData("type", "增加"));
  226. wxMpTemplate.add(new WxMpTemplateData("Point", customerPointsRecord.getIntegral().toString()));
  227. wxMpTemplate.add(new WxMpTemplateData("From", stationName));
  228. wxMpTemplate.add(new WxMpTemplateData("remark",
  229. "截止至" + new SimpleDateFormat(" yyyy年MM月dd日HH时mm分").format(new Date())+",您在"+stationName+"的可用积分为 "+customerPoints.getPoints().toString()+" 分"));
  230. String templateId = "G9tN--a3tGM5BN3otqZr73b4ErQCYWISSgyshbTqLYc"; //积分兑换成功通知模板
  231. wxPushUtil.push(gzhAppId, gzhAppSecret, templateId, "oJR5R6r4EJhaORFcPap70r_mtFZo", wxMpTemplate);
  232. }
  233. }
  234. *///========================================================================================================================================================//
  235. // WxPushUtil wxPushUtil = new WxPushUtil();
  236. // String appId ="wxc8189d3b3a7283e0";
  237. // String appSecret ="3f18fc7e4b02de2f8a14f55b55ab6245";
  238. // String templateId ="CPZ8l9FyIA30jq0rkm5uCozySSVwFO6gOvnFSWvCSrI";
  239. // String openId ="oJR5R6r4EJhaORFcPap70r_mtFZo";
  240. // List<WxMpTemplateData> wxMpTemplate = new ArrayList<>();
  241. // wxMpTemplate.add(new WxMpTemplateData("first","李先生,您好!您的本次消费明细如下:", "#363636"));
  242. // wxMpTemplate.add(new WxMpTemplateData("keyword1", "宁欣门店1", "#1C1C1C"));
  243. // wxMpTemplate.add(new WxMpTemplateData("keyword2", "2个", "#0000CD"));
  244. // wxMpTemplate.add(new WxMpTemplateData("keyword3", "168.8元", "#0000CD"));
  245. // wxMpTemplate.add(new WxMpTemplateData("keyword4", new Date().toString(), "#0000CD"));
  246. // wxMpTemplate.add(new WxMpTemplateData("keyword5", "2014120900189", "#0000CD"));
  247. // wxMpTemplate.add(new WxMpTemplateData("remark", "欢迎您再次光临!", "#0000CD"));
  248. // wxPushUtil.push(appId, appSecret, templateId, openId, wxMpTemplate);
  249. }
  250. }