CouponController.java 43 KB

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