CustomSendIntegralCmd.java 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. package com.java110.acct.cmd.integral;
  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.doc.annotation.*;
  9. import com.java110.dto.account.AccountDto;
  10. import com.java110.dto.integralConfig.IntegralConfigDto;
  11. import com.java110.dto.owner.OwnerDto;
  12. import com.java110.dto.user.UserDto;
  13. import com.java110.intf.acct.IAccountInnerServiceSMO;
  14. import com.java110.intf.acct.IIntegralConfigV1InnerServiceSMO;
  15. import com.java110.intf.acct.IIntegralGiftDetailV1InnerServiceSMO;
  16. import com.java110.intf.user.IOwnerV1InnerServiceSMO;
  17. import com.java110.intf.user.IUserV1InnerServiceSMO;
  18. import com.java110.po.account.AccountPo;
  19. import com.java110.po.accountDetail.AccountDetailPo;
  20. import com.java110.po.integralGiftDetail.IntegralGiftDetailPo;
  21. import com.java110.service.smo.ISaveSystemErrorSMO;
  22. import com.java110.utils.exception.CmdException;
  23. import com.java110.utils.lock.DistributedLock;
  24. import com.java110.utils.util.Assert;
  25. import com.java110.utils.util.StringUtil;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import java.text.ParseException;
  28. import java.util.ArrayList;
  29. import java.util.List;
  30. /**
  31. * 积分赠送规则,提供第三方平台使用
  32. */
  33. @Java110CmdDoc(title = "积分赠送",
  34. description = "三方平台赠送积分给用户",
  35. httpMethod = "post",
  36. url = "http://{ip}:{port}/app/integral.customSendIntegral",
  37. resource = "acctDoc",
  38. author = "吴学文",
  39. serviceCode = "integral.customSendIntegral"
  40. )
  41. @Java110ParamsDoc(params = {
  42. @Java110ParamDoc(name = "link", length = 30, remark = "手机号"),
  43. @Java110ParamDoc(name = "quantity", length = 30, remark = "赠送积分数量"),
  44. @Java110ParamDoc(name = "communityId", length = 30, remark = "小区"),
  45. })
  46. @Java110ResponseDoc(
  47. params = {
  48. @Java110ParamDoc(name = "code", type = "int", length = 11, defaultValue = "0", remark = "返回编号,0 成功 其他失败"),
  49. @Java110ParamDoc(name = "msg", type = "String", length = 250, defaultValue = "成功", remark = "描述"),
  50. }
  51. )
  52. @Java110ExampleDoc(
  53. reqBody = "{'link':'18909711443','quantity':'10','communityId':'12323123'}",
  54. resBody = "{'code':0,'msg':'成功'}"
  55. )
  56. @Java110Cmd(serviceCode = "integral.customSendIntegral")
  57. public class CustomSendIntegralCmd extends Cmd {
  58. @Autowired
  59. private IIntegralGiftDetailV1InnerServiceSMO integralGiftDetailV1InnerServiceSMOImpl;
  60. @Autowired
  61. private IAccountInnerServiceSMO accountInnerServiceSMOImpl;
  62. @Autowired
  63. private ISaveSystemErrorSMO saveSystemErrorSMOImpl;
  64. @Autowired
  65. private IOwnerV1InnerServiceSMO ownerInnerServiceSMOImpl;
  66. @Autowired
  67. private IIntegralConfigV1InnerServiceSMO integralConfigV1InnerServiceSMOImpl;
  68. @Autowired
  69. private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl;
  70. @Override
  71. public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
  72. Assert.hasKeyAndValue(reqJson, "link", "未包含手机号");
  73. Assert.hasKeyAndValue(reqJson, "quantity", "未包含赠送积分数量");
  74. Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区");
  75. }
  76. @Override
  77. public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
  78. //向积分账户中充值积分
  79. AccountDto accountDto = new AccountDto();
  80. accountDto.setLink(reqJson.getString("link"));
  81. accountDto.setAcctType(AccountDto.ACCT_TYPE_INTEGRAL);
  82. accountDto.setPartId(reqJson.getString("communityId"));
  83. List<AccountDto> accountDtos = accountInnerServiceSMOImpl.queryAccounts(accountDto);
  84. if (accountDtos == null || accountDtos.size() < 1) {
  85. accountDtos = addAccountDto(accountDto, reqJson);
  86. }
  87. AccountDetailPo accountDetailPo = new AccountDetailPo();
  88. accountDetailPo.setAcctId(accountDtos.get(0).getAcctId());
  89. accountDetailPo.setObjId(accountDtos.get(0).getObjId());
  90. accountDetailPo.setObjType(accountDtos.get(0).getObjType());
  91. accountDetailPo.setAmount(reqJson.getString("quantity"));
  92. int flag = accountInnerServiceSMOImpl.prestoreAccount(accountDetailPo);
  93. if (flag < 1) {
  94. throw new CmdException("扣款失败");
  95. }
  96. doGiftIntegral(accountDtos.get(0), reqJson);
  97. }
  98. private List<AccountDto> addAccountDto(AccountDto accountDto, JSONObject reqJson) {
  99. // todo 查询账户名称 这里如果存在业主则业主名称 不是业主 则 填写用户名称,如果用户都没有 则返回空
  100. String acctName = getAccountName(reqJson);
  101. if (StringUtil.isEmpty(acctName)) {
  102. return new ArrayList<>();
  103. }
  104. //开始锁代码
  105. String requestId = DistributedLock.getLockUUID();
  106. String key = this.getClass().getSimpleName() + "AddCountDto" + reqJson.getString("link");
  107. try {
  108. DistributedLock.waitGetDistributedLock(key, requestId);
  109. AccountPo accountPo = new AccountPo();
  110. accountPo.setAmount("0");
  111. accountPo.setAcctId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_acctId));
  112. accountPo.setObjId(reqJson.getString("objId"));
  113. accountPo.setObjType(AccountDto.OBJ_TYPE_PERSON);
  114. accountPo.setAcctType(AccountDto.ACCT_TYPE_CASH);
  115. accountPo.setAcctName(acctName);
  116. accountPo.setPartId(reqJson.getString("communityId"));
  117. accountPo.setLink(reqJson.getString("link"));
  118. accountInnerServiceSMOImpl.saveAccount(accountPo);
  119. List<AccountDto> accountDtos = accountInnerServiceSMOImpl.queryAccounts(accountDto);
  120. return accountDtos;
  121. } finally {
  122. DistributedLock.releaseDistributedLock(requestId, key);
  123. }
  124. }
  125. private String getAccountName(JSONObject reqJson) {
  126. // todo 业主用 手机号查询
  127. OwnerDto tmpOwnerDto = new OwnerDto();
  128. tmpOwnerDto.setLink(reqJson.getString("link"));
  129. tmpOwnerDto.setCommunityId(reqJson.getString("communityId"));
  130. List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryOwners(tmpOwnerDto);
  131. if (ownerDtos != null && ownerDtos.size() > 0) {
  132. reqJson.put("objId", ownerDtos.get(0).getMemberId());
  133. return ownerDtos.get(0).getName();
  134. }
  135. //todo 非业主是游客
  136. UserDto userDto = new UserDto();
  137. userDto.setTel(reqJson.getString("link"));
  138. List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
  139. if (userDtos != null && userDtos.size() > 0) {
  140. reqJson.put("objId", "-1");
  141. return userDtos.get(0).getName();
  142. }
  143. return "";
  144. }
  145. private void doGiftIntegral(AccountDto accountDto, JSONObject reqJson) {
  146. IntegralConfigDto integralConfigDto = new IntegralConfigDto();
  147. integralConfigDto.setCommunityId(reqJson.getString("communityId"));
  148. List<IntegralConfigDto> integralConfigDtos = integralConfigV1InnerServiceSMOImpl.queryIntegralConfigs(integralConfigDto);
  149. if(integralConfigDtos == null || integralConfigDtos.size()< 1){
  150. throw new CmdException("积分规则不存在,请添加");
  151. }
  152. UserDto userDto = new UserDto();
  153. userDto.setTel(reqJson.getString("link"));
  154. List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
  155. Assert.listOnlyOne(userDtos, "用户不存在");
  156. //先加明细
  157. IntegralGiftDetailPo integralGiftDetailPo = new IntegralGiftDetailPo();
  158. integralGiftDetailPo.setCommunityId(reqJson.getString("communityId"));
  159. integralGiftDetailPo.setAcctId(accountDto.getAcctId());
  160. integralGiftDetailPo.setAcctName(accountDto.getAcctName());
  161. integralGiftDetailPo.setAcctDetailId("-1");
  162. integralGiftDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId("11"));
  163. integralGiftDetailPo.setConfigId(integralConfigDtos.get(0).getConfigId());
  164. integralGiftDetailPo.setConfigName(integralConfigDtos.get(0).getConfigName());
  165. integralGiftDetailPo.setRuleId("-1");
  166. integralGiftDetailPo.setRuleName(reqJson.getString("ruleName"));
  167. integralGiftDetailPo.setQuantity(reqJson.getString("quantity"));
  168. integralGiftDetailPo.setCreateUserId(userDtos.get(0).getUserId());
  169. integralGiftDetailPo.setUserName(userDtos.get(0).getName());
  170. integralGiftDetailPo.setTel(userDtos.get(0).getTel());
  171. integralGiftDetailV1InnerServiceSMOImpl.saveIntegralGiftDetail(integralGiftDetailPo);
  172. }
  173. }