CmVipCouponService.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. package com.caimei.modules.coupon.service;
  2. import com.caimei.modules.coupon.dao.CmCouponDao;
  3. import com.caimei.modules.coupon.dao.CmCouponVipDao;
  4. import com.caimei.modules.coupon.entity.*;
  5. import com.caimei.modules.user.entity.NewCmShop;
  6. import com.caimei.modules.utils.DateUtil;
  7. import com.thinkgem.jeesite.common.persistence.Page;
  8. import com.thinkgem.jeesite.common.service.CrudService;
  9. import org.apache.commons.lang3.StringUtils;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Service;
  12. import org.springframework.transaction.annotation.Transactional;
  13. import java.text.ParseException;
  14. import java.text.SimpleDateFormat;
  15. import java.util.ArrayList;
  16. import java.util.Date;
  17. import java.util.List;
  18. /**
  19. * @author zzj
  20. */
  21. @Service
  22. @Transactional(readOnly = true)
  23. public class CmVipCouponService extends CrudService<CmCouponVipDao, CmVipCoupon> {
  24. @Autowired
  25. private CmCouponService cmCouponService;
  26. @Autowired
  27. private CmCouponVipDao cmCouponVipDao;
  28. @Autowired
  29. private CmCouponDao cmCouponDao;
  30. @Override
  31. public CmVipCoupon get(String id) {
  32. CmVipCoupon vipCoupon = super.get(id);
  33. if (null != vipCoupon) {
  34. setVipCouponStatus(vipCoupon);
  35. List<CmCoupon> couponList = new ArrayList<>();
  36. List<String> bindCoupons = cmCouponVipDao.getBindCoupons(id);
  37. for (String s : bindCoupons) {
  38. CmCoupon cmCoupon = cmCouponService.get(s);
  39. couponList.add(cmCoupon);
  40. }
  41. vipCoupon.setCouponList(couponList);
  42. }
  43. return vipCoupon;
  44. }
  45. @Override
  46. public Page<CmVipCoupon> findPage(Page<CmVipCoupon> page, CmVipCoupon cmVipCoupon) {
  47. Page<CmVipCoupon> vipPage = super.findPage(page, cmVipCoupon);
  48. List<CmVipCoupon> cmVipCouponList = vipPage.getList();
  49. cmVipCouponList.forEach(vipCoupon -> {
  50. setVipCouponStatus(vipCoupon);
  51. List<String> bindCoupons = cmCouponVipDao.getBindCoupons(vipCoupon.getId());
  52. List<CmCoupon> couponList = cmCouponVipDao.getCouponListByIds(bindCoupons, cmVipCoupon.getCouponType(), cmVipCoupon.getStatus());
  53. Date date = new Date();
  54. couponList.forEach(coupon -> {
  55. cmCouponService.setCouponStatus(coupon, date);
  56. if ("1".equals(coupon.getCouponsMode())) {
  57. //兑换码券
  58. Integer num = cmCouponDao.findQuantityRedeemed(coupon.getId());
  59. coupon.setCodeNum(num);
  60. } else {
  61. if (2 == coupon.getCouponType()) {
  62. //用户专享劵
  63. CmCouponClub couponClub = cmCouponDao.findCouponClub(coupon.getId());
  64. if (couponClub == null) {
  65. coupon.setClaimStatus("1");
  66. } else {
  67. coupon.setClaimStatus("2");
  68. }
  69. coupon.setCouponClub(couponClub);
  70. }
  71. }
  72. });
  73. vipCoupon.setCouponList(couponList);
  74. });
  75. return vipPage;
  76. }
  77. /**
  78. * 设置会员优惠生效状态
  79. */
  80. private void setVipCouponStatus(CmVipCoupon vipCoupon) {
  81. if (!"2".equals(vipCoupon.getStatus())) {
  82. try {
  83. SimpleDateFormat df = new SimpleDateFormat("yyyy-MM");
  84. String current = df.format(new Date());
  85. String useTime = vipCoupon.getUseTime();
  86. // 0未生效 1已生效 2已关闭 3已失效
  87. if (df.parse(useTime).after(df.parse(current))) {
  88. // 未生效
  89. vipCoupon.setStatus("0");
  90. } else if (df.parse(useTime).before(df.parse(current))) {
  91. // 已失效
  92. vipCoupon.setStatus("3");
  93. } else {
  94. // 生效
  95. vipCoupon.setStatus("1");
  96. }
  97. } catch (ParseException e) {
  98. e.printStackTrace();
  99. }
  100. }
  101. }
  102. /**
  103. * 设置4张券的表单数据
  104. */
  105. public SvipCouponForm setSvipcouponForms(CmVipCoupon cmVipCoupon){
  106. SvipCouponForm svipcouponForm = new SvipCouponForm();
  107. svipcouponForm.setMonth(cmVipCoupon.getUseTime());
  108. if (null != cmVipCoupon.getCouponList()){
  109. List<CmCoupon> couponList = cmVipCoupon.getCouponList();
  110. for (int i = 0; i < couponList.size(); i++) {
  111. setSvipcouponForm(svipcouponForm, i, couponList.get(i));
  112. }
  113. }
  114. return svipcouponForm;
  115. };
  116. private SvipCouponForm setSvipcouponForm(SvipCouponForm svipcouponForm, int index, CmCoupon cmCoupon){
  117. if (index==0) {
  118. svipcouponForm.setCouponId1(cmCoupon.getId());
  119. svipcouponForm.setCouponAmount1(cmCoupon.getCouponAmount());
  120. svipcouponForm.setTouchPrice1(cmCoupon.getTouchPrice());
  121. svipcouponForm.setCouponType1(cmCoupon.getCouponType().toString());
  122. svipcouponForm.setCategoryType1(cmCoupon.getCategoryType());
  123. svipcouponForm.setProductType1(cmCoupon.getProductType());
  124. svipcouponForm.setShopId1(cmCoupon.getShopId());
  125. if (cmCoupon.getCouponType() == 0) {
  126. // 活动券,查询活动商品
  127. if ("2".equals(cmCoupon.getProductType())) {
  128. List<CmCouponAssociate> associateList = cmCouponService.findByProductType(cmCoupon);
  129. svipcouponForm.setAssociateList1(associateList);
  130. }
  131. }
  132. if (cmCoupon.getCouponType() == 3) {
  133. // 店铺券
  134. NewCmShop shop = cmCouponVipDao.getShopInfoByShopId(cmCoupon.getShopId());
  135. svipcouponForm.setShopName1(shop.getName());
  136. svipcouponForm.setShop1(shop);
  137. }
  138. } else if (index==1){
  139. svipcouponForm.setCouponId2(cmCoupon.getId());
  140. svipcouponForm.setCouponAmount2(cmCoupon.getCouponAmount());
  141. svipcouponForm.setTouchPrice2(cmCoupon.getTouchPrice());
  142. svipcouponForm.setCouponType2(cmCoupon.getCouponType().toString());
  143. svipcouponForm.setCategoryType2(cmCoupon.getCategoryType());
  144. svipcouponForm.setProductType2(cmCoupon.getProductType());
  145. svipcouponForm.setShopId2(cmCoupon.getShopId());
  146. if (cmCoupon.getCouponType() == 0) {
  147. // 活动券,查询活动商品
  148. if ("2".equals(cmCoupon.getProductType())) {
  149. List<CmCouponAssociate> associateList = cmCouponService.findByProductType(cmCoupon);
  150. svipcouponForm.setAssociateList2(associateList);
  151. }
  152. }
  153. if (cmCoupon.getCouponType() == 3) {
  154. // 店铺券
  155. NewCmShop shop = cmCouponVipDao.getShopInfoByShopId(cmCoupon.getShopId());
  156. svipcouponForm.setShopName2(shop.getName());
  157. svipcouponForm.setShop2(shop);
  158. }
  159. } else if (index==2){
  160. svipcouponForm.setCouponId3(cmCoupon.getId());
  161. svipcouponForm.setCouponAmount3(cmCoupon.getCouponAmount());
  162. svipcouponForm.setTouchPrice3(cmCoupon.getTouchPrice());
  163. svipcouponForm.setCouponType3(cmCoupon.getCouponType().toString());
  164. svipcouponForm.setCategoryType3(cmCoupon.getCategoryType());
  165. svipcouponForm.setProductType3(cmCoupon.getProductType());
  166. svipcouponForm.setShopId3(cmCoupon.getShopId());
  167. if (cmCoupon.getCouponType() == 0) {
  168. // 活动券,查询活动商品
  169. if ("2".equals(cmCoupon.getProductType())) {
  170. List<CmCouponAssociate> associateList = cmCouponService.findByProductType(cmCoupon);
  171. svipcouponForm.setAssociateList3(associateList);
  172. }
  173. }
  174. if (cmCoupon.getCouponType() == 3) {
  175. // 店铺券
  176. NewCmShop shop = cmCouponVipDao.getShopInfoByShopId(cmCoupon.getShopId());
  177. svipcouponForm.setShopName3(shop.getName());
  178. svipcouponForm.setShop3(shop);
  179. }
  180. } else if (index==3){
  181. svipcouponForm.setCouponId4(cmCoupon.getId());
  182. svipcouponForm.setCouponAmount4(cmCoupon.getCouponAmount());
  183. svipcouponForm.setTouchPrice4(cmCoupon.getTouchPrice());
  184. svipcouponForm.setCouponType4(cmCoupon.getCouponType().toString());
  185. svipcouponForm.setCategoryType4(cmCoupon.getCategoryType());
  186. svipcouponForm.setProductType4(cmCoupon.getProductType());
  187. svipcouponForm.setShopId4(cmCoupon.getShopId());
  188. if (cmCoupon.getCouponType() == 0) {
  189. // 活动券,查询活动商品
  190. if ("2".equals(cmCoupon.getProductType())) {
  191. List<CmCouponAssociate> associateList = cmCouponService.findByProductType(cmCoupon);
  192. svipcouponForm.setAssociateList4(associateList);
  193. }
  194. }
  195. if (cmCoupon.getCouponType() == 3) {
  196. // 店铺券
  197. NewCmShop shop = cmCouponVipDao.getShopInfoByShopId(cmCoupon.getShopId());
  198. svipcouponForm.setShopName4(shop.getName());
  199. svipcouponForm.setShop4(shop);
  200. }
  201. }
  202. return svipcouponForm;
  203. }
  204. /**
  205. * 保存4张券的表单数据
  206. * @param svipcouponForm
  207. */
  208. @Transactional(readOnly = false)
  209. public void saveVipCoupon(SvipCouponForm svipcouponForm){
  210. CmVipCoupon cmVipCoupon = new CmVipCoupon();
  211. cmVipCoupon.setId(svipcouponForm.getId());
  212. cmVipCoupon.setUseTime(svipcouponForm.getMonth());
  213. cmVipCoupon.setUpdateTime(new Date());
  214. cmVipCoupon.setStatus("1");
  215. cmVipCoupon.setDelFlag("0");
  216. // 解析 svipcouponForm -> 组装 CmCoupon 列表 保存
  217. CmCoupon coupon1 = new CmCoupon();
  218. CmCoupon coupon2 = new CmCoupon();
  219. CmCoupon coupon3 = new CmCoupon();
  220. CmCoupon coupon4 = new CmCoupon();
  221. boolean flag = false;
  222. if(StringUtils.isNotBlank(cmVipCoupon.getId())){
  223. // 修改
  224. coupon1.setId(svipcouponForm.getCouponId1());
  225. coupon2.setId(svipcouponForm.getCouponId2());
  226. coupon3.setId(svipcouponForm.getCouponId3());
  227. coupon4.setId(svipcouponForm.getCouponId4());
  228. cmCouponVipDao.updateVipCouponMonth(cmVipCoupon);
  229. } else {
  230. flag = true;
  231. cmCouponVipDao.insertVipCouponMonth(cmVipCoupon);
  232. }
  233. Date beginTime = DateUtil.getMinDay(svipcouponForm.getMonth());
  234. Date endTime = DateUtil.getMaxDay(svipcouponForm.getMonth());
  235. /*
  236. * 第1张券
  237. */
  238. coupon1.setName("超级会员专属优惠券");
  239. coupon1.setStartDate(beginTime);
  240. coupon1.setEndDate(endTime);
  241. coupon1.setCouponAmount(svipcouponForm.getCouponAmount1());
  242. coupon1.setTouchPrice(svipcouponForm.getTouchPrice1());
  243. coupon1.setStatus("1");
  244. // 0活动券 1品类券 3店铺券
  245. if ("0".equals(svipcouponForm.getCouponType1())){
  246. coupon1.setCouponType(0);
  247. coupon1.setProductType(svipcouponForm.getProductType1());
  248. if ("2".equals(svipcouponForm.getProductType1())){
  249. // 指定商品
  250. coupon1.setProductInfo(svipcouponForm.getProductInfo1());
  251. }
  252. } else if ("1".equals(svipcouponForm.getCouponType1())) {
  253. coupon1.setCategoryType(svipcouponForm.getCategoryType1());
  254. coupon1.setCouponType(1);
  255. } else if ("3".equals(svipcouponForm.getCouponType1())) {
  256. coupon1.setShopId(svipcouponForm.getShopId1());
  257. coupon1.setCouponType(3);
  258. }
  259. cmCouponService.save(coupon1);
  260. /*
  261. * 第2张券
  262. */
  263. coupon2.setName("超级会员专属优惠券");
  264. coupon2.setStartDate(beginTime);
  265. coupon2.setEndDate(endTime);
  266. coupon2.setCouponAmount(svipcouponForm.getCouponAmount2());
  267. coupon2.setTouchPrice(svipcouponForm.getTouchPrice2());
  268. coupon2.setStatus("1");
  269. // 0活动券 1品类券 3店铺券
  270. if ("0".equals(svipcouponForm.getCouponType2())){
  271. coupon2.setCouponType(0);
  272. coupon2.setProductType(svipcouponForm.getProductType2());
  273. if ("2".equals(svipcouponForm.getProductType2())){
  274. // 指定商品
  275. coupon2.setProductInfo(svipcouponForm.getProductInfo2());
  276. }
  277. } else if ("1".equals(svipcouponForm.getCouponType2())) {
  278. coupon2.setCategoryType(svipcouponForm.getCategoryType2());
  279. coupon2.setCouponType(1);
  280. } else if ("3".equals(svipcouponForm.getCouponType2())) {
  281. coupon2.setShopId(svipcouponForm.getShopId2());
  282. coupon2.setCouponType(3);
  283. }
  284. cmCouponService.save(coupon2);
  285. /*
  286. * 第3张券
  287. */
  288. coupon3.setName("超级会员专属优惠券");
  289. coupon3.setStartDate(beginTime);
  290. coupon3.setEndDate(endTime);
  291. coupon3.setCouponAmount(svipcouponForm.getCouponAmount3());
  292. coupon3.setTouchPrice(svipcouponForm.getTouchPrice3());
  293. coupon3.setStatus("1");
  294. // 0活动券 1品类券 3店铺券
  295. if ("0".equals(svipcouponForm.getCouponType3())){
  296. coupon3.setCouponType(0);
  297. coupon3.setProductType(svipcouponForm.getProductType3());
  298. if ("2".equals(svipcouponForm.getProductType3())){
  299. // 指定商品
  300. coupon3.setProductInfo(svipcouponForm.getProductInfo3());
  301. }
  302. } else if ("1".equals(svipcouponForm.getCouponType3())) {
  303. coupon3.setCategoryType(svipcouponForm.getCategoryType3());
  304. coupon3.setCouponType(1);
  305. } else if ("3".equals(svipcouponForm.getCouponType3())) {
  306. coupon3.setShopId(svipcouponForm.getShopId3());
  307. coupon3.setCouponType(3);
  308. }
  309. cmCouponService.save(coupon3);
  310. /*
  311. * 第4张券
  312. */
  313. coupon4.setName("超级会员专属优惠券");
  314. coupon4.setStartDate(beginTime);
  315. coupon4.setEndDate(endTime);
  316. coupon4.setCouponAmount(svipcouponForm.getCouponAmount4());
  317. coupon4.setTouchPrice(svipcouponForm.getTouchPrice4());
  318. coupon4.setStatus("1");
  319. // 0活动券 1品类券 3店铺券
  320. if ("0".equals(svipcouponForm.getCouponType4())){
  321. coupon4.setCouponType(0);
  322. coupon4.setProductType(svipcouponForm.getProductType4());
  323. if ("2".equals(svipcouponForm.getProductType4())){
  324. // 指定商品
  325. coupon4.setProductInfo(svipcouponForm.getProductInfo4());
  326. }
  327. } else if ("1".equals(svipcouponForm.getCouponType4())) {
  328. coupon4.setCategoryType(svipcouponForm.getCategoryType4());
  329. coupon4.setCouponType(1);
  330. } else if ("3".equals(svipcouponForm.getCouponType4())) {
  331. coupon4.setShopId(svipcouponForm.getShopId4());
  332. coupon4.setCouponType(3);
  333. }
  334. cmCouponService.save(coupon4);
  335. /*
  336. * vip优惠券月份关系
  337. */
  338. CmVipCouponRelation relation1 = new CmVipCouponRelation();
  339. CmVipCouponRelation relation2 = new CmVipCouponRelation();
  340. CmVipCouponRelation relation3 = new CmVipCouponRelation();
  341. CmVipCouponRelation relation4 = new CmVipCouponRelation();
  342. relation1.setMontId(cmVipCoupon.getId());
  343. relation2.setMontId(cmVipCoupon.getId());
  344. relation3.setMontId(cmVipCoupon.getId());
  345. relation4.setMontId(cmVipCoupon.getId());
  346. relation1.setCouponId(coupon1.getId());
  347. relation2.setCouponId(coupon2.getId());
  348. relation3.setCouponId(coupon3.getId());
  349. relation4.setCouponId(coupon4.getId());
  350. relation1.setUpdateTime(new Date());
  351. relation2.setUpdateTime(new Date());
  352. relation3.setUpdateTime(new Date());
  353. relation4.setUpdateTime(new Date());
  354. relation1.setDelFlag("0");
  355. relation2.setDelFlag("0");
  356. relation3.setDelFlag("0");
  357. relation4.setDelFlag("0");
  358. if (flag) {
  359. // 新增
  360. cmCouponVipDao.insertVipCouponRelation(relation1);
  361. cmCouponVipDao.insertVipCouponRelation(relation2);
  362. cmCouponVipDao.insertVipCouponRelation(relation3);
  363. cmCouponVipDao.insertVipCouponRelation(relation4);
  364. } else {
  365. // 修改
  366. cmCouponVipDao.updateVipCouponRelation(relation1);
  367. cmCouponVipDao.updateVipCouponRelation(relation2);
  368. cmCouponVipDao.updateVipCouponRelation(relation3);
  369. cmCouponVipDao.updateVipCouponRelation(relation4);
  370. }
  371. }
  372. @Override
  373. @Transactional(readOnly = false)
  374. public void delete(CmVipCoupon cmVipCoupon) {
  375. cmVipCoupon.setDelFlag("1");
  376. List<CmCoupon> couponList = cmVipCoupon.getCouponList();
  377. for (CmCoupon coupon : couponList) {
  378. coupon.setDelFlag("1");
  379. // 逻辑删除
  380. cmCouponService.delete(coupon);
  381. }
  382. cmCouponVipDao.updateVipCouponMonth(cmVipCoupon);
  383. // 逻辑删除关系表
  384. cmCouponVipDao.deleteByMonthId(cmVipCoupon.getId());
  385. }
  386. @Transactional(readOnly = false)
  387. public void close(CmVipCoupon cmVipCoupon) {
  388. cmVipCoupon.setStatus("2");
  389. List<CmCoupon> couponList = cmVipCoupon.getCouponList();
  390. for (CmCoupon coupon : couponList) {
  391. coupon.setStatus("2");
  392. cmCouponService.save(coupon);
  393. }
  394. cmCouponVipDao.updateVipCouponMonth(cmVipCoupon);
  395. }
  396. @Transactional(readOnly = false)
  397. public void open(CmVipCoupon cmVipCoupon) {
  398. cmVipCoupon.setStatus("1");
  399. List<CmCoupon> couponList = cmVipCoupon.getCouponList();
  400. for (CmCoupon coupon : couponList) {
  401. coupon.setStatus("1");
  402. cmCouponService.save(coupon);
  403. }
  404. cmCouponVipDao.updateVipCouponMonth(cmVipCoupon);
  405. }
  406. }