CouponController.java 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701
  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. }
  272. if(stationInfos.getCouponFlag() !=null && stationInfos.getCouponFlag().equals("1")){
  273. userCoupon.setStationId(stationInfos.getGroupId());
  274. }
  275. userCoupon.setUnionId(unionId);
  276. List<UserCoupon> userCoupons = couponService.selectUserCoupons(userCoupon);
  277. PageInfo pageInfo = new PageInfo(userCoupons);
  278. resultData = ResultData.success(pageInfo);
  279. }else {
  280. resultData = ResultData.error(CodeMsg.NO_ENABLE_COUPON);
  281. }
  282. }else {
  283. resultData = ResultData.error(CodeMsg.PARAMS_NUll);
  284. }
  285. }catch (Exception e){
  286. e.printStackTrace();
  287. //logger.error("获取客户所拥有的优惠券错误信息:" + e.getMessage());
  288. }
  289. return gson.toJson(resultData);
  290. }
  291. //用户领取优惠券
  292. @RequestMapping(value = "/addUserCoupon", consumes = "application/json", method = RequestMethod.POST)
  293. @ResponseBody
  294. @Transactional
  295. //@ApiOperation(value = "用户领取优惠券", httpMethod = "POST", notes = "用户领取优惠券")
  296. public String addUserCoupon(@RequestBody CouponUserRequest couponUserRequest){
  297. Gson gson = new Gson();
  298. ResultData resultData = null;
  299. try{
  300. String unionId = couponUserRequest.getUnionId();
  301. String couponIds = couponUserRequest.getCouponIds();
  302. String couponIssueId = couponUserRequest.getCouponIssueId();
  303. Integer stationId = couponUserRequest.getStationId();
  304. logger.info("用户领取优惠券所需参数: unionId: "+ unionId+ "; 油站ID:" +stationId + "; 优惠券IDS:" + couponIds + "; 领取方式ID: " + couponIssueId);
  305. StationInfo stationInfo = new StationInfo();
  306. stationInfo.setStationId(stationId);
  307. StationInfo stationInfos = stationService.selectStationInfo(stationInfo);
  308. //油站是否开启优惠券功能
  309. if(stationInfos !=null && stationInfos.getCouponEnabledFlag().equals("1")){
  310. if(StringUtils.isNotBlank(couponIds)){
  311. String str[] = couponIds.split(",");
  312. List<String> ids = Arrays.asList(str);
  313. Coupon couponParam = new Coupon(); //查询优惠券参数
  314. UserCoupon userCouponParam = new UserCoupon(); //用户优惠券新增参数
  315. //返回前端参数
  316. List<String> successCouponList= new ArrayList<>(); //领取成功的优惠券
  317. List<String> couponNumNEList= new ArrayList<>(); //优惠券数量不足
  318. List<String> couponHoldNumMaxList= new ArrayList<>(); //用户持有优惠券数量达到最大值
  319. List<String> notClaimedCouponList= new ArrayList<>(); //用户未领取的优惠券
  320. List<String> couponReceiveNumList= new ArrayList<>(); //用户累计的优惠券
  321. //获取领取方式信息
  322. CouponIssue couponIssue = new CouponIssue();
  323. couponIssue.setStationId(stationId);
  324. if(stationInfos.getCouponFlag() !=null && stationInfos.getCouponFlag().equals("1")){
  325. couponIssue.setStationId(stationInfos.getGroupId());
  326. }
  327. couponIssue.setCouponIssueId(couponIssueId);
  328. List<CouponIssue> couponIssueList = couponService.selectCouponIssueList(couponIssue);
  329. if(couponIssueList !=null && couponIssueList.size() ==1){
  330. int couponSuccessNum =0; //用户优惠券领取成功张数 couponSuccess
  331. for(int i=0; i<ids.size(); i++){
  332. Integer couponId = Integer.valueOf(ids.get(i));
  333. couponParam.setCouponId(couponId);
  334. //领取成功的张数与该领取方式在当前页最多领取的张数
  335. if(couponSuccessNum <= couponIssueList.get(0).getGiveLimit()) {
  336. Coupon coupon = couponService.selectCouponTemplateInfo(couponParam);
  337. //该优惠券是否存在
  338. if(coupon != null) {
  339. Integer couponCumulativeNum = coupon.getCouponCumulativeNum();
  340. //该优惠券是否已被领完
  341. if(coupon.getCouponNum() != null && coupon.getCouponNum() > 0) {
  342. UserCoupon uc = new UserCoupon();
  343. uc.setIssueId(couponIssueId);
  344. uc.setStationId(stationId);
  345. uc.setUnionId(unionId);
  346. uc.setCouponId(coupon.getCouponId());
  347. //获取该用户优惠券累计的张数
  348. int userCouponCountSum = couponService.selectUserCouponCount(uc);
  349. uc.setCouponIsUsed("0");
  350. //获取该用户所持有此优惠券的张数,即未使用的优惠券
  351. int userCouponCountNoUsed = couponService.selectUserCouponCount(uc);
  352. //获取该用户
  353. if(userCouponCountNoUsed < coupon.getCouponHoldNum()){
  354. if(userCouponCountSum < coupon.getCouponReceiveNum()){
  355. userCouponParam.setCouponIsUsed("0"); //是否使用:0、未使用;1、已使用;
  356. long currentTimeMillis = System.currentTimeMillis();
  357. String s = stationId + Long.toString(currentTimeMillis) + Math.round((Math.random() + 1) * 1000);
  358. String s1 = CryptUtil.useMD5(s);
  359. userCouponParam.setCouponNo(s1); //优惠券编码
  360. userCouponParam.setUnionId(unionId); //用户unionId
  361. userCouponParam.setIssueId(couponIssueId); //领取方式ID
  362. userCouponParam.setCouponId(coupon.getCouponId()); //优惠券模板ID
  363. userCouponParam.setStationId(stationId); //油站ID
  364. userCouponParam.setCouponIsEffective("1"); //优惠券是否有效
  365. userCouponParam.setGetCouponTime(new Date()); //优惠券领取时间
  366. String effectiveTimeType = coupon.getEffectiveTimeType();
  367. //'有效时间类型: 1,固定时间;2,领取后x天内有效'
  368. switch (effectiveTimeType) {
  369. case "1":
  370. userCouponParam.setCouponEffectiveTime(coupon.getEffectiveTimeEnd()); //优惠券有效期截止时间
  371. break;
  372. case "2":
  373. Calendar calendar = Calendar.getInstance();
  374. calendar.setTime(userCouponParam.getGetCouponTime());
  375. calendar.add(Calendar.DATE, coupon.getEffectiveDayNum()); //领取后多少天有效
  376. userCouponParam.setCouponEffectiveTime(calendar.getTime()); //优惠券有效期截止时间
  377. break;
  378. }
  379. if(couponService.addUserCoupon(userCouponParam) == 1) {
  380. //更新该优惠券的领取数量
  381. Coupon coupon_up = new Coupon();
  382. coupon_up.setCouponId(couponId);
  383. couponCumulativeNum = couponCumulativeNum + 1;
  384. coupon_up.setCouponCumulativeNum(couponCumulativeNum);
  385. couponService.updateCouponInfo(coupon_up);
  386. //领取成功
  387. successCouponList.add(couponId.toString());
  388. //领取成功后次数 +1
  389. couponSuccessNum++;
  390. }
  391. }else {
  392. //用户累计领取已达到最大值
  393. couponReceiveNumList.add(couponId.toString());
  394. }
  395. }else {
  396. //用户持有数量超出
  397. couponHoldNumMaxList.add(couponId.toString());
  398. }
  399. }else {
  400. //优惠券数量不足
  401. couponNumNEList.add(couponId.toString());
  402. }
  403. }
  404. }else {
  405. //未领取的优惠券
  406. notClaimedCouponList.add(couponId.toString());
  407. }
  408. }
  409. //领取成功
  410. Map<String, Object> resultMap = new HashMap<>();
  411. resultMap.put("successCouponList", successCouponList);
  412. resultMap.put("couponNumNEList", couponNumNEList);
  413. resultMap.put("couponHoldNumMaxList", couponHoldNumMaxList);
  414. resultMap.put("notClaimedCouponList", notClaimedCouponList);
  415. resultMap.put("couponReceiveNumList", couponReceiveNumList);
  416. logger.info("用户领取到的优惠券:" + resultMap.toString());
  417. //记录用户在该领取方式操作
  418. CouponUserGiveCount couponUserGiveCount = new CouponUserGiveCount();
  419. couponUserGiveCount.setStationId(stationId);
  420. couponUserGiveCount.setUnionId(unionId);
  421. couponUserGiveCount.setCouponIssueId(couponIssueId);
  422. //用户能进入领取界面的次数
  423. CouponUserGiveCount cgcInfo = couponService.selectCouponUserGiveCount(couponUserGiveCount);
  424. if(cgcInfo !=null){
  425. //更新次数
  426. Integer issueGiveCount = cgcInfo.getIssueGiveCount();
  427. int i = issueGiveCount + 1;
  428. couponUserGiveCount.setIssueGiveCount(i);
  429. couponUserGiveCount.setUpdateTime(new Date());
  430. couponService.updateCouponUserGiveCount(couponUserGiveCount);
  431. }else {
  432. //新增次数
  433. couponUserGiveCount.setIssueGiveCount(1);
  434. couponUserGiveCount.setCreteTime(new Date());
  435. couponService.addCouponUserGiveCount(couponUserGiveCount);
  436. }
  437. resultData = ResultData.success(resultMap);
  438. }else {
  439. resultData = ResultData.error(CodeMsg.NO_COUPON_ISSUE);
  440. }
  441. }else {
  442. resultData = ResultData.success(CodeMsg.SUCCESS);
  443. }
  444. }else {
  445. resultData = ResultData.error(CodeMsg.NO_ENABLE_COUPON);
  446. }
  447. }catch (Exception e){
  448. e.printStackTrace();
  449. //logger.error("用户领取优惠券错误信息:" + e.getMessage());
  450. //resultData = ResultData.error(CodeMsg.INSERT_FAIL);
  451. }
  452. return gson.toJson(resultData);
  453. }
  454. //异业端核销优惠券,兑换券
  455. @RequestMapping(value = "/findCouponVerificationUser", consumes = "application/json", method = RequestMethod.POST)
  456. @ResponseBody
  457. @Transactional
  458. public String findCouponVerificationUser(@RequestBody CouponVerificationUser couponVerificationUser){
  459. Gson gson =new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
  460. ResultData resultData = null;
  461. if(StringUtils.isNotBlank(couponVerificationUser.getMobilePhone()) && StringUtils.isNotBlank(couponVerificationUser.getUnionId())){
  462. //手机号
  463. String mobilePhone = couponVerificationUser.getMobilePhone();
  464. SysUser sysUser = new SysUser();
  465. sysUser.setPhonenumber(mobilePhone);
  466. sysUser.setStatus("0");
  467. sysUser.setDelFlag("0");
  468. SysUser su = sysUserService.selectSysUser(sysUser);
  469. if(su !=null){
  470. if(su.getDelFlag().equals("0")){
  471. if(su.getStatus().equals("0")){
  472. CouponVerificationUser cu = couponService.selectCouponVerificationUserInfo(couponVerificationUser);
  473. if(cu !=null){
  474. //更新
  475. couponService.updateCouponVerificationUser(couponVerificationUser);
  476. }else {
  477. //新增
  478. couponVerificationUser.setCreateTime(new Date());
  479. couponService.addCouponVerificationUser(couponVerificationUser);
  480. }
  481. resultData = ResultData.success("登陆成功");
  482. }else {
  483. resultData = ResultData.error(CodeMsg.USER_NOT_STATUS);
  484. }
  485. }else {
  486. resultData = ResultData.error(CodeMsg.USER_NOT_EXSIST);
  487. }
  488. }else {
  489. resultData = ResultData.error(CodeMsg.USER_NOT_EXSIST);
  490. }
  491. }else {
  492. resultData = ResultData.error(CodeMsg.PARAMS_NUll);
  493. }
  494. return gson.toJson(resultData);
  495. }
  496. //异业端核销优惠券,兑换券
  497. @RequestMapping(value = "/writeOffCoupon", consumes = "application/json", method = RequestMethod.POST)
  498. @ResponseBody
  499. @Transactional
  500. public String writeOffCoupon(@RequestBody CouponVerification couponVerification){
  501. Gson gson =new Gson();
  502. ResultData resultData = null;
  503. try {
  504. if(couponVerification !=null && StringUtils.isNoneBlank(couponVerification.getCouponNo()) && StringUtils.isNoneBlank(couponVerification.getUnionId())){
  505. String unionId = couponVerification.getUnionId();
  506. //核销码
  507. String couponNo = couponVerification.getCouponNo();
  508. UserCoupon userCoupon = new UserCoupon();
  509. userCoupon.setCouponNo(couponNo);
  510. //查询当前兑换券是否存在
  511. UserCoupon userCouponInfo = couponService.selectUserCouponInfo(userCoupon);
  512. if(userCouponInfo !=null){
  513. if(userCouponInfo.getCouponIsUsed().equals("0")){
  514. //判断当前优惠券是否是异业券
  515. if(userCouponInfo.getCouponType().equals("3")){
  516. //核销人信息
  517. CouponVerificationUser couponVerificationUser = new CouponVerificationUser();
  518. couponVerificationUser.setUnionId(unionId);
  519. CouponVerificationUser cu = couponService.selectCouponVerificationUserInfo(couponVerificationUser);
  520. if(cu !=null && cu.getStationId() !=null){
  521. //核销人员手机号
  522. String mobilePhone = cu.getMobilePhone();
  523. userCoupon.setMobilePhone(mobilePhone);
  524. //当前核销人员的核销点
  525. String verificationId = cu.getStationId().toString();
  526. //异业券核销,使用sys_user中账户核销
  527. StationInfo stationInfo = new StationInfo();
  528. stationInfo.setStationId(cu.getStationId());
  529. StationInfo stationInfos = stationService.selectStationInfo(stationInfo);
  530. //当前异业券的核销站点
  531. String verification = userCouponInfo.getVerification();
  532. userCoupon.setVerificationTime(new Date()); //核销时间
  533. Integer stationIdCoupon = userCouponInfo.getStationId(); //当前优惠券所在发放站点
  534. //如果当前异业券有核销站点
  535. if(StringUtils.isNotBlank(verification)){
  536. //当前优惠券是否共享
  537. if(cu.getJiBie()!=null){
  538. String jiBie = cu.getJiBie();
  539. //核销人员所在站点的级别
  540. switch (jiBie){
  541. case "1":
  542. if(StringUtils.isNotBlank(stationInfos.getCouponFlag()) && stationInfos.getCouponFlag().equals("1")){
  543. verificationId = stationInfos.getGroupId().toString();
  544. }
  545. break;
  546. case "2":
  547. if(StringUtils.isNotBlank(stationInfos.getCouponFlag()) && stationInfos.getCouponFlag().equals("1")){
  548. //表示为集团下优惠券共享
  549. verificationId = stationInfos.getStationId().toString();
  550. }
  551. break;
  552. }
  553. }
  554. //是否能在该核销点核销
  555. Integer stationIdVerification = cu.getStationId(); //核销人员所在核销点
  556. if(verification.contains(verificationId) || stationIdVerification.toString().equals(stationIdCoupon.toString())){
  557. userCoupon.setCouponIsUsed("1");
  558. couponService.updateCouponUserInfo(userCoupon);
  559. resultData = ResultData.success("核销成功!");
  560. }else {
  561. resultData = ResultData.error(CodeMsg.ERROR_VERIFICATION);
  562. }
  563. }else if(verificationId.equals(stationIdCoupon.toString())){
  564. //如果当前异业券没有核销站点,则为油站设置自己兑换券
  565. userCoupon.setCouponIsUsed("1");
  566. couponService.updateCouponUserInfo(userCoupon);
  567. resultData = ResultData.success("核销成功!");
  568. }else {
  569. //当前异业券不能在此异业端核销
  570. resultData = ResultData.error(CodeMsg.ERROR_VERIFICATION);
  571. }
  572. }else {
  573. //此人不是核销人员
  574. resultData = ResultData.error(CodeMsg.NOT_COUPON_VERIFICATION_USER);
  575. }
  576. }else{
  577. //不是兑换券
  578. resultData = ResultData.error(CodeMsg.NOT_COUPON_VERIFICATION);
  579. }
  580. }else {
  581. //该兑换券已被使用
  582. resultData = ResultData.error(CodeMsg.COUPON_VERIFICATION_USED);
  583. }
  584. }else {
  585. //没有此兑换券
  586. resultData = ResultData.error(CodeMsg.NO_COUPON);
  587. }
  588. }else {
  589. resultData = ResultData.error(CodeMsg.PARAMS_NUll);
  590. }
  591. }catch (Exception e){
  592. e.printStackTrace();
  593. }
  594. return gson.toJson(resultData);
  595. }
  596. /***
  597. * 获取已核销优惠券信息列表
  598. * @param unionId
  599. * @return
  600. */
  601. @RequestMapping(value = "/selectCouponVerificationList", method = RequestMethod.GET)
  602. @ResponseBody
  603. @ApiOperation(value = "获取核销优惠券信息", httpMethod = "GET", notes = "获取核销优惠券信息")
  604. public String selectCouponVerificationList(@ApiParam(value = "用户unionId", required = true) @RequestParam String unionId,
  605. @RequestParam int pageNum, @RequestParam int pageSize) {
  606. Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
  607. ResultData resultData = null;
  608. if(StringUtils.isNotBlank(unionId)){
  609. CouponVerificationUser couponVerificationUser = new CouponVerificationUser();
  610. couponVerificationUser.setUnionId(unionId);
  611. CouponVerificationUser cu = couponService.selectCouponVerificationUserInfo(couponVerificationUser);
  612. if(cu !=null && cu.getStationId() !=null){
  613. UserCoupon userCoupon = new UserCoupon();
  614. String jiBie = cu.getJiBie(); //核销用的级别
  615. Integer stationId = cu.getStationId(); //核销人员所属站点
  616. if(StringUtils.isNoneBlank(jiBie) && jiBie.equals("1")){
  617. //级别为1的时候表示该登录人集团账号核销
  618. StationInfo stationInfo = new StationInfo();
  619. stationInfo.setStationId(stationId);
  620. StationInfo stationInfos = stationService.selectStationInfo(stationInfo);
  621. if(StringUtils.isNotBlank(stationInfos.getCouponFlag()) && stationInfos.getCouponFlag().equals("1")){
  622. //表示集团下优惠券共享:如果为集团账号且共享优惠券 则判断当前核销人员所在站点的集团是否是该兑换券的集团
  623. userCoupon.setGroupId(stationInfos.getGroupId());
  624. }
  625. }else {
  626. //否则为2时,则表示为站点核销人员登录
  627. userCoupon.setStationId(stationId);
  628. }
  629. userCoupon.setCouponType("3");
  630. userCoupon.setCouponIsUsed("1");
  631. PageHelper.startPage(pageNum, pageSize);
  632. List<UserCoupon> userCoupons = couponService.selectCouponVerificationList(userCoupon);
  633. PageInfo pageInfo = new PageInfo(userCoupons);
  634. resultData = ResultData.success(pageInfo);
  635. }else {
  636. resultData = ResultData.error(CodeMsg.NOT_COUPON_VERIFICATION_USER);
  637. }
  638. }else {
  639. resultData = ResultData.error(CodeMsg.PARAMS_NUll);
  640. }
  641. return gson.toJson(resultData);
  642. }
  643. /***
  644. * //营销方案活动日优惠
  645. * @param discountType 活动日时间类型
  646. * @param discountDate 活动日时间字符串,格式:1,2,3,4,5
  647. * @return
  648. */
  649. public boolean isActivityDay(String discountType, String discountDate){
  650. boolean boo= false;
  651. if(discountDate !=null && discountDate !=""){
  652. String currentTime = null; //当前时间
  653. String[] discountDateArray = discountDate.split(",");
  654. Calendar calendar = Calendar.getInstance();
  655. calendar.setTime(new Date()); //获取当前时间
  656. switch (discountType){
  657. case "1": // 1.按周来
  658. int day_Week = calendar.get(Calendar.DAY_OF_WEEK);
  659. day_Week= day_Week-1; //减一原因:数据库存的下标从零开始
  660. currentTime = String.valueOf(day_Week);
  661. break;
  662. case "2": // 2.每月的 多少号
  663. int day_month = calendar.get(Calendar.DAY_OF_MONTH);
  664. day_month = day_month-1; //减一原因:数据库存的下标从零开始
  665. currentTime = String.valueOf(day_month); //当前时间
  666. break;
  667. case "3": // 3.固定日期
  668. currentTime =new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //当前时间
  669. break;
  670. }
  671. //活动日优惠金额
  672. for (String s : discountDateArray){
  673. if(s.equals(currentTime)){
  674. boo = true;
  675. break;
  676. }
  677. }
  678. }
  679. return boo;
  680. }
  681. }