SaveVisitCmd.java 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. package com.java110.community.cmd.visit;
  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.CommunitySettingFactory;
  9. import com.java110.core.factory.GenerateCodeFactory;
  10. import com.java110.core.smo.IPhotoSMO;
  11. import com.java110.dto.RoomDto;
  12. import com.java110.dto.accessControlWhite.AccessControlWhiteDto;
  13. import com.java110.dto.file.FileDto;
  14. import com.java110.dto.machine.CarBlackWhiteDto;
  15. import com.java110.dto.machine.MachineDto;
  16. import com.java110.dto.oaWorkflow.OaWorkflowDto;
  17. import com.java110.dto.owner.OwnerCarDto;
  18. import com.java110.dto.parking.ParkingSpaceDto;
  19. import com.java110.dto.visit.VisitDto;
  20. import com.java110.dto.visitSetting.VisitSettingDto;
  21. import com.java110.intf.common.*;
  22. import com.java110.intf.community.*;
  23. import com.java110.intf.oa.IOaWorkflowInnerServiceSMO;
  24. import com.java110.intf.user.*;
  25. import com.java110.po.accessControlWhite.AccessControlWhitePo;
  26. import com.java110.po.car.CarBlackWhitePo;
  27. import com.java110.po.car.OwnerCarPo;
  28. import com.java110.po.file.FileRelPo;
  29. import com.java110.po.owner.VisitPo;
  30. import com.java110.po.ownerCarAttr.OwnerCarAttrPo;
  31. import com.java110.po.parking.ParkingSpacePo;
  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.DateUtil;
  36. import com.java110.utils.util.StringUtil;
  37. import com.java110.vo.ResultVo;
  38. import org.apache.commons.lang3.StringUtils;
  39. import org.springframework.beans.factory.annotation.Autowired;
  40. import org.springframework.http.ResponseEntity;
  41. import java.util.*;
  42. @Java110Cmd(serviceCode = "visit.saveVisit")
  43. public class SaveVisitCmd extends Cmd {
  44. @Autowired
  45. private IVisitInnerServiceSMO visitInnerServiceSMOImpl;
  46. @Autowired
  47. private IVisitV1InnerServiceSMO visitV1InnerServiceSMOImpl;
  48. @Autowired
  49. private IPhotoSMO photoSMOImpl;
  50. @Autowired
  51. private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
  52. @Autowired
  53. private IOwnerCarV1InnerServiceSMO ownerCarV1InnerServiceSMOImpl;
  54. @Autowired
  55. private IOwnerCarAttrInnerServiceSMO ownerCarAttrInnerServiceSMOImpl;
  56. @Autowired
  57. private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
  58. @Autowired
  59. private IVisitSettingV1InnerServiceSMO visitSettingV1InnerServiceSMOImpl;
  60. @Autowired
  61. private ICarBlackWhiteV1InnerServiceSMO carBlackWhiteV1InnerServiceSMOImpl;
  62. @Autowired
  63. private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
  64. @Autowired
  65. private IMachineInnerServiceSMO machineInnerServiceSMOImpl;
  66. @Autowired
  67. private IAccessControlWhiteV1InnerServiceSMO accessControlWhiteV1InnerServiceSMOImpl;
  68. @Autowired
  69. private IOaWorkflowInnerServiceSMO oaWorkflowInnerServiceSMOImpl;
  70. @Autowired
  71. private IUserInnerServiceSMO userInnerServiceSMOImpl;
  72. @Autowired
  73. private IOaWorkflowActivitiInnerServiceSMO oaWorkflowActivitiInnerServiceSMOImpl;
  74. public static final String CODE_PREFIX_ID = "10";
  75. //键
  76. public static final String IS_NEED_REVIEW = "IS_NEED_REVIEW";
  77. //键
  78. public static final String VISIT_NUMBER = "VISIT_NUMBER";
  79. //键
  80. public static final String CAR_FREE_TIME = "CAR_FREE_TIME";
  81. //键
  82. public static final String ASCRIPTION_CAR_AREA_ID = "ASCRIPTION_CAR_AREA_ID";
  83. @Override
  84. public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
  85. Assert.hasKeyAndValue(reqJson, "vName", "必填,请填写访客姓名");
  86. Assert.hasKeyAndValue(reqJson, "visitGender", "必填,请填写访客姓名");
  87. Assert.hasKeyAndValue(reqJson, "phoneNumber", "必填,请填写访客联系方式");
  88. Assert.hasKeyAndValue(reqJson, "visitTime", "必填,请填写访客拜访时间");
  89. }
  90. @Override
  91. @Java110Transactional
  92. public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
  93. String userId = context.getReqHeaders().get("user-id");
  94. String storeId = context.getReqHeaders().get("store-id");
  95. reqJson.put("vId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_vId));
  96. //随行人数
  97. if (StringUtil.isEmpty(reqJson.getString("entourage"))) {
  98. reqJson.put("entourage", "0");
  99. }
  100. reqJson.put("recordState", "0");
  101. VisitPo visitPo = BeanConvertUtil.covertBean(reqJson, VisitPo.class);
  102. visitPo.setState(VisitDto.STATE_W);
  103. visitPo.setUserId(userId);
  104. int flag = visitV1InnerServiceSMOImpl.saveVisit(visitPo);
  105. if (flag < 1) {
  106. throw new CmdException("保存访客失败");
  107. }
  108. photoSMOImpl.savePhoto(reqJson, reqJson.getString("vId"), reqJson.getString("communityId"));
  109. // 是否需要审核
  110. if (hasAuditVisit(visitPo, reqJson, storeId, userId)) {
  111. return; // 需要审核结束,审核时处理 相应 送图片 和车牌数据
  112. }
  113. visitPo = new VisitPo();
  114. visitPo.setState(VisitDto.STATE_C);
  115. visitPo.setvId(reqJson.getString("vId"));
  116. visitPo.setCommunityId(reqJson.getString("communityId"));
  117. flag = visitV1InnerServiceSMOImpl.updateVisit(visitPo);
  118. if (flag < 1) {
  119. throw new CmdException("修改访客状态失败");
  120. }
  121. }
  122. /**
  123. * 是否需要审核
  124. *
  125. * @param visitPo
  126. * @param reqJson
  127. */
  128. private boolean hasAuditVisit(VisitPo visitPo, JSONObject reqJson, String storeId, String userId) {
  129. VisitSettingDto visitSettingDto = new VisitSettingDto();
  130. visitSettingDto.setCommunityId(reqJson.getString("communityId"));
  131. List<VisitSettingDto> visitSettingDtos = visitSettingV1InnerServiceSMOImpl.queryVisitSettings(visitSettingDto);
  132. if (visitSettingDtos == null || visitSettingDtos.size() < 1) {
  133. return false;
  134. }
  135. // 需要审核
  136. if (!VisitSettingDto.AUDIT_WAY_YES.equals(visitSettingDtos.get(0).getAuditWay())) {
  137. return false;
  138. }
  139. //触发 审批流程
  140. OaWorkflowDto oaWorkflowDto = new OaWorkflowDto();
  141. oaWorkflowDto.setStoreId(storeId);
  142. oaWorkflowDto.setFlowId(visitSettingDtos.get(0).getFlowId());
  143. List<OaWorkflowDto> oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto);
  144. Assert.listOnlyOne(oaWorkflowDtos, "流程不存在");
  145. if (!OaWorkflowDto.STATE_COMPLAINT.equals(oaWorkflowDtos.get(0).getState())) {
  146. throw new IllegalArgumentException(oaWorkflowDtos.get(0).getFlowName() + "流程未部署");
  147. }
  148. if (StringUtil.isEmpty(oaWorkflowDtos.get(0).getProcessDefinitionKey())) {
  149. throw new IllegalArgumentException(oaWorkflowDtos.get(0).getFlowName() + "流程未部署");
  150. }
  151. //启动任务
  152. JSONObject flowJson = new JSONObject();
  153. flowJson.put("processDefinitionKey", oaWorkflowDtos.get(0).getProcessDefinitionKey());
  154. flowJson.put("createUserId", userId);
  155. flowJson.put("flowId", oaWorkflowDtos.get(0).getFlowId());
  156. flowJson.put("id", visitPo.getvId());
  157. flowJson.put("auditMessage", "提交审核");
  158. flowJson.put("storeId", storeId);
  159. reqJson.put("processDefinitionKey", oaWorkflowDtos.get(0).getProcessDefinitionKey());
  160. JSONObject result = oaWorkflowActivitiInnerServiceSMOImpl.startProcess(flowJson);
  161. //提交者提交
  162. flowJson = new JSONObject();
  163. flowJson.put("processInstanceId", result.getString("processInstanceId"));
  164. flowJson.put("createUserId", userId);
  165. flowJson.put("nextUserId", userId); // 这里要求流程 下一处理人必须要指定
  166. flowJson.put("storeId", storeId);
  167. flowJson.put("id", visitPo.getvId());
  168. flowJson.put("flowId", oaWorkflowDtos.get(0).getFlowId());
  169. oaWorkflowActivitiInnerServiceSMOImpl.autoFinishFirstTask(flowJson);
  170. visitPo = new VisitPo();
  171. visitPo.setState(VisitDto.STATE_D);
  172. visitPo.setvId(reqJson.getString("vId"));
  173. visitPo.setCommunityId(reqJson.getString("communityId"));
  174. int flag = visitV1InnerServiceSMOImpl.updateVisit(visitPo);
  175. if (flag < 1) {
  176. throw new CmdException("修改访客状态失败");
  177. }
  178. return true;
  179. }
  180. }