CouponController.java 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791
  1. package com.platform.yijia.controller;
  2. import com.github.pagehelper.PageHelper;
  3. import com.github.pagehelper.PageInfo;
  4. import com.google.gson.Gson;
  5. import com.google.gson.GsonBuilder;
  6. import com.platform.yijia.config.YiJiaRequest;
  7. import com.platform.yijia.param.request.AppUserInfoRequest;
  8. import com.platform.yijia.pojo.*;
  9. import com.platform.yijia.service.AppUserInfoService;
  10. import com.platform.yijia.service.CouponService;
  11. import com.platform.yijia.service.StationService;
  12. import com.platform.yijia.service.SysUserService;
  13. import com.platform.yijia.utils.CodeMsg;
  14. import com.platform.yijia.utils.CryptUtil;
  15. import com.platform.yijia.utils.ResultData;
  16. import com.sun.corba.se.spi.ior.ObjectKey;
  17. import com.sun.org.apache.bcel.internal.classfile.Code;
  18. import io.swagger.annotations.Api;
  19. import io.swagger.annotations.ApiOperation;
  20. import io.swagger.annotations.ApiParam;
  21. import io.swagger.models.auth.In;
  22. import org.apache.commons.lang3.StringUtils;
  23. import org.slf4j.Logger;
  24. import org.slf4j.LoggerFactory;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.stereotype.Controller;
  27. import org.springframework.transaction.annotation.Transactional;
  28. import org.springframework.web.bind.annotation.*;
  29. import javax.annotation.Resource;
  30. import java.math.BigDecimal;
  31. import java.text.SimpleDateFormat;
  32. import java.util.*;
  33. /*
  34. * <Title> CouponController </Title>
  35. * <Description> 优惠券 </Description>
  36. */
  37. @Controller
  38. @YiJiaRequest()
  39. @CrossOrigin
  40. @Api(tags = "优惠券")
  41. public class CouponController {
  42. private static Logger logger =(Logger) LoggerFactory.getLogger(CouponController.class);
  43. @Resource
  44. private CouponService couponService;
  45. @Resource
  46. private StationService stationService;
  47. @Autowired
  48. private SysUserService sysUserService;
  49. /**
  50. * 获取油站分发优惠券
  51. * @param stationId 油站ID
  52. * @param couponIssueId 发放方式ID
  53. * @return
  54. */
  55. @RequestMapping(value = "/selectStaGrantCouponList", method = RequestMethod.GET)
  56. @Transactional
  57. @ResponseBody
  58. public String selectStaGrantCouponList(Integer stationId, @RequestParam String unionId, @RequestParam String couponIssueId){
  59. Gson gson =new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
  60. ResultData resultData = null;
  61. try {
  62. if(unionId !=null && stationId !=null && couponIssueId !=null){
  63. //返回前端结果
  64. Map<String, Object> resultMap = new HashMap<>();
  65. CouponIssue couponIssue = new CouponIssue();
  66. couponIssue.setCouponIssueId(couponIssueId);
  67. //获取该领取方式的状态是否启用 1启用 0未启用
  68. List<CouponIssue> couponIssuesList = couponService.selectCouponIssueList(couponIssue);
  69. if(couponIssuesList !=null && couponIssuesList.size() >0 && couponIssuesList.get(0).getStatus().equals("1")){
  70. resultMap.put("giveLimit", couponIssuesList.get(0).getGiveLimit());
  71. Integer stationIdIssue = couponIssuesList.get(0).getStationId();
  72. //获取当前领取方式的油站信息
  73. StationInfo staParam = new StationInfo();
  74. staParam.setStationId(stationIdIssue);
  75. StationInfo station= stationService.selectStationInfo(staParam);
  76. Boolean boo = false;
  77. //判断油站
  78. if("1".equals(station.getJiBie())){
  79. //表示是集团
  80. if(station.getCouponFlagGroup() !=null && station.getCouponFlagGroup().equals("1")){
  81. if(StringUtils.isNotBlank(station.getCouponEnabledFlagGroup()) && "1".equals(station.getCouponEnabledFlagGroup())){
  82. boo = true;
  83. }
  84. }
  85. }else if( StringUtils.isNotBlank(station.getCouponEnabledFlag()) && "1".equals(station.getCouponEnabledFlag())){
  86. boo = true;
  87. }
  88. if(boo){
  89. CouponUserGiveCount couponUserGiveCount = new CouponUserGiveCount();
  90. couponUserGiveCount.setStationId(stationId);
  91. couponUserGiveCount.setUnionId(unionId);
  92. couponUserGiveCount.setCouponIssueId(couponIssueId);
  93. //用户能进入领取界面的次数
  94. CouponUserGiveCount cgcInfo = couponService.selectCouponUserGiveCount(couponUserGiveCount);
  95. if(cgcInfo !=null && cgcInfo.getIssueGiveCount() >= cgcInfo.getGiveCount()){
  96. resultData = ResultData.error(CodeMsg.COUPON_GIVE_COUNT_MAX);
  97. }else {
  98. if(cgcInfo !=null){
  99. //更新次数
  100. Integer issueGiveCount = cgcInfo.getIssueGiveCount();
  101. int i = issueGiveCount + 1;
  102. couponUserGiveCount.setIssueGiveCount(i);
  103. couponUserGiveCount.setUpdateTime(new Date());
  104. couponService.updateCouponUserGiveCount(couponUserGiveCount);
  105. }else {
  106. //新增次数
  107. couponUserGiveCount.setIssueGiveCount(1);
  108. couponUserGiveCount.setCreteTime(new Date());
  109. couponService.addCouponUserGiveCount(couponUserGiveCount);
  110. }
  111. //该领取方式能领取优惠券的时间类型
  112. String availableControl = couponIssuesList.get(0).getAvailableControl();
  113. switch (availableControl){
  114. case "0":
  115. List<Coupon> couponsList = this.selectCouponIssue(stationId, couponIssueId);
  116. resultMap.put("couponsList", couponsList);
  117. resultData = ResultData.success(resultMap);
  118. break;
  119. case "1":
  120. String cycleDays_1 = couponIssuesList.get(0).getCycleDays();
  121. if(!this.isActivityDay(availableControl, cycleDays_1)){
  122. resultData = ResultData.error(CodeMsg.NOT_GIVE_COUPON_TIME);
  123. }else {
  124. List<Coupon> couponsList_1 = this.selectCouponIssue(stationId, couponIssueId);
  125. resultMap.put("couponsList", couponsList_1);
  126. resultData = ResultData.success(resultMap);
  127. }
  128. break;
  129. case "2":
  130. //String cycleDays_2 = couponIssuesList.get(0).getCycleDays();
  131. if(!this.isActivityDay(availableControl, couponIssuesList.get(0).getCycleDays())){
  132. resultData = ResultData.error(CodeMsg.NOT_GIVE_COUPON_TIME);
  133. }else {
  134. List<Coupon> couponsList_2 = this.selectCouponIssue(stationId, couponIssueId);
  135. resultMap.put("couponsList", couponsList_2);
  136. resultData = ResultData.success(resultMap);
  137. }
  138. break;
  139. case "3":
  140. String appointedDays_3 = couponIssuesList.get(0).getAppointedDays();
  141. if(!this.isActivityDay(availableControl, appointedDays_3)){
  142. resultData = ResultData.error(CodeMsg.NOT_GIVE_COUPON_TIME);
  143. }else {
  144. List<Coupon> couponsList_3 = this.selectCouponIssue(stationId, couponIssueId);
  145. resultMap.put("couponsList", couponsList_3);
  146. resultData = ResultData.success(resultMap);
  147. }
  148. break;
  149. }
  150. }
  151. }else {
  152. //当前领取方式的站点已关闭优惠券功能
  153. resultData = ResultData.error(CodeMsg.NO_ENABLE_COUPON);
  154. }
  155. }else {
  156. // -7 该领取方式已失效
  157. resultData = ResultData.error(CodeMsg.ISSUE_CLOSE);
  158. }
  159. }else {
  160. //必传参数
  161. resultData = ResultData.error(CodeMsg.PARAMS_NUll);
  162. }
  163. }catch (Exception e){
  164. e.printStackTrace();
  165. logger.error("获取油站已发放的优惠券错误信息:" + e.getMessage());
  166. resultData = ResultData.error(CodeMsg.SEARCH_FAIL);
  167. }
  168. return gson.toJson(resultData);
  169. }
  170. //油站所分发的优惠券
  171. public List<Coupon> selectCouponIssue(Integer stationId, String couponIssueId){
  172. //用户能进入领取界面的次数
  173. Coupon coupon = new Coupon();
  174. coupon.setStationId(stationId);
  175. coupon.setCouponIssueId(couponIssueId);
  176. //领取油站所分发的优惠券
  177. List<Coupon> couponsList = couponService.selectStaGrantCouponList(coupon);
  178. return couponsList;
  179. }
  180. //获取优惠券信息
  181. @RequestMapping(value = "/selectCouponInfo", method = RequestMethod.GET)
  182. @ResponseBody
  183. @ApiOperation(value = "获取优惠券信息", httpMethod = "GET", notes = "获取优惠券信息")
  184. public String selectCouponInfo(@ApiParam(value = "优惠券ID", required = true) @RequestParam Integer id){
  185. Gson gson =new Gson();
  186. ResultData resultData = null;
  187. try {
  188. UserCoupon coupon = new UserCoupon();
  189. coupon.setId(id);
  190. UserCoupon couponInfo = couponService.selectUserCouponInfo(coupon);
  191. resultData = ResultData.success(couponInfo);
  192. }catch (Exception e){
  193. e.printStackTrace();
  194. }
  195. return gson.toJson(resultData);
  196. }
  197. /***
  198. * 获取核销优惠券信息
  199. * @param couponNo
  200. * @return
  201. */
  202. @RequestMapping(value = "/selectCouponVerificationInfo", method = RequestMethod.GET)
  203. @ResponseBody
  204. @ApiOperation(value = "获取核销优惠券信息", httpMethod = "GET", notes = "获取核销优惠券信息")
  205. public String selectCouponVerificationInfo(@ApiParam(value = "核销优惠券码", required = true) @RequestParam String couponNo,
  206. @ApiParam(value = "用户unionId", required = true) @RequestParam String unionId){
  207. Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
  208. ResultData resultData = null;
  209. try {
  210. if(StringUtils.isNotBlank(couponNo) && StringUtils.isNotBlank(unionId)){
  211. CouponVerificationUser couponVerificationUser = new CouponVerificationUser();
  212. couponVerificationUser.setUnionId(unionId);
  213. CouponVerificationUser cu = couponService.selectCouponVerificationUserInfo(couponVerificationUser);
  214. if(cu !=null && cu.getStationId() !=null){
  215. Integer stationId = cu.getStationId();
  216. UserCoupon ucoupon = new UserCoupon();
  217. ucoupon.setCouponNo(couponNo);
  218. //获取该已核销优惠券的信息
  219. UserCoupon couponInfo = couponService.selectUserCouponInfo(ucoupon);
  220. if(couponInfo !=null){
  221. String verification = couponInfo.getVerification();
  222. StationInfo stationInfo = new StationInfo();
  223. stationInfo.setStationId(cu.getStationId());
  224. //核销人员所在的站点信息
  225. StationInfo sta_cu = stationService.selectStationInfo(stationInfo);
  226. //核销人员所在站点级别
  227. String jiBie_cu = sta_cu.getJiBie();
  228. Integer stationId_coupon = couponInfo.getStationId();
  229. stationInfo.setStationId(stationId_coupon);
  230. //当前优惠券所在的站点信息
  231. StationInfo sta_coupon = stationService.selectStationInfo(stationInfo);
  232. //核销券所在站点级别
  233. String jiBie_coupon = sta_coupon.getJiBie();
  234. if("1".equals(jiBie_coupon)){
  235. //表示为集团共享的优惠券
  236. if(jiBie_cu.equals("1")){
  237. }
  238. }
  239. boolean contains = verification.contains(stationId.toString());
  240. if(contains){
  241. //如果当前登录用户是异业端核销人员非加油站异业券核销
  242. resultData = ResultData.success(couponInfo);
  243. }else {
  244. Integer stationIdCoupon = couponInfo.getStationId();
  245. Integer stationIdVer = cu.getStationId();
  246. if(stationIdVer.toString().equals(stationIdCoupon.toString())){
  247. resultData = ResultData.success(couponInfo);
  248. }else {
  249. resultData = ResultData.error(CodeMsg.ERROR_VERIFICATION);
  250. }
  251. }
  252. }else {
  253. resultData = ResultData.error(CodeMsg.NO_COUPON);
  254. }
  255. }else {
  256. resultData = ResultData.error(CodeMsg.NOT_COUPON_VERIFICATION_USER);
  257. }
  258. }else {
  259. resultData = ResultData.error(CodeMsg.PARAMS_NUll);
  260. }
  261. }catch (Exception e){
  262. e.printStackTrace();
  263. }
  264. return gson.toJson(resultData);
  265. }
  266. //获取客户所拥有的优惠券
  267. @RequestMapping(value = "/selectUserCoupons", method = RequestMethod.GET)
  268. @ResponseBody
  269. @ApiOperation(value = "获取客户所拥有的优惠券", httpMethod = "GET", notes = "获取客户所拥有的优惠券")
  270. public String selectUserCoupons(@ApiParam(value = "油站ID", required = true) @RequestParam Integer stationId,
  271. @ApiParam(value = "用户unionId", required = true) @RequestParam String unionId,
  272. @ApiParam(value = "优惠券状态couponIsUsed", required = true) @RequestParam String couponIsUsed,
  273. @RequestParam int pageNum, @RequestParam int pageSize){
  274. Gson gson =new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
  275. ResultData resultData = null;
  276. try {
  277. if(stationId !=null && StringUtils.isNotBlank(unionId) && StringUtils.isNotBlank(couponIsUsed)){
  278. StationInfo stationInfo = new StationInfo();
  279. stationInfo.setStationId(stationId);
  280. StationInfo stationInfos = stationService.selectStationInfo(stationInfo);
  281. if(stationInfos !=null && stationInfos.getCouponEnabledFlag().equals("1") && Integer.valueOf(pageNum) !=null && Integer.valueOf(pageSize) !=null){
  282. PageHelper.startPage(pageNum, pageSize);
  283. UserCoupon userCoupon = new UserCoupon();
  284. userCoupon.setStationId(stationId);
  285. userCoupon.setCouponIsUsed(couponIsUsed);
  286. userCoupon.setExpireFlag("0");
  287. userCoupon.setCurrentTime(new Date());
  288. //已过期
  289. if(couponIsUsed.equals("2")){
  290. userCoupon.setCouponIsUsed("0");
  291. userCoupon.setExpireFlag("1");
  292. }else if(couponIsUsed.equals("1")){
  293. //表示已使用
  294. userCoupon.setExpireFlag("2");
  295. }
  296. if(stationInfos.getCouponFlag() !=null && stationInfos.getCouponFlag().equals("1")){
  297. userCoupon.setStationId(stationInfos.getGroupId());
  298. }
  299. userCoupon.setUnionId(unionId);
  300. List<UserCoupon> userCoupons = couponService.selectUserCoupons(userCoupon);
  301. PageInfo pageInfo = new PageInfo(userCoupons);
  302. resultData = ResultData.success(pageInfo);
  303. }else {
  304. resultData = ResultData.error(CodeMsg.NO_ENABLE_COUPON);
  305. }
  306. }else {
  307. resultData = ResultData.error(CodeMsg.PARAMS_NUll);
  308. }
  309. }catch (Exception e){
  310. e.printStackTrace();
  311. //logger.error("获取客户所拥有的优惠券错误信息:" + e.getMessage());
  312. }
  313. return gson.toJson(resultData);
  314. }
  315. //用户领取优惠券
  316. @RequestMapping(value = "/addUserCoupon", consumes = "application/json", method = RequestMethod.POST)
  317. @ResponseBody
  318. @Transactional
  319. //@ApiOperation(value = "用户领取优惠券", httpMethod = "POST", notes = "用户领取优惠券")
  320. public String addUserCoupon(@RequestBody CouponUserRequest couponUserRequest){
  321. Gson gson = new Gson();
  322. ResultData resultData = null;
  323. try{
  324. String unionId = couponUserRequest.getUnionId();
  325. String couponIds = couponUserRequest.getCouponIds();
  326. String couponIssueId = couponUserRequest.getCouponIssueId();
  327. Integer stationId = couponUserRequest.getStationId();
  328. logger.info("用户领取优惠券所需参数: unionId: "+ unionId+ "; 油站ID:" +stationId + "; 优惠券IDS:" + couponIds + "; 领取方式ID: " + couponIssueId);
  329. StationInfo stationInfo = new StationInfo();
  330. stationInfo.setStationId(stationId);
  331. StationInfo stationInfos = stationService.selectStationInfo(stationInfo);
  332. //油站是否开启优惠券功能
  333. if(stationInfos !=null && stationInfos.getCouponEnabledFlag().equals("1")){
  334. if(StringUtils.isNotBlank(couponIds)){
  335. String str[] = couponIds.split(",");
  336. List<String> ids = Arrays.asList(str);
  337. Coupon couponParam = new Coupon(); //查询优惠券参数
  338. UserCoupon userCouponParam = new UserCoupon(); //用户优惠券新增参数
  339. //返回前端参数
  340. List<String> successCouponList= new ArrayList<>(); //领取成功的优惠券
  341. List<String> couponNumNEList= new ArrayList<>(); //优惠券数量不足
  342. List<String> couponHoldNumMaxList= new ArrayList<>(); //用户持有优惠券数量达到最大值
  343. List<String> notClaimedCouponList= new ArrayList<>(); //用户未领取的优惠券
  344. List<String> couponReceiveNumList= new ArrayList<>(); //用户累计的优惠券
  345. //获取领取方式信息
  346. CouponIssue couponIssue = new CouponIssue();
  347. couponIssue.setStationId(stationId);
  348. if(stationInfos.getCouponFlag() !=null && stationInfos.getCouponFlag().equals("1")){
  349. couponIssue.setStationId(stationInfos.getGroupId());
  350. }
  351. couponIssue.setCouponIssueId(couponIssueId);
  352. List<CouponIssue> couponIssueList = couponService.selectCouponIssueList(couponIssue);
  353. if(couponIssueList !=null && couponIssueList.size() ==1){
  354. int couponSuccessNum =0; //用户优惠券领取成功张数 couponSuccess
  355. for(int i=0; i<ids.size(); i++){
  356. Integer couponId = Integer.valueOf(ids.get(i));
  357. couponParam.setCouponId(couponId);
  358. //领取成功的张数与该领取方式在当前页最多领取的张数
  359. if(couponSuccessNum <= couponIssueList.get(0).getGiveLimit()) {
  360. Coupon coupon = couponService.selectCouponTemplateInfo(couponParam);
  361. //该优惠券是否存在
  362. if(coupon != null) {
  363. Integer couponCumulativeNum = coupon.getCouponCumulativeNum();
  364. //该优惠券是否已被领完
  365. if(coupon.getCouponNum() != null && coupon.getCouponNum() > 0) {
  366. UserCoupon uc = new UserCoupon();
  367. uc.setIssueId(couponIssueId);
  368. uc.setStationId(stationId);
  369. uc.setUnionId(unionId);
  370. uc.setCouponId(coupon.getCouponId());
  371. //获取该用户优惠券累计的张数
  372. int userCouponCountSum = couponService.selectUserCouponCount(uc);
  373. uc.setCouponIsUsed("0");
  374. //获取该用户所持有此优惠券的张数,即未使用的优惠券
  375. int userCouponCountNoUsed = couponService.selectUserCouponCount(uc);
  376. //获取该用户
  377. if(userCouponCountNoUsed < coupon.getCouponHoldNum()){
  378. if(userCouponCountSum < coupon.getCouponReceiveNum()){
  379. userCouponParam.setCouponIsUsed("0"); //是否使用:0、未使用;1、已使用;
  380. long currentTimeMillis = System.currentTimeMillis();
  381. String s = stationId + Long.toString(currentTimeMillis) + Math.round((Math.random() + 1) * 1000);
  382. String s1 = CryptUtil.useMD5(s);
  383. userCouponParam.setCouponNo(s1); //优惠券编码
  384. userCouponParam.setUnionId(unionId); //用户unionId
  385. userCouponParam.setIssueId(couponIssueId); //领取方式ID
  386. userCouponParam.setCouponId(coupon.getCouponId()); //优惠券模板ID
  387. userCouponParam.setStationId(stationId); //油站ID
  388. userCouponParam.setCouponIsEffective("1"); //优惠券是否有效
  389. userCouponParam.setGetCouponTime(new Date()); //优惠券领取时间
  390. String effectiveTimeType = coupon.getEffectiveTimeType();
  391. //'有效时间类型: 1,固定时间;2,领取后x天内有效'
  392. switch (effectiveTimeType) {
  393. case "1":
  394. userCouponParam.setCouponEffectiveTime(coupon.getEffectiveTimeEnd()); //优惠券有效期截止时间
  395. break;
  396. case "2":
  397. Calendar calendar = Calendar.getInstance();
  398. calendar.setTime(userCouponParam.getGetCouponTime());
  399. calendar.add(Calendar.DATE, coupon.getEffectiveDayNum()); //领取后多少天有效
  400. userCouponParam.setCouponEffectiveTime(calendar.getTime()); //优惠券有效期截止时间
  401. break;
  402. }
  403. if(couponService.addUserCoupon(userCouponParam) == 1) {
  404. //更新该优惠券的领取数量
  405. Coupon coupon_up = new Coupon();
  406. coupon_up.setCouponId(couponId);
  407. logger.info("当前领取优惠券的模板ID:" + couponId);
  408. couponCumulativeNum = couponCumulativeNum + 1;
  409. coupon_up.setCouponCumulativeNum(couponCumulativeNum);
  410. couponService.updateCouponInfo(coupon_up);
  411. //领取成功
  412. successCouponList.add(couponId.toString());
  413. //领取成功后次数 +1
  414. couponSuccessNum++;
  415. }
  416. }else {
  417. //用户累计领取已达到最大值
  418. couponReceiveNumList.add(couponId.toString());
  419. }
  420. }else {
  421. //用户持有数量超出
  422. couponHoldNumMaxList.add(couponId.toString());
  423. }
  424. }else {
  425. //优惠券数量不足
  426. couponNumNEList.add(couponId.toString());
  427. }
  428. }
  429. }else {
  430. //未领取的优惠券
  431. notClaimedCouponList.add(couponId.toString());
  432. }
  433. }
  434. //领取成功
  435. Map<String, Object> resultMap = new HashMap<>();
  436. resultMap.put("successCouponList", successCouponList);
  437. resultMap.put("couponNumNEList", couponNumNEList);
  438. resultMap.put("couponHoldNumMaxList", couponHoldNumMaxList);
  439. resultMap.put("notClaimedCouponList", notClaimedCouponList);
  440. resultMap.put("couponReceiveNumList", couponReceiveNumList);
  441. logger.info("用户领取到的优惠券:" + resultMap.toString());
  442. //记录用户在该领取方式操作
  443. CouponUserGiveCount couponUserGiveCount = new CouponUserGiveCount();
  444. couponUserGiveCount.setStationId(stationId);
  445. couponUserGiveCount.setUnionId(unionId);
  446. couponUserGiveCount.setCouponIssueId(couponIssueId);
  447. //用户能进入领取界面的次数
  448. CouponUserGiveCount cgcInfo = couponService.selectCouponUserGiveCount(couponUserGiveCount);
  449. if(cgcInfo !=null){
  450. //更新次数
  451. Integer issueGiveCount = cgcInfo.getIssueGiveCount();
  452. int i = issueGiveCount + 1;
  453. couponUserGiveCount.setIssueGiveCount(i);
  454. couponUserGiveCount.setUpdateTime(new Date());
  455. couponService.updateCouponUserGiveCount(couponUserGiveCount);
  456. }else {
  457. //新增次数
  458. couponUserGiveCount.setIssueGiveCount(1);
  459. couponUserGiveCount.setCreteTime(new Date());
  460. couponService.addCouponUserGiveCount(couponUserGiveCount);
  461. }
  462. resultData = ResultData.success(resultMap);
  463. }else {
  464. resultData = ResultData.error(CodeMsg.NO_COUPON_ISSUE);
  465. }
  466. }else {
  467. resultData = ResultData.success(CodeMsg.SUCCESS);
  468. }
  469. }else {
  470. resultData = ResultData.error(CodeMsg.NO_ENABLE_COUPON);
  471. }
  472. }catch (Exception e){
  473. e.printStackTrace();
  474. //logger.error("用户领取优惠券错误信息:" + e.getMessage());
  475. //resultData = ResultData.error(CodeMsg.INSERT_FAIL);
  476. }
  477. return gson.toJson(resultData);
  478. }
  479. //异业端核销优惠券,兑换券
  480. @RequestMapping(value = "/findCouponVerificationUser", consumes = "application/json", method = RequestMethod.POST)
  481. @ResponseBody
  482. @Transactional
  483. public String findCouponVerificationUser(@RequestBody CouponVerificationUser couponVerificationUser){
  484. Gson gson =new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
  485. ResultData resultData = null;
  486. if(StringUtils.isNotBlank(couponVerificationUser.getMobilePhone()) && StringUtils.isNotBlank(couponVerificationUser.getUnionId())){
  487. //手机号
  488. String mobilePhone = couponVerificationUser.getMobilePhone();
  489. SysUser sysUser = new SysUser();
  490. sysUser.setPhonenumber(mobilePhone);
  491. sysUser.setStatus("0");
  492. sysUser.setDelFlag("0");
  493. SysUser su = sysUserService.selectSysUser(sysUser);
  494. if(su !=null){
  495. if(su.getDelFlag().equals("0")){
  496. if(su.getStatus().equals("0")){
  497. CouponVerificationUser cu = couponService.selectCouponVerificationUserInfo(couponVerificationUser);
  498. if(cu !=null){
  499. //更新
  500. couponService.updateCouponVerificationUser(couponVerificationUser);
  501. }else {
  502. //新增
  503. couponVerificationUser.setCreateTime(new Date());
  504. couponService.addCouponVerificationUser(couponVerificationUser);
  505. }
  506. resultData = ResultData.success("登陆成功");
  507. }else {
  508. resultData = ResultData.error(CodeMsg.USER_NOT_STATUS);
  509. }
  510. }else {
  511. resultData = ResultData.error(CodeMsg.USER_NOT_EXSIST);
  512. }
  513. }else {
  514. resultData = ResultData.error(CodeMsg.USER_NOT_EXSIST);
  515. }
  516. }else {
  517. resultData = ResultData.error(CodeMsg.PARAMS_NUll);
  518. }
  519. return gson.toJson(resultData);
  520. }
  521. //异业端核销优惠券,兑换券
  522. @RequestMapping(value = "/writeOffCoupon", consumes = "application/json", method = RequestMethod.POST)
  523. @ResponseBody
  524. @Transactional
  525. public String writeOffCoupon(@RequestBody CouponVerification couponVerification){
  526. Gson gson =new Gson();
  527. ResultData resultData = null;
  528. try {
  529. if(couponVerification !=null && StringUtils.isNoneBlank(couponVerification.getCouponNo()) && StringUtils.isNoneBlank(couponVerification.getUnionId())){
  530. String unionId = couponVerification.getUnionId();
  531. //核销码
  532. String couponNo = couponVerification.getCouponNo();
  533. UserCoupon userCoupon = new UserCoupon();
  534. userCoupon.setCouponNo(couponNo);
  535. //查询当前兑换券是否存在
  536. UserCoupon userCouponInfo = couponService.selectUserCouponInfo(userCoupon);
  537. if(userCouponInfo !=null){
  538. if(userCouponInfo.getCouponIsUsed().equals("0")){
  539. //判断当前优惠券是否是异业券
  540. if(userCouponInfo.getCouponType().equals("3")){
  541. //时间类型
  542. String availableControl = userCouponInfo.getAvailableControl();
  543. //判断日期标志
  544. boolean boo = false;
  545. switch (availableControl){
  546. case "0": //一直可用
  547. boolean before = new Date().before(userCouponInfo.getCouponEffectiveTime());
  548. if (before)
  549. boo =true;
  550. break;
  551. case "1": //每周周几
  552. boolean activityDay_1 = this.isActivityDay("1", userCouponInfo.getCycleDays());
  553. if(activityDay_1)
  554. boo = true;
  555. break;
  556. case "2": //每月几号
  557. boolean activityDay_2 = this.isActivityDay("2", userCouponInfo.getCycleDays());
  558. if(activityDay_2)
  559. boo = true;
  560. break;
  561. case "3": //固定日期
  562. boolean activityDay_3 =this.isActivityDay("3", userCouponInfo.getAppointedDays());
  563. if(activityDay_3)
  564. boo = true;
  565. break;
  566. }
  567. if(boo){
  568. //核销人信息
  569. CouponVerificationUser couponVerificationUser = new CouponVerificationUser();
  570. couponVerificationUser.setUnionId(unionId);
  571. CouponVerificationUser cu = couponService.selectCouponVerificationUserInfo(couponVerificationUser);
  572. if(cu !=null && cu.getStationId() !=null){
  573. //核销人员手机号
  574. String mobilePhone = cu.getMobilePhone();
  575. userCoupon.setMobilePhone(mobilePhone);
  576. //当前核销人员的核销点
  577. String verificationId = cu.getStationId().toString();
  578. //异业券核销,使用sys_user中账户核销
  579. StationInfo stationInfo = new StationInfo();
  580. stationInfo.setStationId(cu.getStationId());
  581. StationInfo stationInfos = stationService.selectStationInfo(stationInfo);
  582. //当前异业券的核销站点
  583. String verification = userCouponInfo.getVerification();
  584. userCoupon.setVerificationTime(new Date()); //核销时间
  585. Integer stationIdCoupon = userCouponInfo.getStationId(); //当前优惠券所在发放站点
  586. //如果当前异业券有核销站点
  587. if(StringUtils.isNotBlank(verification)){
  588. //当前优惠券是否共享
  589. if(cu.getJiBie()!=null){
  590. String jiBie = cu.getJiBie();
  591. //核销人员所在站点的级别
  592. switch (jiBie){
  593. case "1":
  594. if(StringUtils.isNotBlank(stationInfos.getCouponFlag()) && stationInfos.getCouponFlag().equals("1")){
  595. verificationId = stationInfos.getGroupId().toString();
  596. }
  597. break;
  598. case "2":
  599. if(StringUtils.isNotBlank(stationInfos.getCouponFlag()) && stationInfos.getCouponFlag().equals("1")){
  600. //表示为集团下优惠券共享
  601. verificationId = stationInfos.getStationId().toString();
  602. }
  603. break;
  604. }
  605. }
  606. //是否能在该核销点核销
  607. Integer stationIdVerification = cu.getStationId(); //核销人员所在核销点
  608. if(verification.contains(verificationId) || stationIdVerification.toString().equals(stationIdCoupon.toString())){
  609. userCoupon.setCouponIsUsed("1");
  610. couponService.updateCouponUserInfo(userCoupon);
  611. resultData = ResultData.success("核销成功!");
  612. UserCoupon u = new UserCoupon();
  613. u.setId(userCouponInfo.getId());
  614. UserCoupon ucResult = couponService.selectUserCouponInfo(u);
  615. Coupon coupon_up = new Coupon();
  616. coupon_up.setCouponId(userCouponInfo.getCouponId());
  617. Integer couponUseNum = ucResult.getCouponUseNum();
  618. couponUseNum = couponUseNum + 1;
  619. coupon_up.setCouponNum(couponUseNum);
  620. couponService.updateCouponInfo(coupon_up);
  621. }else {
  622. resultData = ResultData.error(CodeMsg.ERROR_VERIFICATION);
  623. }
  624. }else if(verificationId.equals(stationIdCoupon.toString())){
  625. //如果当前异业券没有核销站点,则为油站设置自己兑换券
  626. userCoupon.setCouponIsUsed("1");
  627. couponService.updateCouponUserInfo(userCoupon);
  628. resultData = ResultData.success("核销成功!");
  629. UserCoupon u = new UserCoupon();
  630. u.setId(userCouponInfo.getId());
  631. UserCoupon ucResult = couponService.selectUserCouponInfo(u);
  632. Coupon coupon_up = new Coupon();
  633. coupon_up.setCouponId(ucResult.getCouponId());
  634. Integer couponUseNum = ucResult.getCouponUseNum();
  635. logger.info("当前优惠券模板已使用次数:"+ couponUseNum.toString());
  636. couponUseNum = couponUseNum + 1;
  637. logger.info("当前优惠券模板本次使用后次数:"+ couponUseNum.toString());
  638. coupon_up.setCouponUseNum(couponUseNum);
  639. couponService.updateCouponInfo(coupon_up);
  640. }else {
  641. //当前异业券不能在此异业端核销
  642. resultData = ResultData.error(CodeMsg.ERROR_VERIFICATION);
  643. }
  644. }else {
  645. //此人不是核销人员
  646. resultData = ResultData.error(CodeMsg.NOT_COUPON_VERIFICATION_USER);
  647. }
  648. }else {
  649. //不是兑换券
  650. resultData = ResultData.error(CodeMsg.ERROR_COUPON_DATE);
  651. }
  652. }else{
  653. //不是兑换券
  654. resultData = ResultData.error(CodeMsg.NOT_COUPON_VERIFICATION);
  655. }
  656. }else {
  657. //该兑换券已被使用
  658. resultData = ResultData.error(CodeMsg.COUPON_VERIFICATION_USED);
  659. }
  660. }else {
  661. //没有此兑换券
  662. resultData = ResultData.error(CodeMsg.NO_COUPON);
  663. }
  664. }else {
  665. resultData = ResultData.error(CodeMsg.PARAMS_NUll);
  666. }
  667. }catch (Exception e){
  668. e.printStackTrace();
  669. }
  670. return gson.toJson(resultData);
  671. }
  672. /***
  673. * 获取已核销优惠券信息列表
  674. * @param unionId
  675. * @return
  676. */
  677. @RequestMapping(value = "/selectCouponVerificationList", method = RequestMethod.GET)
  678. @ResponseBody
  679. @ApiOperation(value = "获取核销优惠券信息", httpMethod = "GET", notes = "获取核销优惠券信息")
  680. public String selectCouponVerificationList(@ApiParam(value = "用户unionId", required = true) @RequestParam String unionId,
  681. @RequestParam int pageNum, @RequestParam int pageSize) {
  682. Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
  683. ResultData resultData = null;
  684. if(StringUtils.isNotBlank(unionId)){
  685. CouponVerificationUser couponVerificationUser = new CouponVerificationUser();
  686. couponVerificationUser.setUnionId(unionId);
  687. CouponVerificationUser cu = couponService.selectCouponVerificationUserInfo(couponVerificationUser);
  688. if(cu !=null && cu.getStationId() !=null){
  689. UserCoupon userCoupon = new UserCoupon();
  690. String jiBie = cu.getJiBie(); //核销用的级别
  691. Integer stationId = cu.getStationId(); //核销人员所属站点
  692. if(StringUtils.isNoneBlank(jiBie) && jiBie.equals("1")){
  693. //级别为1的时候表示该登录人集团账号核销
  694. StationInfo stationInfo = new StationInfo();
  695. stationInfo.setStationId(stationId);
  696. StationInfo stationInfos = stationService.selectStationInfo(stationInfo);
  697. if(StringUtils.isNotBlank(stationInfos.getCouponFlag()) && stationInfos.getCouponFlag().equals("1")){
  698. //表示集团下优惠券共享:如果为集团账号且共享优惠券 则判断当前核销人员所在站点的集团是否是该兑换券的集团
  699. userCoupon.setGroupId(stationInfos.getGroupId());
  700. }
  701. }else {
  702. //否则为2时,则表示为站点核销人员登录
  703. userCoupon.setStationId(stationId);
  704. }
  705. userCoupon.setCouponType("3");
  706. userCoupon.setCouponIsUsed("1");
  707. PageHelper.startPage(pageNum, pageSize);
  708. List<UserCoupon> userCoupons = couponService.selectCouponVerificationList(userCoupon);
  709. PageInfo pageInfo = new PageInfo(userCoupons);
  710. resultData = ResultData.success(pageInfo);
  711. }else {
  712. resultData = ResultData.error(CodeMsg.NOT_COUPON_VERIFICATION_USER);
  713. }
  714. }else {
  715. resultData = ResultData.error(CodeMsg.PARAMS_NUll);
  716. }
  717. return gson.toJson(resultData);
  718. }
  719. /***
  720. * //营销方案活动日优惠
  721. * @param discountType 活动日时间类型
  722. * @param discountDate 活动日时间字符串,格式:1,2,3,4,5
  723. * @return
  724. */
  725. public boolean isActivityDay(String discountType, String discountDate){
  726. boolean boo= false;
  727. if(discountDate !=null && discountDate !=""){
  728. String currentTime = null; //当前时间
  729. String[] discountDateArray = discountDate.split(",");
  730. Calendar calendar = Calendar.getInstance();
  731. calendar.setTime(new Date()); //获取当前时间
  732. switch (discountType){
  733. case "1": // 1.按周来
  734. int day_Week = calendar.get(Calendar.DAY_OF_WEEK);
  735. day_Week= day_Week-1; //减一原因:数据库存的下标从零开始
  736. currentTime = String.valueOf(day_Week);
  737. break;
  738. case "2": // 2.每月的 多少号
  739. int day_month = calendar.get(Calendar.DAY_OF_MONTH);
  740. day_month = day_month-1; //减一原因:数据库存的下标从零开始
  741. currentTime = String.valueOf(day_month); //当前时间
  742. break;
  743. case "3": // 3.固定日期
  744. currentTime =new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //当前时间
  745. break;
  746. }
  747. //活动日优惠金额
  748. for (String s : discountDateArray){
  749. if(s.equals(currentTime)){
  750. boo = true;
  751. break;
  752. }
  753. }
  754. }
  755. return boo;
  756. }
  757. }