TeldSendParkingCouponCarCmd.java 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. package com.java110.acct.cmd.parkingCoupon;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.java110.core.annotation.Java110Cmd;
  4. import com.java110.core.context.ICmdDataFlowContext;
  5. import com.java110.core.event.cmd.Cmd;
  6. import com.java110.core.event.cmd.CmdEvent;
  7. import com.java110.core.factory.GenerateCodeFactory;
  8. import com.java110.dto.parking.ParkingCouponCarDto;
  9. import com.java110.dto.parking.ParkingCouponShopDto;
  10. import com.java110.dto.shop.ShopDto;
  11. import com.java110.dto.shop.StoreShopDto;
  12. import com.java110.dto.store.StoreUserDto;
  13. import com.java110.intf.acct.IParkingCouponCarV1InnerServiceSMO;
  14. import com.java110.intf.acct.IParkingCouponShopV1InnerServiceSMO;
  15. import com.java110.intf.mall.IShopInnerServiceSMO;
  16. import com.java110.intf.shore.IShoreShopV1InnerServiceSMO;
  17. import com.java110.intf.store.IStoreShopCommunityV1InnerServiceSMO;
  18. import com.java110.intf.store.IStoreShopV1InnerServiceSMO;
  19. import com.java110.intf.store.IStoreUserV1InnerServiceSMO;
  20. import com.java110.po.parking.ParkingCouponCarPo;
  21. import com.java110.po.parking.ParkingCouponShopPo;
  22. import com.java110.utils.cache.MappingCache;
  23. import com.java110.utils.exception.CmdException;
  24. import com.java110.utils.lock.DistributedLock;
  25. import com.java110.utils.util.*;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import org.springframework.http.HttpStatus;
  28. import org.springframework.http.ResponseEntity;
  29. import java.text.ParseException;
  30. import java.util.List;
  31. /**
  32. * 特来电同步车牌号给物业系统
  33. *
  34. *
  35. * /app/ext/parkingCoupon.teldSendParkingCouponCar/992020051967020024
  36. * /app/ext/login.getTokenForTeld/992020051967020024
  37. */
  38. @Java110Cmd(serviceCode = "notification_charge_end_order_info")
  39. public class TeldSendParkingCouponCarCmd extends Cmd {
  40. @Autowired
  41. private IStoreUserV1InnerServiceSMO storeUserV1InnerServiceSMOImpl;
  42. @Autowired
  43. private IStoreShopV1InnerServiceSMO storeShopV1InnerServiceSMOImpl;
  44. @Autowired
  45. private IParkingCouponShopV1InnerServiceSMO parkingCouponShopV1InnerServiceSMOImpl;
  46. @Autowired
  47. private IParkingCouponCarV1InnerServiceSMO parkingCouponCarV1InnerServiceSMOImpl;
  48. public static final String CODE_PREFIX_ID = "10";
  49. @Override
  50. public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
  51. Assert.hasKeyAndValue(reqJson, "Data", "未包含加密报文");
  52. }
  53. @Override
  54. public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
  55. String signKey = MappingCache.getValue("TELD_DOMAIN", "SIGN_KEY");
  56. String aesKey = MappingCache.getValue("TELD_DOMAIN", "AES_KEY");
  57. String aesIv = MappingCache.getValue("TELD_DOMAIN", "AES_IV");
  58. String data = TeldUtil.Decrypt(reqJson.getString("Data"), aesKey, aesIv);
  59. if (StringUtil.isEmpty(data)) {
  60. throw new CmdException("未包含报文");
  61. }
  62. JSONObject dataObj = JSONObject.parseObject(data);
  63. String StartChargeSeq = dataObj.getString("StartChargeSeq");
  64. int ConfirmResult = 0;
  65. int PlateAutResult = 1;
  66. int PlateAutFailReason = 0;
  67. try {
  68. doSend(context, dataObj);
  69. } catch (Exception e) {
  70. e.printStackTrace();
  71. ConfirmResult = 1;
  72. PlateAutResult = 2;
  73. PlateAutFailReason = 6;
  74. }
  75. JSONObject paramOut = new JSONObject();
  76. paramOut.put("StartChargeSeq", StartChargeSeq);
  77. paramOut.put("ConfirmResult", ConfirmResult);
  78. paramOut.put("PlateAutResult", PlateAutResult);
  79. paramOut.put("PlateAutFailReason", PlateAutFailReason);
  80. String paramStr = "";
  81. try {
  82. paramStr = TeldUtil.generateReturnParam(paramOut.toJSONString(), aesKey, aesIv, signKey, reqJson.getString("OperatorID"));
  83. } catch (Exception e) {
  84. e.printStackTrace();
  85. }
  86. context.setResponseEntity(new ResponseEntity(paramStr, HttpStatus.OK));
  87. }
  88. private void doSend(ICmdDataFlowContext context, JSONObject dataObj) {
  89. String userId = context.getReqHeaders().get("user-id");
  90. StoreUserDto storeUserDto = new StoreUserDto();
  91. storeUserDto.setUserId(userId);
  92. List<StoreUserDto> storeUserDtos = storeUserV1InnerServiceSMOImpl.queryStoreUsers(storeUserDto);
  93. Assert.listOnlyOne(storeUserDtos, "商户不存在");
  94. StoreShopDto storeShopDto = new StoreShopDto();
  95. storeUserDto.setStoreId(storeUserDtos.get(0).getStoreId());
  96. List<ShopDto> storeShops = storeShopV1InnerServiceSMOImpl.queryStoreShops(storeShopDto);
  97. if (storeShops == null || storeShops.size() < 1) {
  98. Assert.listOnlyOne(storeUserDtos, "商户店铺不存在");
  99. }
  100. ParkingCouponShopDto parkingCouponShopDto = new ParkingCouponShopDto();
  101. parkingCouponShopDto.setHasQuantity("Y");
  102. parkingCouponShopDto.setShopId(storeShops.get(0).getShopId());
  103. List<ParkingCouponShopDto> parkingCouponShopDtos = parkingCouponShopV1InnerServiceSMOImpl.queryParkingCouponShops(parkingCouponShopDto);
  104. if (parkingCouponShopDtos == null || parkingCouponShopDtos.size() < 1) { //停车券已用完
  105. throw new CmdException("停车券已用完");
  106. }
  107. String carNum = dataObj.getString("PlateNum");
  108. int quantity = 0;
  109. int flag = 0;
  110. String requestId = DistributedLock.getLockUUID();
  111. String key = this.getClass().getSimpleName() + parkingCouponShopDtos.get(0).getCouponShopId();
  112. try {
  113. DistributedLock.waitGetDistributedLock(key, requestId);
  114. parkingCouponShopDto = new ParkingCouponShopDto();
  115. parkingCouponShopDto.setCouponShopId(parkingCouponShopDtos.get(0).getCouponShopId());
  116. parkingCouponShopDto.setShopId(storeShops.get(0).getShopId());
  117. parkingCouponShopDtos = parkingCouponShopV1InnerServiceSMOImpl.queryParkingCouponShops(parkingCouponShopDto);
  118. quantity = Integer.parseInt(parkingCouponShopDtos.get(0).getQuantity());
  119. if (quantity < 1) {
  120. throw new CmdException("停车劵不足,请购买");
  121. }
  122. ParkingCouponShopPo parkingCouponShopPo = new ParkingCouponShopPo();
  123. parkingCouponShopPo.setCouponShopId(parkingCouponShopDtos.get(0).getCouponShopId());
  124. parkingCouponShopPo.setQuantity((quantity - 1) + "");
  125. flag = parkingCouponShopV1InnerServiceSMOImpl.updateParkingCouponShop(parkingCouponShopPo);
  126. if (flag < 1) {
  127. throw new CmdException("优惠券递减失败");
  128. }
  129. } finally {
  130. DistributedLock.releaseDistributedLock(requestId, key);
  131. }
  132. String StartChargeSeq = dataObj.getString("StartChargeSeq");
  133. JSONObject remarkObj = new JSONObject();
  134. remarkObj.put("StartChargeSeq", StartChargeSeq);
  135. ParkingCouponCarPo parkingCouponCarPo = new ParkingCouponCarPo();
  136. parkingCouponCarPo.setCarNum(carNum);
  137. parkingCouponCarPo.setGiveWay("1001");
  138. parkingCouponCarPo.setCouponShopId(parkingCouponShopDtos.get(0).getCouponShopId());
  139. parkingCouponCarPo.setShopId(parkingCouponShopDtos.get(0).getShopId());
  140. parkingCouponCarPo.setPccId(GenerateCodeFactory.getGeneratorId(CODE_PREFIX_ID));
  141. parkingCouponCarPo.setCouponId(parkingCouponShopDtos.get(0).getCouponId());
  142. parkingCouponCarPo.setCommunityId(parkingCouponShopDtos.get(0).getCommunityId());
  143. parkingCouponCarPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
  144. parkingCouponCarPo.setEndTime(DateUtil.getAddDayString(DateUtil.getCurrentDate(), DateUtil.DATE_FORMATE_STRING_A, 1));
  145. parkingCouponCarPo.setPaId(parkingCouponShopDtos.get(0).getPaId());
  146. parkingCouponCarPo.setState(ParkingCouponCarDto.STATE_WAIT);
  147. parkingCouponCarPo.setTypeCd(parkingCouponShopDtos.get(0).getTypeCd());
  148. parkingCouponCarPo.setValue(parkingCouponShopDtos.get(0).getValue());
  149. parkingCouponCarPo.setRemark(remarkObj.toJSONString());
  150. flag = parkingCouponCarV1InnerServiceSMOImpl.saveParkingCouponCar(parkingCouponCarPo);
  151. if (flag < 1) {
  152. throw new CmdException("保存数据失败");
  153. }
  154. }
  155. }