SaveOwnerRepairCmd.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. package com.java110.community.cmd.ownerRepair;
  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.GenerateCodeFactory;
  10. import com.java110.doc.annotation.*;
  11. import com.java110.dto.fee.FeeConfigDto;
  12. import com.java110.dto.fee.FeeDto;
  13. import com.java110.dto.file.FileDto;
  14. import com.java110.dto.file.FileRelDto;
  15. import com.java110.dto.repair.RepairDto;
  16. import com.java110.dto.repair.RepairUserDto;
  17. import com.java110.dto.user.UserDto;
  18. import com.java110.intf.common.IFileInnerServiceSMO;
  19. import com.java110.intf.common.IFileRelInnerServiceSMO;
  20. import com.java110.intf.community.IRepairPoolV1InnerServiceSMO;
  21. import com.java110.intf.community.IRepairUserV1InnerServiceSMO;
  22. import com.java110.intf.fee.IFeeConfigInnerServiceSMO;
  23. import com.java110.intf.fee.IFeeInnerServiceSMO;
  24. import com.java110.intf.user.INotepadV1InnerServiceSMO;
  25. import com.java110.intf.user.IUserV1InnerServiceSMO;
  26. import com.java110.po.file.FileRelPo;
  27. import com.java110.po.notepad.NotepadPo;
  28. import com.java110.po.owner.RepairPoolPo;
  29. import com.java110.po.owner.RepairUserPo;
  30. import com.java110.utils.cache.MappingCache;
  31. import com.java110.utils.constant.FeeTypeConstant;
  32. import com.java110.utils.constant.MappingConstant;
  33. import com.java110.utils.exception.CmdException;
  34. import com.java110.utils.util.Assert;
  35. import com.java110.utils.util.BeanConvertUtil;
  36. import com.java110.utils.util.DateUtil;
  37. import com.java110.utils.util.StringUtil;
  38. import com.java110.vo.ResultVo;
  39. import org.apache.commons.lang3.StringUtils;
  40. import org.springframework.beans.factory.annotation.Autowired;
  41. import org.springframework.http.ResponseEntity;
  42. import java.text.ParseException;
  43. import java.util.List;
  44. /**
  45. * 业主提交报修 功能
  46. * 请求地址为/app/ownerRepair.saveOwnerRepair
  47. */
  48. @Java110CmdDoc(title = "业主报修",
  49. description = "主要用于业主报修",
  50. httpMethod = "post",
  51. url = "http://{ip}:{port}/app/ownerRepair.saveOwnerRepair",
  52. resource = "communityDoc",
  53. author = "张峰",
  54. serviceCode = "ownerRepair.saveOwnerRepair",
  55. seq = 23
  56. )
  57. //入参要求
  58. @Java110ParamsDoc(params = {
  59. @Java110ParamDoc(name = "communityId", length = 30, remark = "小区编码"),
  60. @Java110ParamDoc(name = "appointmentTime", length = 30, remark = "预约时间"),
  61. @Java110ParamDoc(name = "context", length = 30, remark = "报修内容"),
  62. @Java110ParamDoc(name = "photos", length = 30, remark = "报修图片"),
  63. @Java110ParamDoc(name = "repairName", length = 30, remark = "报修人姓名"),
  64. @Java110ParamDoc(name = "repairObjName", length = 30, remark = "报修人住址"),
  65. @Java110ParamDoc(name = "repairObjName", length = 30, remark = "报修人所在小区"),
  66. @Java110ParamDoc(name = "roomId", length = 30, remark = "房屋id"),
  67. @Java110ParamDoc(name = "tel", length = 30, remark = "报修联系电话"),
  68. @Java110ParamDoc(name = "userName", length = 30, remark = "业主或成员姓名"),
  69. @Java110ParamDoc(name = "repairChannel", length = 30, remark = "报修渠道"),
  70. @Java110ParamDoc(name = "repairType", length = 30, remark = "派单类型"),
  71. @Java110ParamDoc(name = "repairObjType", length = 30, remark = "房屋??"),
  72. })
  73. @Java110ResponseDoc(
  74. params = {
  75. @Java110ParamDoc(name = "code", type = "int", length = 11, defaultValue = "0", remark = "返回编号,0 成功 其他失败"),
  76. @Java110ParamDoc(name = "msg", type = "String", length = 250, defaultValue = "成功", remark = "报修成功")
  77. }
  78. )
  79. @Java110ExampleDoc(
  80. reqBody="{\"repairName\":\"测试\",\"repairType\":\"102022081592760001\",\"appointmentTime\":\"2022-11-26 15:18:00\",\"tel\":\"15239726115\",\"roomId\":\"752022090312040033\",\"photos\":[],\"context\":\"反反复复烦烦烦\",\"userId\":\"302022102708350644\",\"userName\":\"测试\",\"communityId\":\"2022032267510001\",\"bindDate\":\"2022-11-26\",\"bindTime\":\"15:18\",\"repairObjType\":\"004\",\"repairChannel\":\"Z\",\"repairObjId\":\"752022090312040033\",\"repairObjName\":\"1号楼1单元202室\"}",
  81. resBody="{\"code\":0,\"msg\":\"成功\",\"page\":0,\"records\":0,\"rows\":0,\"total\":0}"
  82. )
  83. @Java110Cmd(serviceCode = "ownerRepair.saveOwnerRepair")
  84. public class SaveOwnerRepairCmd extends Cmd {
  85. @Autowired
  86. private IFeeConfigInnerServiceSMO feeConfigInnerServiceSMOImpl;
  87. @Autowired
  88. private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
  89. @Autowired
  90. private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl;
  91. @Autowired
  92. private IRepairPoolV1InnerServiceSMO repairPoolV1InnerServiceSMOImpl;
  93. @Autowired
  94. private IRepairUserV1InnerServiceSMO repairUserV1InnerServiceSMOImpl;
  95. @Autowired
  96. private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl;
  97. @Autowired
  98. private IFileInnerServiceSMO fileInnerServiceSMOImpl;
  99. @Autowired
  100. private INotepadV1InnerServiceSMO notepadV1InnerServiceSMOImpl;
  101. //域
  102. public static final String DOMAIN_COMMON = "DOMAIN.COMMON";
  103. //键(报修业主未处理费用条数)
  104. public static final String REPAIR_FEE_NUMBER = "REPAIR_FEE_NUMBER";
  105. @Override
  106. public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
  107. //Assert.hasKeyAndValue(reqJson, "xxx", "xxx");
  108. Assert.hasKeyAndValue(reqJson, "repairType", "必填,请选择报修类型");
  109. Assert.hasKeyAndValue(reqJson, "repairName", "必填,请填写报修人名称");
  110. Assert.hasKeyAndValue(reqJson, "tel", "必填,请填写报修人手机号");
  111. Assert.hasKeyAndValue(reqJson, "repairObjType", "必填,请填写报修对象类型");
  112. Assert.hasKeyAndValue(reqJson, "repairObjId", "必填,请填写报修对象ID");
  113. Assert.hasKeyAndValue(reqJson, "repairObjName", "必填,请填写报修对象名称");
  114. Assert.hasKeyAndValue(reqJson, "appointmentTime", "必填,请填写预约时间");
  115. Assert.hasKeyAndValue(reqJson, "context", "必填,请填写报修内容");
  116. Assert.hasKeyAndValue(reqJson, "communityId", "必填,请填写小区ID");
  117. String userId = context.getReqHeaders().get("user-id");
  118. Assert.hasLength(userId, "请填写提交用户ID");
  119. UserDto userDto = new UserDto();
  120. userDto.setUserId(userId);
  121. userDto.setPage(1);
  122. userDto.setRow(1);
  123. List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
  124. Assert.listOnlyOne(userDtos, "未查询到用户");
  125. reqJson.put("userId", userDtos.get(0).getUserId());
  126. reqJson.put("userName", userDtos.get(0).getName());
  127. }
  128. @Override
  129. @Java110Transactional
  130. public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
  131. //获取当前小区id
  132. String communityId = reqJson.getString("communityId");
  133. //查询默认费用项
  134. FeeConfigDto feeConfigDto = new FeeConfigDto();
  135. feeConfigDto.setCommunityId(communityId);
  136. feeConfigDto.setFeeTypeCd(FeeTypeConstant.FEE_TYPE_REPAIR);
  137. feeConfigDto.setIsDefault(FeeConfigDto.DEFAULT_FEE_CONFIG);
  138. List<FeeConfigDto> feeConfigDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto);
  139. if (feeConfigDtos.size() != 1) {
  140. ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "默认维修费用有多条或不存在!");
  141. context.setResponseEntity(responseEntity);
  142. return;
  143. }
  144. FeeDto feeDto = new FeeDto();
  145. feeDto.setConfigId(feeConfigDtos.get(0).getConfigId());
  146. feeDto.setPayerObjId(reqJson.getString("repairObjId"));
  147. feeDto.setState(FeeDto.STATE_DOING);
  148. //查询报修业主处理中的报修费
  149. List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
  150. //取出开关映射的值(维修师傅未处理最大单数)
  151. String repairFeeNumber = MappingCache.getValue(MappingConstant.REPAIR_DOMAIN, REPAIR_FEE_NUMBER);
  152. if (feeDtos != null && StringUtil.isInteger(repairFeeNumber) && feeDtos.size() >= Integer.parseInt(repairFeeNumber)) {
  153. ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "该房屋存在" + Integer.parseInt(repairFeeNumber) + "条未处理的费用,请缴费后再进行报修!");
  154. context.setResponseEntity(responseEntity);
  155. return;
  156. }
  157. JSONObject businessOwnerRepair = new JSONObject();
  158. businessOwnerRepair.putAll(reqJson);
  159. businessOwnerRepair.put("repairId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_repairId));
  160. businessOwnerRepair.put("state", RepairDto.STATE_WAIT);
  161. RepairPoolPo repairPoolPo = BeanConvertUtil.covertBean(businessOwnerRepair, RepairPoolPo.class);
  162. int flag = repairPoolV1InnerServiceSMOImpl.saveRepairPoolNew(repairPoolPo);
  163. if (flag < 1) {
  164. throw new CmdException("修改失败");
  165. }
  166. RepairUserPo repairUserPo = BeanConvertUtil.covertBean(reqJson, RepairUserPo.class);
  167. repairUserPo.setContext("订单提交");
  168. repairUserPo.setPreStaffId("-1");
  169. repairUserPo.setPreStaffName("-1");
  170. repairUserPo.setPreRuId("-1");
  171. repairUserPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
  172. repairUserPo.setRepairEvent(RepairUserDto.REPAIR_EVENT_START_USER);
  173. repairUserPo.setStaffId(reqJson.getString("userId"));
  174. repairUserPo.setStaffName(reqJson.getString("userName"));
  175. repairUserPo.setRepairId(businessOwnerRepair.getString("repairId"));
  176. repairUserPo.setState(RepairUserDto.STATE_SUBMIT);
  177. repairUserPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
  178. repairUserPo.setRuId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_ruId));
  179. flag = repairUserV1InnerServiceSMOImpl.saveRepairUserNew(repairUserPo);
  180. if (flag < 1) {
  181. throw new CmdException("修改用户失败");
  182. }
  183. if (reqJson.containsKey("photos") && !StringUtils.isEmpty(reqJson.getString("photos"))) {
  184. JSONArray photos = reqJson.getJSONArray("photos");
  185. for (int _photoIndex = 0; _photoIndex < photos.size(); _photoIndex++) {
  186. String _photo = photos.getString(_photoIndex);
  187. if(_photo.length()> 512){
  188. FileDto fileDto = new FileDto();
  189. fileDto.setFileId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_file_id));
  190. fileDto.setFileName(fileDto.getFileId());
  191. fileDto.setContext(_photo);
  192. fileDto.setSuffix("jpeg");
  193. fileDto.setCommunityId(reqJson.getString("communityId"));
  194. _photo = fileInnerServiceSMOImpl.saveFile(fileDto);
  195. }
  196. JSONObject businessUnit = new JSONObject();
  197. businessUnit.put("fileRelId", GenerateCodeFactory.getGeneratorId("12"));
  198. businessUnit.put("relTypeCd", FileRelDto.REL_TYPE_CD_REPAIR);
  199. businessUnit.put("saveWay", "ftp");
  200. businessUnit.put("objId", businessOwnerRepair.getString("repairId"));
  201. businessUnit.put("fileRealName", _photo.toString());
  202. businessUnit.put("fileSaveName", _photo.toString());
  203. FileRelPo fileRelPo = BeanConvertUtil.covertBean(businessUnit, FileRelPo.class);
  204. flag = fileRelInnerServiceSMOImpl.saveFileRel(fileRelPo);
  205. if (flag < 1) {
  206. throw new CmdException("保存图片失败");
  207. }
  208. }
  209. }
  210. if (StringUtil.jsonHasKayAndValue(reqJson, "noteId")) {
  211. NotepadPo notepadPo = new NotepadPo();
  212. notepadPo.setNoteId(reqJson.getString("noteId"));
  213. notepadPo.setThridId(repairPoolPo.getRepairId());
  214. flag = notepadV1InnerServiceSMOImpl.updateNotepad(notepadPo);
  215. if (flag < 1) {
  216. throw new CmdException("修改业主反馈失败");
  217. }
  218. }
  219. }
  220. }