CouponPropertyUserGiftCarCmd.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. package com.java110.acct.cmd.couponProperty;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.java110.core.annotation.Java110Cmd;
  4. import com.java110.core.annotation.Java110Transactional;
  5. import com.java110.core.context.ICmdDataFlowContext;
  6. import com.java110.core.event.cmd.Cmd;
  7. import com.java110.core.event.cmd.CmdEvent;
  8. import com.java110.core.factory.GenerateCodeFactory;
  9. import com.java110.doc.annotation.*;
  10. import com.java110.dto.coupon.CouponPropertyPoolConfigDto;
  11. import com.java110.dto.coupon.CouponPropertyUserDto;
  12. import com.java110.dto.parking.ParkingCouponCarDto;
  13. import com.java110.dto.user.UserDto;
  14. import com.java110.intf.acct.*;
  15. import com.java110.intf.user.IUserV1InnerServiceSMO;
  16. import com.java110.po.coupon.CouponPropertyUserPo;
  17. import com.java110.po.coupon.CouponPropertyUserDetailPo;
  18. import com.java110.po.parking.ParkingCouponCarPo;
  19. import com.java110.utils.exception.CmdException;
  20. import com.java110.utils.lock.DistributedLock;
  21. import com.java110.utils.util.Assert;
  22. import com.java110.utils.util.DateUtil;
  23. import com.java110.utils.util.ListUtil;
  24. import com.java110.vo.ResultVo;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import java.text.ParseException;
  27. import java.util.List;
  28. @Java110CmdDoc(title = "优惠券赠送车辆",
  29. description = "业主缴费获取的优惠券赠送车辆免费停车",
  30. httpMethod = "post",
  31. url = "http://{ip}:{port}/app/couponProperty.couponPropertyUserGiftCar",
  32. resource = "acctDoc",
  33. author = "吴学文",
  34. serviceCode = "couponProperty.couponPropertyUserGiftCar"
  35. )
  36. @Java110ParamsDoc(params = {
  37. @Java110ParamDoc(name = "communityId", length = 30, remark = "小区ID"),
  38. @Java110ParamDoc(name = "carNum", length = 12, remark = "赠送车辆"),
  39. @Java110ParamDoc(name = "couponId", length = 30, remark = "赠送优惠券"),
  40. @Java110ParamDoc(name = "giftCount", type = "int", length = 11, remark = "赠送数量"),
  41. @Java110ParamDoc(name = "paId", length = 30, remark = "停车场"),
  42. })
  43. @Java110ResponseDoc(
  44. params = {
  45. @Java110ParamDoc(name = "code", type = "int", length = 11, defaultValue = "0", remark = "返回编号,0 成功 其他失败"),
  46. @Java110ParamDoc(name = "msg", type = "String", length = 250, defaultValue = "成功", remark = "描述"),
  47. }
  48. )
  49. @Java110ExampleDoc(
  50. reqBody = "http://{ip}:{port}/app/parkingArea.listParkingAreas?num=&typeCd=&paId=&page=1&row=10&communityId=2022112555490011",
  51. resBody = "{\"page\":0,\"parkingAreas\":[{\"attrs\":[{\"attrId\":\"112022112796270047\",\"communityId\":\"2022112555490011\",\"listShow\":\"Y\",\"paId\":\"102022112706900045\",\"page\":-1,\"records\":0,\"row\":0,\"specCd\":\"6185-17861\",\"specName\":\"外部编码\",\"specType\":\"2233\",\"statusCd\":\"0\",\"total\":0,\"value\":\"123\"}],\"createTime\":\"2022-11-27 01:48:27\",\"num\":\"A\",\"paId\":\"102022112706900045\",\"remark\":\"\",\"typeCd\":\"1001\"}],\"records\":1,\"rows\":0,\"total\":1}"
  52. )
  53. @Java110Cmd(serviceCode = "couponProperty.couponPropertyUserGiftCar")
  54. public class CouponPropertyUserGiftCarCmd extends Cmd {
  55. @Autowired
  56. private ICouponPropertyUserV1InnerServiceSMO couponPropertyUserV1InnerServiceSMOImpl;
  57. @Autowired
  58. private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl;
  59. @Autowired
  60. private IParkingCouponCarV1InnerServiceSMO parkingCouponCarV1InnerServiceSMOImpl;
  61. @Autowired
  62. private ICouponPropertyUserDetailV1InnerServiceSMO couponPropertyUserDetailV1InnerServiceSMOImpl;
  63. @Autowired
  64. private ICouponPropertyPoolConfigV1InnerServiceSMO couponPropertyPoolConfigV1InnerServiceSMOImpl;
  65. @Override
  66. public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
  67. Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区");
  68. Assert.hasKeyAndValue(reqJson, "carNum", "未包含车辆");
  69. Assert.hasKeyAndValue(reqJson, "couponId", "未包含停车券");
  70. Assert.hasKeyAndValue(reqJson, "giftCount", "未包含赠送数量");
  71. Assert.hasKeyAndValue(reqJson, "paId", "未包含停车场");
  72. String userId = context.getReqHeaders().get("user-id");
  73. //前端车牌号输入问题处理 去除空格和小写
  74. reqJson.put("carNum", reqJson.getString("carNum").trim().toUpperCase());
  75. //校验优惠券是否存在
  76. UserDto userDto = new UserDto();
  77. userDto.setUserId(userId);
  78. List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
  79. Assert.listOnlyOne(userDtos, "用户不存在");
  80. CouponPropertyUserDto couponPropertyUserDto = new CouponPropertyUserDto();
  81. couponPropertyUserDto.setCouponId(reqJson.getString("couponId"));
  82. couponPropertyUserDto.setTel(userDtos.get(0).getTel());
  83. couponPropertyUserDto.setToType(CouponPropertyUserDto.TO_TYPE_PARKING);
  84. couponPropertyUserDto.setState(CouponPropertyUserDto.STATE_WAIT);
  85. List<CouponPropertyUserDto> couponPropertyUserDtos = couponPropertyUserV1InnerServiceSMOImpl.queryCouponPropertyUsers(couponPropertyUserDto);
  86. if (ListUtil.isNull(couponPropertyUserDtos)) {
  87. throw new CmdException("优惠券不存在");
  88. }
  89. if (!"Y".equals(couponPropertyUserDtos.get(0).getIsExpire())) {
  90. throw new CmdException("优惠券已过期");
  91. }
  92. int stock = Integer.parseInt(couponPropertyUserDtos.get(0).getStock());
  93. int giftCount = Integer.parseInt(reqJson.getString("giftCount"));
  94. if (stock < giftCount) {
  95. throw new CmdException("优惠券不够赠送,当前数量为:" + stock);
  96. }
  97. CouponPropertyPoolConfigDto couponPropertyPoolConfigDto = new CouponPropertyPoolConfigDto();
  98. couponPropertyPoolConfigDto.setCouponId(couponPropertyUserDtos.get(0).getCppId());
  99. couponPropertyPoolConfigDto.setColumnKey("hours");
  100. List<CouponPropertyPoolConfigDto> couponPropertyPoolConfigDtos = couponPropertyPoolConfigV1InnerServiceSMOImpl.queryCouponPropertyPoolConfigs(couponPropertyPoolConfigDto);
  101. Assert.listOnlyOne(couponPropertyPoolConfigDtos, "未包含优惠券配置信息");
  102. Double.parseDouble(couponPropertyPoolConfigDtos.get(0).getColumnValue());
  103. }
  104. @Override
  105. @Java110Transactional
  106. public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
  107. String userId = context.getReqHeaders().get("user-id");
  108. //校验优惠券是否存在
  109. UserDto userDto = new UserDto();
  110. userDto.setUserId(userId);
  111. List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
  112. Assert.listOnlyOne(userDtos, "用户不存在");
  113. String requestId = DistributedLock.getLockUUID();
  114. String key = this.getClass().getSimpleName() + reqJson.getString("couponId");
  115. int flag = 0;
  116. List<CouponPropertyUserDto> couponPropertyUserDtos = null;
  117. int giftCount = Integer.parseInt(reqJson.getString("giftCount"));
  118. try {
  119. CouponPropertyUserDto couponPropertyUserDto = new CouponPropertyUserDto();
  120. couponPropertyUserDto.setCouponId(reqJson.getString("couponId"));
  121. couponPropertyUserDto.setTel(userDtos.get(0).getTel());
  122. couponPropertyUserDto.setToType(CouponPropertyUserDto.TO_TYPE_PARKING);
  123. couponPropertyUserDto.setState(CouponPropertyUserDto.STATE_WAIT);
  124. couponPropertyUserDtos = couponPropertyUserV1InnerServiceSMOImpl.queryCouponPropertyUsers(couponPropertyUserDto);
  125. if (ListUtil.isNull(couponPropertyUserDtos)) {
  126. throw new CmdException("优惠券不存在");
  127. }
  128. if (!"Y".equals(couponPropertyUserDtos.get(0).getIsExpire())) {
  129. throw new CmdException("优惠券已过期");
  130. }
  131. int stock = Integer.parseInt(couponPropertyUserDtos.get(0).getStock());
  132. if (stock < giftCount) {
  133. throw new CmdException("优惠券不够赠送,当前数量为:" + stock);
  134. }
  135. CouponPropertyUserPo couponPropertyUserPo = new CouponPropertyUserPo();
  136. couponPropertyUserPo.setCouponId(couponPropertyUserDtos.get(0).getCouponId());
  137. couponPropertyUserPo.setCommunityId(couponPropertyUserDtos.get(0).getCommunityId());
  138. couponPropertyUserPo.setStock((stock - giftCount) + "");
  139. if (stock == giftCount) {
  140. couponPropertyUserPo.setState(CouponPropertyUserDto.STATE_FINISH);
  141. }
  142. flag = couponPropertyUserV1InnerServiceSMOImpl.updateCouponPropertyUser(couponPropertyUserPo);
  143. if (flag < 1) {
  144. throw new CmdException("赠送失败");
  145. }
  146. } finally {
  147. DistributedLock.releaseDistributedLock(requestId, key);
  148. }
  149. for (int giftIndex = 0; giftIndex < giftCount; giftIndex++) {
  150. //保存核销记录
  151. String pccId = GenerateCodeFactory.getGeneratorId("11");
  152. CouponPropertyUserDetailPo couponPropertyUserDetailPo = new CouponPropertyUserDetailPo();
  153. couponPropertyUserDetailPo.setBusinessKey(pccId);
  154. couponPropertyUserDetailPo.setCommunityId(reqJson.getString("communityId"));
  155. couponPropertyUserDetailPo.setCouponId(couponPropertyUserDtos.get(0).getCouponId());
  156. couponPropertyUserDetailPo.setCouponName(couponPropertyUserDtos.get(0).getCouponName());
  157. couponPropertyUserDetailPo.setUoId(GenerateCodeFactory.getGeneratorId("11"));
  158. couponPropertyUserDetailPo.setDetailType(couponPropertyUserDtos.get(0).getToType());
  159. couponPropertyUserDetailPo.setRemark("赠送" + reqJson.getString("carNum") + "停车券");
  160. flag = couponPropertyUserDetailV1InnerServiceSMOImpl.saveCouponPropertyUserDetail(couponPropertyUserDetailPo);
  161. if (flag < 1) {
  162. throw new CmdException("赠送失败");
  163. }
  164. CouponPropertyPoolConfigDto couponPropertyPoolConfigDto = new CouponPropertyPoolConfigDto();
  165. couponPropertyPoolConfigDto.setCouponId(couponPropertyUserDtos.get(0).getCppId());
  166. couponPropertyPoolConfigDto.setColumnKey("hours");
  167. List<CouponPropertyPoolConfigDto> couponPropertyPoolConfigDtos = couponPropertyPoolConfigV1InnerServiceSMOImpl.queryCouponPropertyPoolConfigs(couponPropertyPoolConfigDto);
  168. Assert.listOnlyOne(couponPropertyPoolConfigDtos, "未包含优惠券配置信息");
  169. double value = Double.parseDouble(couponPropertyPoolConfigDtos.get(0).getColumnValue()) * 60;
  170. value = Math.ceil(value);
  171. ParkingCouponCarPo parkingCouponCarPo = new ParkingCouponCarPo();
  172. parkingCouponCarPo.setPccId(pccId);
  173. parkingCouponCarPo.setCouponId(reqJson.getString("couponId"));
  174. parkingCouponCarPo.setCouponShopId(reqJson.getString("couponId"));
  175. parkingCouponCarPo.setCommunityId(reqJson.getString("communityId"));
  176. parkingCouponCarPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
  177. parkingCouponCarPo.setEndTime(DateUtil.getAddDayString(DateUtil.getCurrentDate(), DateUtil.DATE_FORMATE_STRING_A, 1));
  178. parkingCouponCarPo.setPaId(reqJson.getString("paId"));
  179. parkingCouponCarPo.setState(ParkingCouponCarDto.STATE_WAIT);
  180. parkingCouponCarPo.setTypeCd("1001"); // 时长赠送
  181. parkingCouponCarPo.setGiveWay("4004"); //物业缴费赠送
  182. parkingCouponCarPo.setValue(value + "");
  183. parkingCouponCarPo.setCarNum(reqJson.getString("carNum"));
  184. parkingCouponCarPo.setRemark(userDtos.get(0).getName() + "-" + userDtos.get(0).getTel() + "赠送");
  185. parkingCouponCarPo.setShopId(userDtos.get(0).getUserId());
  186. flag = parkingCouponCarV1InnerServiceSMOImpl.saveParkingCouponCar(parkingCouponCarPo);
  187. if (flag < 1) {
  188. throw new CmdException("保存数据失败");
  189. }
  190. }
  191. context.setResponseEntity(ResultVo.success());
  192. }
  193. }