SaveOwnerCmd.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. package com.java110.user.cmd.owner;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.java110.core.annotation.Java110Cmd;
  5. import com.java110.core.annotation.Java110Transactional;
  6. import com.java110.core.context.ICmdDataFlowContext;
  7. import com.java110.core.event.cmd.Cmd;
  8. import com.java110.core.event.cmd.CmdEvent;
  9. import com.java110.core.factory.AuthenticationFactory;
  10. import com.java110.core.factory.GenerateCodeFactory;
  11. import com.java110.core.factory.SendSmsFactory;
  12. import com.java110.core.smo.IPhotoSMO;
  13. import com.java110.doc.annotation.*;
  14. import com.java110.dto.community.CommunityDto;
  15. import com.java110.dto.file.FileDto;
  16. import com.java110.dto.msg.SmsDto;
  17. import com.java110.dto.owner.OwnerDto;
  18. import com.java110.intf.common.IFileInnerServiceSMO;
  19. import com.java110.intf.common.IFileRelInnerServiceSMO;
  20. import com.java110.intf.common.ISmsInnerServiceSMO;
  21. import com.java110.intf.community.ICommunityInnerServiceSMO;
  22. import com.java110.intf.community.ICommunityV1InnerServiceSMO;
  23. import com.java110.intf.user.*;
  24. import com.java110.po.file.FileRelPo;
  25. import com.java110.po.owner.OwnerAppUserPo;
  26. import com.java110.po.owner.OwnerAttrPo;
  27. import com.java110.po.owner.OwnerPo;
  28. import com.java110.po.owner.OwnerRoomRelPo;
  29. import com.java110.po.user.UserPo;
  30. import com.java110.utils.cache.MappingCache;
  31. import com.java110.utils.constant.UserLevelConstant;
  32. import com.java110.utils.exception.CmdException;
  33. import com.java110.utils.util.Assert;
  34. import com.java110.utils.util.BeanConvertUtil;
  35. import com.java110.utils.util.StringUtil;
  36. import org.apache.commons.lang3.StringUtils;
  37. import org.springframework.beans.factory.annotation.Autowired;
  38. import java.util.List;
  39. /**
  40. * 保存 业主
  41. */
  42. @Java110CmdDoc(title = "添加业主",
  43. description = "第三方系统,比如招商系统同步业主信息",
  44. httpMethod = "post",
  45. url = "http://{ip}:{port}/app/owner.saveOwner",
  46. resource = "userDoc",
  47. author = "吴学文",
  48. serviceCode = "owner.saveOwner"
  49. )
  50. @Java110ParamsDoc(params = {
  51. @Java110ParamDoc(name = "communityId", length = 30, remark = "小区ID"),
  52. @Java110ParamDoc(name = "name", length = 64, remark = "业主名称"),
  53. @Java110ParamDoc(name = "link", length = 11, remark = "业主手机号"),
  54. @Java110ParamDoc(name = "idCard", length = 30, remark = "业主身份证号"),
  55. @Java110ParamDoc(name = "address", length = 512, remark = "地址"),
  56. @Java110ParamDoc(name = "sex", length = 12, remark = "性别 男 1 女 0"),
  57. @Java110ParamDoc(name = "ownerTypeCd", length = 12, remark = "业主类型 1001 业主 2002 家庭成员 家庭成员 需要传业主的ownerId"),
  58. @Java110ParamDoc(name = "remark", length = 512, remark = "备注"),
  59. @Java110ParamDoc(name = "ownerId", length = 30, remark = "业主 时 填写-1 家庭成员时填写业主ID"),
  60. @Java110ParamDoc(name = "ownerPhoto", length = -1, remark = "业主人脸 用于同步门禁 人脸开门"),
  61. })
  62. @Java110ResponseDoc(
  63. params = {
  64. @Java110ParamDoc(name = "code", type = "int", length = 11, defaultValue = "0", remark = "返回编号,0 成功 其他失败"),
  65. @Java110ParamDoc(name = "msg", type = "String", length = 250, defaultValue = "成功", remark = "描述"),
  66. }
  67. )
  68. @Java110ExampleDoc(
  69. reqBody = "{\n" +
  70. "\t\"name\": \"王王\",\n" +
  71. "\t\"age\": \"\",\n" +
  72. "\t\"link\": \"18909718888\",\n" +
  73. "\t\"address\": \"张三\",\n" +
  74. "\t\"sex\": \"0\",\n" +
  75. "\t\"ownerTypeCd\": \"1001\",\n" +
  76. "\t\"remark\": \"\",\n" +
  77. "\t\"ownerId\": -1,\n" +
  78. "\t\"ownerPhoto\": \"\",\n" +
  79. "\t\"idCard\": \"\",\n" +
  80. "\t\"communityId\": \"2022121921870161\"\n" +
  81. "}",
  82. resBody = "{\"code\":0,\"msg\":\"成功\"}"
  83. )
  84. @Java110Cmd(serviceCode = "owner.saveOwner")
  85. public class SaveOwnerCmd extends Cmd {
  86. @Autowired
  87. private IOwnerInnerServiceSMO ownerInnerServiceSMOImpl;
  88. @Autowired
  89. private ISmsInnerServiceSMO smsInnerServiceSMOImpl;
  90. @Autowired
  91. private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl;
  92. @Autowired
  93. private IFileInnerServiceSMO fileInnerServiceSMOImpl;
  94. @Autowired
  95. private IOwnerV1InnerServiceSMO ownerV1InnerServiceSMOImpl;
  96. @Autowired
  97. private IOwnerAttrInnerServiceSMO ownerAttrInnerServiceSMOImpl;
  98. @Autowired
  99. private IOwnerRoomRelV1InnerServiceSMO ownerRoomRelV1InnerServiceSMOImpl;
  100. @Autowired
  101. private ICommunityV1InnerServiceSMO communityV1InnerServiceSMOImpl;
  102. @Autowired
  103. private IPhotoSMO photoSMOImpl;
  104. @Autowired
  105. private IOwnerAppUserV1InnerServiceSMO ownerAppUserV1InnerServiceSMOImpl;
  106. @Autowired
  107. private ICommunityInnerServiceSMO communityInnerServiceSMOImpl;
  108. @Autowired
  109. private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl;
  110. @Override
  111. public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
  112. Assert.jsonObjectHaveKey(reqJson, "name", "请求报文中未包含name");
  113. Assert.jsonObjectHaveKey(reqJson, "userId", "请求报文中未包含userId");
  114. Assert.jsonObjectHaveKey(reqJson, "age", "请求报文中未包含age");
  115. Assert.jsonObjectHaveKey(reqJson, "link", "请求报文中未包含link");
  116. Assert.jsonObjectHaveKey(reqJson, "sex", "请求报文中未包含sex");
  117. Assert.jsonObjectHaveKey(reqJson, "ownerTypeCd", "请求报文中未包含类型");
  118. Assert.jsonObjectHaveKey(reqJson, "communityId", "请求报文中未包含communityId");
  119. //Assert.jsonObjectHaveKey(paramIn, "idCard", "请求报文中未包含身份证号");
  120. if (reqJson.containsKey("roomId")) {
  121. Assert.jsonObjectHaveKey(reqJson, "state", "请求报文中未包含state节点");
  122. Assert.jsonObjectHaveKey(reqJson, "storeId", "请求报文中未包含storeId节点");
  123. Assert.hasLength(reqJson.getString("roomId"), "roomId不能为空");
  124. Assert.hasLength(reqJson.getString("state"), "state不能为空");
  125. Assert.hasLength(reqJson.getString("storeId"), "storeId不能为空");
  126. }
  127. if (reqJson.containsKey("msgCode")) {
  128. SmsDto smsDto = new SmsDto();
  129. smsDto.setTel(reqJson.getString("link"));
  130. smsDto.setCode(reqJson.getString("msgCode"));
  131. smsDto = smsInnerServiceSMOImpl.validateCode(smsDto);
  132. if (!smsDto.isSuccess() && "ON".equals(MappingCache.getValue(SendSmsFactory.SMS_SEND_SWITCH))) {
  133. throw new IllegalArgumentException(smsDto.getMsg());
  134. }
  135. }
  136. //属性校验
  137. Assert.judgeAttrValue(reqJson);
  138. }
  139. @Override
  140. @Java110Transactional
  141. public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
  142. String userValidate = MappingCache.getValue("USER_VALIDATE");
  143. if ((!reqJson.containsKey("source") || !"BatchImport".equals(reqJson.getString("source"))) && "ON".equals(userValidate)) {
  144. //获取手机号(判断手机号是否重复)
  145. String link = reqJson.getString("link");
  146. OwnerDto ownerDto = new OwnerDto();
  147. ownerDto.setLink(link);
  148. ownerDto.setCommunityId(reqJson.getString("communityId"));
  149. List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryAllOwners(ownerDto);
  150. Assert.listIsNull(ownerDtos, "手机号重复,请重新输入");
  151. //获取身份证号(判断身份证号是否重复)
  152. String idCard = reqJson.getString("idCard");
  153. if (!StringUtil.isEmpty(idCard)) {
  154. OwnerDto owner = new OwnerDto();
  155. owner.setIdCard(idCard);
  156. owner.setCommunityId(reqJson.getString("communityId"));
  157. List<OwnerDto> owners = ownerInnerServiceSMOImpl.queryAllOwners(owner);
  158. Assert.listIsNull(owners, "身份证号重复,请重新输入");
  159. }
  160. }
  161. //生成memberId
  162. generateMemberId(reqJson);
  163. JSONObject businessOwner = new JSONObject();
  164. businessOwner.putAll(reqJson);
  165. businessOwner.put("state", "2000");
  166. OwnerPo ownerPo = BeanConvertUtil.covertBean(businessOwner, OwnerPo.class);
  167. if (reqJson.containsKey("age") && StringUtil.isEmpty(reqJson.getString("age"))) {
  168. ownerPo.setAge(null);
  169. }
  170. int flag = ownerV1InnerServiceSMOImpl.saveOwner(ownerPo);
  171. if (flag < 1) {
  172. throw new CmdException("保存业主失败");
  173. }
  174. //有房屋信息,则直接绑定房屋和 业主的关系
  175. if (reqJson.containsKey("roomId")) {
  176. JSONObject businessUnit = new JSONObject();
  177. businessUnit.putAll(reqJson);
  178. businessUnit.put("relId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_relId));
  179. OwnerRoomRelPo ownerRoomRelPo = BeanConvertUtil.covertBean(businessUnit, OwnerRoomRelPo.class);
  180. flag = ownerRoomRelV1InnerServiceSMOImpl.saveOwnerRoomRel(ownerRoomRelPo);
  181. if (flag < 1) {
  182. throw new CmdException("保存业主房屋关系失败");
  183. }
  184. }
  185. //保存照片
  186. photoSMOImpl.savePhoto(reqJson.getString("ownerPhoto"),
  187. reqJson.getString("memberId"),
  188. reqJson.getString("communityId"),
  189. "10000");
  190. dealOwnerAttr(reqJson, cmdDataFlowContext);
  191. String autoUser = MappingCache.getValue("OWNER", "AUTO_GENERATOR_OWNER_USER");
  192. if (!"ON".equals(autoUser)) {
  193. return;
  194. }
  195. CommunityDto communityDto = new CommunityDto();
  196. communityDto.setCommunityId(ownerPo.getCommunityId());
  197. List<CommunityDto> communityDtos = communityInnerServiceSMOImpl.queryCommunitys(communityDto);
  198. Assert.listNotNull(communityDtos, "未包含小区信息");
  199. CommunityDto tmpCommunityDto = communityDtos.get(0);
  200. UserPo userPo = new UserPo();
  201. userPo.setUserId(GenerateCodeFactory.getUserId());
  202. userPo.setName(ownerPo.getName());
  203. userPo.setTel(ownerPo.getLink());
  204. userPo.setPassword(AuthenticationFactory.passwdMd5(ownerPo.getLink()));
  205. userPo.setLevelCd(UserLevelConstant.USER_LEVEL_ORDINARY);
  206. userPo.setAge(ownerPo.getAge());
  207. userPo.setAddress(ownerPo.getAddress());
  208. userPo.setSex(ownerPo.getSex());
  209. flag = userV1InnerServiceSMOImpl.saveUser(userPo);
  210. if (flag < 1) {
  211. throw new CmdException("注册失败");
  212. }
  213. OwnerAppUserPo ownerAppUserPo = new OwnerAppUserPo();
  214. //状态类型,10000 审核中,12000 审核成功,13000 审核失败
  215. ownerAppUserPo.setState("12000");
  216. ownerAppUserPo.setAppTypeCd("10010");
  217. ownerAppUserPo.setAppUserId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_appUserId));
  218. ownerAppUserPo.setMemberId(ownerPo.getMemberId());
  219. ownerAppUserPo.setCommunityName(tmpCommunityDto.getName());
  220. ownerAppUserPo.setCommunityId(ownerPo.getCommunityId());
  221. ownerAppUserPo.setAppUserName(ownerPo.getName());
  222. ownerAppUserPo.setIdCard(ownerPo.getIdCard());
  223. ownerAppUserPo.setAppType("WECHAT");
  224. ownerAppUserPo.setLink(ownerPo.getLink());
  225. ownerAppUserPo.setUserId(userPo.getUserId());
  226. ownerAppUserPo.setOpenId("-1");
  227. flag = ownerAppUserV1InnerServiceSMOImpl.saveOwnerAppUser(ownerAppUserPo);
  228. if (flag < 1) {
  229. throw new CmdException("添加用户业主关系失败");
  230. }
  231. }
  232. /**
  233. * 生成小区楼ID
  234. *
  235. * @param paramObj 请求入参数据
  236. */
  237. private void generateMemberId(JSONObject paramObj) {
  238. String memberId = GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_ownerId);
  239. paramObj.put("memberId", memberId);
  240. if (!paramObj.containsKey("ownerId") || OwnerDto.OWNER_TYPE_CD_OWNER.equals(paramObj.getString("ownerTypeCd"))) {
  241. paramObj.put("ownerId", memberId);
  242. }
  243. }
  244. private void dealOwnerAttr(JSONObject paramObj, ICmdDataFlowContext cmdDataFlowContext) {
  245. if (!paramObj.containsKey("attrs")) {
  246. return;
  247. }
  248. JSONArray attrs = paramObj.getJSONArray("attrs");
  249. if (attrs.size() < 1) {
  250. return;
  251. }
  252. int flag = 0;
  253. JSONObject attr = null;
  254. for (int attrIndex = 0; attrIndex < attrs.size(); attrIndex++) {
  255. attr = attrs.getJSONObject(attrIndex);
  256. attr.put("communityId", paramObj.getString("communityId"));
  257. attr.put("memberId", paramObj.getString("memberId"));
  258. attr.put("attrId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
  259. OwnerAttrPo ownerAttrPo = BeanConvertUtil.covertBean(attr, OwnerAttrPo.class);
  260. flag = ownerAttrInnerServiceSMOImpl.saveOwnerAttr(ownerAttrPo);
  261. if (flag < 1) {
  262. throw new CmdException("保存业主房屋关系失败");
  263. }
  264. }
  265. }
  266. }