| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- package com.java110.user.cmd.owner;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.java110.core.annotation.Java110Cmd;
- import com.java110.core.annotation.Java110Transactional;
- import com.java110.core.context.ICmdDataFlowContext;
- import com.java110.core.event.cmd.Cmd;
- import com.java110.core.event.cmd.CmdEvent;
- import com.java110.core.factory.AuthenticationFactory;
- import com.java110.core.factory.GenerateCodeFactory;
- import com.java110.core.factory.SendSmsFactory;
- import com.java110.core.smo.IPhotoSMO;
- import com.java110.doc.annotation.*;
- import com.java110.dto.account.AccountDto;
- import com.java110.dto.community.CommunityDto;
- import com.java110.dto.file.FileDto;
- import com.java110.dto.msg.SmsDto;
- import com.java110.dto.owner.OwnerDto;
- import com.java110.intf.acct.IAccountInnerServiceSMO;
- import com.java110.intf.common.IFileInnerServiceSMO;
- import com.java110.intf.common.IFileRelInnerServiceSMO;
- import com.java110.intf.common.ISmsInnerServiceSMO;
- import com.java110.intf.community.ICommunityInnerServiceSMO;
- import com.java110.intf.community.ICommunityV1InnerServiceSMO;
- import com.java110.intf.user.*;
- import com.java110.po.account.AccountPo;
- import com.java110.po.file.FileRelPo;
- import com.java110.po.owner.OwnerAppUserPo;
- import com.java110.po.owner.OwnerAttrPo;
- import com.java110.po.owner.OwnerPo;
- import com.java110.po.owner.OwnerRoomRelPo;
- import com.java110.po.user.UserPo;
- import com.java110.utils.cache.MappingCache;
- import com.java110.utils.constant.UserLevelConstant;
- import com.java110.utils.exception.CmdException;
- import com.java110.utils.lock.DistributedLock;
- import com.java110.utils.util.Assert;
- import com.java110.utils.util.BeanConvertUtil;
- import com.java110.utils.util.StringUtil;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * 保存 业主
- */
- @Java110CmdDoc(title = "添加业主",
- description = "第三方系统,比如招商系统同步业主信息",
- httpMethod = "post",
- url = "http://{ip}:{port}/app/owner.saveOwner",
- resource = "userDoc",
- author = "吴学文",
- serviceCode = "owner.saveOwner"
- )
- @Java110ParamsDoc(params = {
- @Java110ParamDoc(name = "communityId", length = 30, remark = "小区ID"),
- @Java110ParamDoc(name = "name", length = 64, remark = "业主名称"),
- @Java110ParamDoc(name = "link", length = 11, remark = "业主手机号"),
- @Java110ParamDoc(name = "idCard", length = 30, remark = "业主身份证号"),
- @Java110ParamDoc(name = "address", length = 512, remark = "地址"),
- @Java110ParamDoc(name = "sex", length = 12, remark = "性别 男 1 女 0"),
- @Java110ParamDoc(name = "ownerTypeCd", length = 12, remark = "业主类型 1001 业主 2002 家庭成员 家庭成员 需要传业主的ownerId"),
- @Java110ParamDoc(name = "remark", length = 512, remark = "备注"),
- @Java110ParamDoc(name = "ownerId", length = 30, remark = "业主 时 填写-1 家庭成员时填写业主ID"),
- @Java110ParamDoc(name = "ownerPhoto", length = -1, remark = "业主人脸 用于同步门禁 人脸开门"),
- })
- @Java110ResponseDoc(
- params = {
- @Java110ParamDoc(name = "code", type = "int", length = 11, defaultValue = "0", remark = "返回编号,0 成功 其他失败"),
- @Java110ParamDoc(name = "msg", type = "String", length = 250, defaultValue = "成功", remark = "描述"),
- }
- )
- @Java110ExampleDoc(
- reqBody = "{\n" +
- "\t\"name\": \"王王\",\n" +
- "\t\"age\": \"\",\n" +
- "\t\"link\": \"18909718888\",\n" +
- "\t\"address\": \"张三\",\n" +
- "\t\"sex\": \"0\",\n" +
- "\t\"ownerTypeCd\": \"1001\",\n" +
- "\t\"remark\": \"\",\n" +
- "\t\"ownerId\": -1,\n" +
- "\t\"ownerPhoto\": \"\",\n" +
- "\t\"idCard\": \"\",\n" +
- "\t\"communityId\": \"2022121921870161\"\n" +
- "}",
- resBody = "{\"code\":0,\"msg\":\"成功\"}"
- )
- @Java110Cmd(serviceCode = "owner.saveOwner")
- public class SaveOwnerCmd extends Cmd {
- @Autowired
- private IOwnerInnerServiceSMO ownerInnerServiceSMOImpl;
- @Autowired
- private ISmsInnerServiceSMO smsInnerServiceSMOImpl;
- @Autowired
- private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl;
- @Autowired
- private IFileInnerServiceSMO fileInnerServiceSMOImpl;
- @Autowired
- private IOwnerV1InnerServiceSMO ownerV1InnerServiceSMOImpl;
- @Autowired
- private IOwnerAttrInnerServiceSMO ownerAttrInnerServiceSMOImpl;
- @Autowired
- private IOwnerRoomRelV1InnerServiceSMO ownerRoomRelV1InnerServiceSMOImpl;
- @Autowired
- private ICommunityV1InnerServiceSMO communityV1InnerServiceSMOImpl;
- @Autowired
- private IPhotoSMO photoSMOImpl;
- @Autowired
- private IOwnerAppUserV1InnerServiceSMO ownerAppUserV1InnerServiceSMOImpl;
- @Autowired
- private ICommunityInnerServiceSMO communityInnerServiceSMOImpl;
- @Autowired
- private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl;
- @Autowired
- private IAccountInnerServiceSMO accountInnerServiceSMOImpl;
- @Override
- public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
- Assert.jsonObjectHaveKey(reqJson, "name", "请求报文中未包含name");
- Assert.jsonObjectHaveKey(reqJson, "userId", "请求报文中未包含userId");
- Assert.jsonObjectHaveKey(reqJson, "age", "请求报文中未包含age");
- Assert.jsonObjectHaveKey(reqJson, "link", "请求报文中未包含link");
- Assert.jsonObjectHaveKey(reqJson, "sex", "请求报文中未包含sex");
- Assert.jsonObjectHaveKey(reqJson, "ownerTypeCd", "请求报文中未包含类型");
- Assert.jsonObjectHaveKey(reqJson, "communityId", "请求报文中未包含communityId");
- //Assert.jsonObjectHaveKey(paramIn, "idCard", "请求报文中未包含身份证号");
- if (reqJson.containsKey("roomId")) {
- Assert.jsonObjectHaveKey(reqJson, "state", "请求报文中未包含state节点");
- Assert.jsonObjectHaveKey(reqJson, "storeId", "请求报文中未包含storeId节点");
- Assert.hasLength(reqJson.getString("roomId"), "roomId不能为空");
- Assert.hasLength(reqJson.getString("state"), "state不能为空");
- Assert.hasLength(reqJson.getString("storeId"), "storeId不能为空");
- }
- if (reqJson.containsKey("msgCode")) {
- SmsDto smsDto = new SmsDto();
- smsDto.setTel(reqJson.getString("link"));
- smsDto.setCode(reqJson.getString("msgCode"));
- smsDto = smsInnerServiceSMOImpl.validateCode(smsDto);
- if (!smsDto.isSuccess() && "ON".equals(MappingCache.getValue(SendSmsFactory.SMS_SEND_SWITCH))) {
- throw new IllegalArgumentException(smsDto.getMsg());
- }
- }
- //属性校验
- Assert.judgeAttrValue(reqJson);
- }
- @Override
- @Java110Transactional
- public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
- String userValidate = MappingCache.getValue("USER_VALIDATE");
- if ((!reqJson.containsKey("source") || !"BatchImport".equals(reqJson.getString("source"))) && "ON".equals(userValidate)) {
- //获取手机号(判断手机号是否重复)
- String link = reqJson.getString("link");
- OwnerDto ownerDto = new OwnerDto();
- ownerDto.setLink(link);
- ownerDto.setCommunityId(reqJson.getString("communityId"));
- List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryAllOwners(ownerDto);
- Assert.listIsNull(ownerDtos, "手机号重复,请重新输入");
- //获取身份证号(判断身份证号是否重复)
- String idCard = reqJson.getString("idCard");
- if (!StringUtil.isEmpty(idCard)) {
- OwnerDto owner = new OwnerDto();
- owner.setIdCard(idCard);
- owner.setCommunityId(reqJson.getString("communityId"));
- List<OwnerDto> owners = ownerInnerServiceSMOImpl.queryAllOwners(owner);
- Assert.listIsNull(owners, "身份证号重复,请重新输入");
- }
- }
- //生成memberId
- generateMemberId(reqJson);
- JSONObject businessOwner = new JSONObject();
- businessOwner.putAll(reqJson);
- businessOwner.put("state", "2000");
- OwnerPo ownerPo = BeanConvertUtil.covertBean(businessOwner, OwnerPo.class);
- if (reqJson.containsKey("age") && StringUtil.isEmpty(reqJson.getString("age"))) {
- ownerPo.setAge(null);
- }
- int flag = ownerV1InnerServiceSMOImpl.saveOwner(ownerPo);
- if (flag < 1) {
- throw new CmdException("保存业主失败");
- }
- //有房屋信息,则直接绑定房屋和 业主的关系
- if (reqJson.containsKey("roomId")) {
- JSONObject businessUnit = new JSONObject();
- businessUnit.putAll(reqJson);
- businessUnit.put("relId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_relId));
- OwnerRoomRelPo ownerRoomRelPo = BeanConvertUtil.covertBean(businessUnit, OwnerRoomRelPo.class);
- flag = ownerRoomRelV1InnerServiceSMOImpl.saveOwnerRoomRel(ownerRoomRelPo);
- if (flag < 1) {
- throw new CmdException("保存业主房屋关系失败");
- }
- }
- //保存照片
- photoSMOImpl.savePhoto(reqJson.getString("ownerPhoto"),
- reqJson.getString("memberId"),
- reqJson.getString("communityId"),
- "10000");
- dealOwnerAttr(reqJson, cmdDataFlowContext);
- //业主 开通 现金账户,不然配合商城 会存在bug
- addAccountDto(ownerPo.getMemberId(),ownerPo.getCommunityId());
- String autoUser = MappingCache.getValue("OWNER", "AUTO_GENERATOR_OWNER_USER");
- if (!"ON".equals(autoUser)) {
- return;
- }
- CommunityDto communityDto = new CommunityDto();
- communityDto.setCommunityId(ownerPo.getCommunityId());
- List<CommunityDto> communityDtos = communityInnerServiceSMOImpl.queryCommunitys(communityDto);
- Assert.listNotNull(communityDtos, "未包含小区信息");
- CommunityDto tmpCommunityDto = communityDtos.get(0);
- UserPo userPo = new UserPo();
- userPo.setUserId(GenerateCodeFactory.getUserId());
- userPo.setName(ownerPo.getName());
- userPo.setTel(ownerPo.getLink());
- userPo.setPassword(AuthenticationFactory.passwdMd5(ownerPo.getLink()));
- userPo.setLevelCd(UserLevelConstant.USER_LEVEL_ORDINARY);
- userPo.setAge(ownerPo.getAge());
- userPo.setAddress(ownerPo.getAddress());
- userPo.setSex(ownerPo.getSex());
- flag = userV1InnerServiceSMOImpl.saveUser(userPo);
- if (flag < 1) {
- throw new CmdException("注册失败");
- }
- OwnerAppUserPo ownerAppUserPo = new OwnerAppUserPo();
- //状态类型,10000 审核中,12000 审核成功,13000 审核失败
- ownerAppUserPo.setState("12000");
- ownerAppUserPo.setAppTypeCd("10010");
- ownerAppUserPo.setAppUserId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_appUserId));
- ownerAppUserPo.setMemberId(ownerPo.getMemberId());
- ownerAppUserPo.setCommunityName(tmpCommunityDto.getName());
- ownerAppUserPo.setCommunityId(ownerPo.getCommunityId());
- ownerAppUserPo.setAppUserName(ownerPo.getName());
- ownerAppUserPo.setIdCard(ownerPo.getIdCard());
- ownerAppUserPo.setAppType("WECHAT");
- ownerAppUserPo.setLink(ownerPo.getLink());
- ownerAppUserPo.setUserId(userPo.getUserId());
- ownerAppUserPo.setOpenId("-1");
- flag = ownerAppUserV1InnerServiceSMOImpl.saveOwnerAppUser(ownerAppUserPo);
- if (flag < 1) {
- throw new CmdException("添加用户业主关系失败");
- }
- }
- private void addAccountDto(String ownerId,String communityId) {
- if (StringUtil.isEmpty(ownerId)) {
- return ;
- }
- //开始锁代码
- String requestId = DistributedLock.getLockUUID();
- String key = this.getClass().getSimpleName() + "AddCountDto" +ownerId;
- try {
- DistributedLock.waitGetDistributedLock(key, requestId);
- AccountPo accountPo = new AccountPo();
- accountPo.setAmount("0");
- accountPo.setAcctId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_acctId));
- accountPo.setObjId(ownerId);
- accountPo.setObjType(AccountDto.OBJ_TYPE_PERSON);
- accountPo.setAcctType(AccountDto.ACCT_TYPE_CASH);
- OwnerDto tmpOwnerDto = new OwnerDto();
- tmpOwnerDto.setMemberId(ownerId);
- tmpOwnerDto.setCommunityId(communityId);
- List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryOwners(tmpOwnerDto);
- Assert.listOnlyOne(ownerDtos, "业主不存在");
- accountPo.setAcctName(ownerDtos.get(0).getName());
- accountPo.setPartId(communityId);
- accountInnerServiceSMOImpl.saveAccount(accountPo);
- } finally {
- DistributedLock.releaseDistributedLock(requestId, key);
- }
- }
- /**
- * 生成小区楼ID
- *
- * @param paramObj 请求入参数据
- */
- private void generateMemberId(JSONObject paramObj) {
- String memberId = GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_ownerId);
- paramObj.put("memberId", memberId);
- if (!paramObj.containsKey("ownerId") || OwnerDto.OWNER_TYPE_CD_OWNER.equals(paramObj.getString("ownerTypeCd"))) {
- paramObj.put("ownerId", memberId);
- }
- }
- private void dealOwnerAttr(JSONObject paramObj, ICmdDataFlowContext cmdDataFlowContext) {
- if (!paramObj.containsKey("attrs")) {
- return;
- }
- JSONArray attrs = paramObj.getJSONArray("attrs");
- if (attrs.size() < 1) {
- return;
- }
- int flag = 0;
- JSONObject attr = null;
- for (int attrIndex = 0; attrIndex < attrs.size(); attrIndex++) {
- attr = attrs.getJSONObject(attrIndex);
- attr.put("communityId", paramObj.getString("communityId"));
- attr.put("memberId", paramObj.getString("memberId"));
- attr.put("attrId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
- OwnerAttrPo ownerAttrPo = BeanConvertUtil.covertBean(attr, OwnerAttrPo.class);
- flag = ownerAttrInnerServiceSMOImpl.saveOwnerAttr(ownerAttrPo);
- if (flag < 1) {
- throw new CmdException("保存业主房屋关系失败");
- }
- }
- }
- }
|