RepairFinishCmd.java 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607
  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.dto.fee.FeeAttrDto;
  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.owner.OwnerDto;
  16. import com.java110.dto.owner.OwnerRoomRelDto;
  17. import com.java110.dto.repair.RepairDto;
  18. import com.java110.dto.repair.RepairUserDto;
  19. import com.java110.dto.user.UserStorehouseDto;
  20. import com.java110.intf.common.IFileInnerServiceSMO;
  21. import com.java110.intf.common.IFileRelInnerServiceSMO;
  22. import com.java110.intf.community.*;
  23. import com.java110.intf.fee.IFeeAttrInnerServiceSMO;
  24. import com.java110.intf.fee.IFeeConfigInnerServiceSMO;
  25. import com.java110.intf.fee.IPayFeeV1InnerServiceSMO;
  26. import com.java110.intf.store.IResourceStoreUseRecordV1InnerServiceSMO;
  27. import com.java110.intf.store.IUserStorehouseInnerServiceSMO;
  28. import com.java110.intf.store.IUserStorehouseV1InnerServiceSMO;
  29. import com.java110.intf.user.IOwnerInnerServiceSMO;
  30. import com.java110.intf.user.IOwnerRoomRelInnerServiceSMO;
  31. import com.java110.po.fee.FeeAttrPo;
  32. import com.java110.po.fee.PayFeePo;
  33. import com.java110.po.file.FileRelPo;
  34. import com.java110.po.owner.RepairPoolPo;
  35. import com.java110.po.owner.RepairUserPo;
  36. import com.java110.po.purchase.ResourceStorePo;
  37. import com.java110.po.resource.ResourceStoreUseRecordPo;
  38. import com.java110.po.user.UserStorehousePo;
  39. import com.java110.utils.constant.FeeTypeConstant;
  40. import com.java110.utils.exception.CmdException;
  41. import com.java110.utils.util.*;
  42. import com.java110.vo.ResultVo;
  43. import org.apache.commons.lang3.StringUtils;
  44. import org.springframework.beans.factory.annotation.Autowired;
  45. import org.springframework.http.ResponseEntity;
  46. import java.math.BigDecimal;
  47. import java.text.DecimalFormat;
  48. import java.text.ParseException;
  49. import java.util.ArrayList;
  50. import java.util.List;
  51. @Java110Cmd(serviceCode = "ownerRepair.repairFinish")
  52. public class RepairFinishCmd extends Cmd {
  53. @Autowired
  54. private IRepairUserInnerServiceSMO repairUserInnerServiceSMOImpl;
  55. @Autowired
  56. private IRepairInnerServiceSMO repairInnerServiceSMOImpl;
  57. @Autowired
  58. private IFeeConfigInnerServiceSMO feeConfigInnerServiceSMOImpl;
  59. @Autowired
  60. private IOwnerRoomRelInnerServiceSMO ownerRoomRelInnerServiceSMO;
  61. @Autowired
  62. private IOwnerInnerServiceSMO ownerInnerServiceSMO;
  63. @Autowired
  64. private IResourceStoreServiceSMO resourceStoreServiceSMO;
  65. @Autowired
  66. private IUserStorehouseInnerServiceSMO userStorehouseInnerServiceSMO;
  67. @Autowired
  68. private IUserStorehouseV1InnerServiceSMO userStorehouseV1InnerServiceSMOImpl;
  69. @Autowired
  70. private IResourceStoreUseRecordV1InnerServiceSMO resourceStoreUseRecordV1InnerServiceSMOImpl;
  71. @Autowired
  72. private IRepairUserV1InnerServiceSMO repairUserV1InnerServiceSMOImpl;
  73. @Autowired
  74. private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl;
  75. @Autowired
  76. private IRepairPoolV1InnerServiceSMO repairPoolV1InnerServiceSMOImpl;
  77. @Autowired
  78. private IPayFeeV1InnerServiceSMO payFeeV1InnerServiceSMOImpl;
  79. @Autowired
  80. private IFeeAttrInnerServiceSMO feeAttrInnerServiceSMOImpl;
  81. @Autowired
  82. private IFileInnerServiceSMO fileInnerServiceSMOImpl;
  83. @Override
  84. public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
  85. Assert.hasKeyAndValue(reqJson, "repairId", "未包含报修单信息");
  86. Assert.hasKeyAndValue(reqJson, "context", "未包含派单内容");
  87. Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区信息");
  88. // Assert.hasKeyAndValue(reqJson, "amount", "未包含金额");
  89. Assert.hasKeyAndValue(reqJson, "feeFlag", "未包含费用标识");
  90. }
  91. @Override
  92. @Java110Transactional
  93. public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
  94. String userId = context.getReqHeaders().get("user-id");
  95. String userName = context.getReqHeaders().get("user-name");
  96. String publicArea = reqJson.getString("publicArea");
  97. int flag = 0;
  98. //获取报修渠道
  99. String repairChannel = reqJson.getString("repairChannel");
  100. //获取维修类型
  101. String maintenanceType = reqJson.getString("maintenanceType");
  102. //获取商品集合
  103. String choosedGoodsList = reqJson.getString("choosedGoodsList");
  104. //判断当前用户是否有需要处理的订单
  105. RepairUserDto repairUserDto = new RepairUserDto();
  106. repairUserDto.setRepairId(reqJson.getString("repairId"));
  107. repairUserDto.setCommunityId(reqJson.getString("communityId"));
  108. repairUserDto.setState(RepairUserDto.STATE_DOING);
  109. repairUserDto.setStaffId(userId);
  110. List<RepairUserDto> repairUserDtos = repairUserInnerServiceSMOImpl.queryRepairUsers(repairUserDto);
  111. if (repairUserDtos == null || repairUserDtos.size() != 1) {
  112. ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "当前用户没有需要处理订单!");
  113. context.setResponseEntity(responseEntity);
  114. return;
  115. }
  116. JSONArray json = JSONArray.parseArray(choosedGoodsList);
  117. //用料
  118. String repairMaterial = "";
  119. //费用明细(单价 * 数量 = 总价)
  120. String repairFee = "";
  121. if (!ListUtil.isNull(json) && ("1001".equals(maintenanceType) || "1003".equals(maintenanceType))) {
  122. Object[] objects = json.toArray();
  123. //数据前期校验
  124. for (int i = 0; i < objects.length; i++) {
  125. Object object = objects[i];
  126. JSONObject paramIn = JSONObject.parseObject(String.valueOf(object));
  127. String isCustom = paramIn.getString("isCustom");//是否自定义
  128. String resId = paramIn.getString("resId");//获取商品资源id
  129. String useNumber = paramIn.getString("useNumber");//获取商品数量
  130. String outLowPrice = "0";//最低价
  131. String outHighPrice = "0"; //最高价
  132. List<ResourceStorePo> resourceStorePoList = new ArrayList<>();
  133. List<UserStorehouseDto> userStorehouseDtoList = new ArrayList<>();
  134. if (!StringUtil.isEmpty(resId)) {
  135. //查询库存并校验库存
  136. ResourceStorePo resourceStorePo = new ResourceStorePo();
  137. resourceStorePo.setResId(resId);
  138. resourceStorePoList = resourceStoreServiceSMO.getResourceStores(resourceStorePo);//查询物品资源信息
  139. Assert.listOnlyOne(resourceStorePoList, "查询不到物品信息或查询到多个物品信息!");
  140. outLowPrice = resourceStorePoList.get(0).getOutLowPrice(); //最低价
  141. outHighPrice = resourceStorePoList.get(0).getOutHighPrice();//最高价
  142. }
  143. if (!StringUtil.isEmpty(useNumber) && !"0".equals(useNumber)
  144. && (!StringUtil.isEmpty(isCustom) && isCustom.equals("false"))) {
  145. String nowStock = "0";
  146. //(从我的物料中获取商品库存)
  147. UserStorehouseDto userStorehouseDto = new UserStorehouseDto();
  148. userStorehouseDto.setResId(resId);
  149. userStorehouseDto.setUserId(userId);
  150. //查询个人物品信息
  151. userStorehouseDtoList = userStorehouseInnerServiceSMO.queryUserStorehouses(userStorehouseDto);
  152. if (userStorehouseDtoList == null || userStorehouseDtoList.size() < 1) {
  153. ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "维修物料" + userStorehouseDtoList.get(0).getResName() + "库存不足,请您先申领物品!");
  154. context.setResponseEntity(responseEntity);
  155. return;
  156. }
  157. if (userStorehouseDtoList.size() == 1) {
  158. //获取最小计量总数
  159. nowStock = userStorehouseDtoList.get(0).getMiniStock();
  160. }
  161. if (Double.parseDouble(nowStock) < Double.parseDouble(useNumber)) {
  162. ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "维修物料" + userStorehouseDtoList.get(0).getResName() + "库存不足,请您先申领物品!");
  163. context.setResponseEntity(responseEntity);
  164. return;
  165. }
  166. }
  167. if (maintenanceType.equals("1001") && (!StringUtil.isEmpty(isCustom) && isCustom.equals("false"))) {
  168. Double price = Double.parseDouble(paramIn.getString("price")); //获取价格
  169. Double outLowPrices = Double.parseDouble(outLowPrice);//最低价
  170. Double outHighPrices = Double.parseDouble(outHighPrice);//最高价
  171. //物品价格应该在最低价和最高价之间
  172. if (price < outLowPrices || price > outHighPrices) {
  173. ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "输入的维修物料" + userStorehouseDtoList.get(0).getResName() + "单价不正确,请重新输入!");
  174. context.setResponseEntity(responseEntity);
  175. return;
  176. }
  177. }
  178. }
  179. //数据操作入库以及更新数据库
  180. for (int i = 0; i < objects.length; i++) {
  181. Object object = objects[i];
  182. JSONObject paramIn = JSONObject.parseObject(String.valueOf(object));
  183. String isCustom = paramIn.getString("isCustom");//是否自定义
  184. //获取商品资源id
  185. String resId = paramIn.getString("resId");
  186. //获取商品数量
  187. String useNumber = paramIn.getString("useNumber");
  188. //总价
  189. String totalPrice = "";
  190. //用料
  191. String repairMaterials = "";
  192. //单价
  193. Double unitPrice = 0.0;
  194. //数量
  195. Double useNumber_s = 0.0;
  196. //费用明细
  197. String repair = "";
  198. DecimalFormat df = new DecimalFormat("0.00");
  199. List<ResourceStorePo> resourceStorePoList = new ArrayList<>();
  200. List<UserStorehouseDto> userStorehouseDtoList = new ArrayList<>();
  201. if (!StringUtil.isEmpty(paramIn.getString("price")) && !StringUtil.isEmpty(useNumber)) {
  202. //支付费用 数量乘以单价
  203. unitPrice = Double.parseDouble(paramIn.getString("price"));
  204. //物品数量
  205. useNumber_s = Double.parseDouble(useNumber);
  206. //计算金额
  207. totalPrice = df.format(unitPrice * useNumber_s);
  208. //费用明细
  209. repair = df.format(unitPrice) + " * " + useNumber_s + " = " + totalPrice;
  210. }
  211. if (!StringUtil.isEmpty(resId)) {
  212. ResourceStorePo resourceStorePo = new ResourceStorePo();
  213. resourceStorePo.setResId(resId);
  214. //查询物品资源信息
  215. resourceStorePoList = resourceStoreServiceSMO.getResourceStores(resourceStorePo);
  216. Assert.listOnlyOne(resourceStorePoList, "查询不到物品信息或查询到多个物品信息!");
  217. //用料
  218. repairMaterials = resourceStorePoList.get(0).getResName() + "*" + useNumber;
  219. } else {
  220. //用料
  221. repairMaterials = paramIn.getString("customGoodsName") + "*" + useNumber;
  222. }
  223. if (!StringUtil.isEmpty(useNumber) && !"0".equals(useNumber)
  224. && (!StringUtil.isEmpty(isCustom) && isCustom.equals("false"))) {
  225. String nowStock = "0";
  226. //(从我的物料中获取商品库存)
  227. UserStorehouseDto userStorehouseDto = new UserStorehouseDto();
  228. userStorehouseDto.setResId(resId);
  229. userStorehouseDto.setUserId(userId);
  230. //查询个人物品信息
  231. userStorehouseDtoList = userStorehouseInnerServiceSMO.queryUserStorehouses(userStorehouseDto);
  232. Assert.listOnlyOne(userStorehouseDtoList, "查询不到个人物品信息或查询到多条信息!");
  233. if (userStorehouseDtoList.size() == 1) {
  234. //最小计量总数
  235. nowStock = userStorehouseDtoList.get(0).getMiniStock();
  236. }
  237. //库存减少
  238. UserStorehousePo userStorehousePo = new UserStorehousePo();
  239. //计算个人物品剩余最小计量总数
  240. BigDecimal num1 = new BigDecimal(Double.parseDouble(nowStock));
  241. BigDecimal num2 = new BigDecimal(Double.parseDouble(useNumber));
  242. BigDecimal surplusStock = num1.subtract(num2);
  243. //最小计量单位数量
  244. double miniUnitStock = Double.parseDouble(userStorehouseDtoList.get(0).getMiniUnitStock());
  245. //获取物品单位
  246. if (StringUtil.isEmpty(userStorehouseDtoList.get(0).getUnitCode())) {
  247. throw new IllegalArgumentException("物品单位不能为空!");
  248. }
  249. String unitCode = userStorehouseDtoList.get(0).getUnitCode();
  250. //获取物品最小计量单位
  251. if (StringUtil.isEmpty(userStorehouseDtoList.get(0).getMiniUnitCode())) {
  252. throw new IllegalArgumentException("物品最小计量单位不能为空!");
  253. }
  254. String miniUnitCode = userStorehouseDtoList.get(0).getMiniUnitCode();
  255. if (unitCode.equals(miniUnitCode)) { //如果最小计量单位与物品单位相同,就不向上取整
  256. BigDecimal num3 = new BigDecimal(miniUnitStock);
  257. double newStock = surplusStock.divide(num3, 2, BigDecimal.ROUND_HALF_UP).doubleValue();
  258. int remainingInventory = new Double(newStock).intValue();
  259. userStorehousePo.setStock(String.valueOf(remainingInventory));
  260. } else { //如果不相同就向上取整
  261. BigDecimal num3 = new BigDecimal(miniUnitStock);
  262. double newStock = surplusStock.divide(num3, 2, BigDecimal.ROUND_HALF_UP).doubleValue();
  263. double ceil = Math.ceil(newStock);
  264. int remainingInventory = new Double(ceil).intValue();
  265. userStorehousePo.setStock(String.valueOf(remainingInventory));
  266. }
  267. if (useNumber.contains(".") || nowStock.contains(".")) { //如果传过来的使用数量为小数,或原有库存数量有小数,就保留小数
  268. userStorehousePo.setMiniStock(String.valueOf(surplusStock.doubleValue()));
  269. } else { //如果传来的使用数量为整数,且原有库存数量为整数,就取整
  270. userStorehousePo.setMiniStock(String.valueOf(surplusStock.intValue()));
  271. }
  272. userStorehousePo.setUsId(userStorehouseDtoList.get(0).getUsId());
  273. userStorehousePo.setResId(resId);
  274. userStorehousePo.setUserId(userId);
  275. //更新库存
  276. flag = userStorehouseV1InnerServiceSMOImpl.updateUserStorehouse(userStorehousePo);
  277. if (flag < 1) {
  278. throw new CmdException("修改工单失败");
  279. }
  280. }
  281. //往物品使用记录表插入数据
  282. ResourceStoreUseRecordPo resourceStoreUseRecordPo = new ResourceStoreUseRecordPo();
  283. resourceStoreUseRecordPo.setRsurId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_rsurId));
  284. resourceStoreUseRecordPo.setRepairId(reqJson.getString("repairId"));
  285. resourceStoreUseRecordPo.setResourceStoreName(paramIn.getString("resName"));
  286. if (!StringUtil.isEmpty(isCustom) && isCustom.equals("true")) {
  287. resId = "666666";
  288. resourceStoreUseRecordPo.setResourceStoreName(paramIn.getString("customGoodsName"));
  289. }
  290. resourceStoreUseRecordPo.setResId(resId);
  291. resourceStoreUseRecordPo.setCommunityId(reqJson.getString("communityId"));
  292. resourceStoreUseRecordPo.setStoreId(reqJson.getString("storeId"));
  293. resourceStoreUseRecordPo.setCreateUserId(reqJson.getString("userId"));
  294. resourceStoreUseRecordPo.setCreateUserName(reqJson.getString("userName"));
  295. resourceStoreUseRecordPo.setRemark(reqJson.getString("context"));
  296. resourceStoreUseRecordPo.setQuantity(useNumber);
  297. resourceStoreUseRecordPo.setState("2002"); //1001 报废回收 2002 工单损耗 3003 公用损耗
  298. //有偿服务
  299. if (maintenanceType.equals("1001")) {
  300. resourceStoreUseRecordPo.setUnitPrice(paramIn.getString("price"));
  301. flag = resourceStoreUseRecordV1InnerServiceSMOImpl.saveResourceStoreUseRecord(resourceStoreUseRecordPo);
  302. if (flag < 1) {
  303. throw new CmdException("添加失败");
  304. }
  305. } else if (maintenanceType.equals("1003")) { //需要用料
  306. flag = resourceStoreUseRecordV1InnerServiceSMOImpl.saveResourceStoreUseRecord(resourceStoreUseRecordPo);
  307. if (flag < 1) {
  308. throw new CmdException("添加失败");
  309. }
  310. }
  311. if (!StringUtil.isEmpty(repairMaterials)) {
  312. repairMaterial += repairMaterials + ";";
  313. }
  314. if (!StringUtil.isEmpty(repair)) {
  315. repairFee += repair + ";";
  316. }
  317. }
  318. }
  319. // 1.0 关闭自己订单
  320. RepairUserPo repairUserPo = new RepairUserPo();
  321. repairUserPo.setRuId(repairUserDtos.get(0).getRuId());
  322. repairUserPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
  323. repairUserPo.setState(RepairUserDto.STATE_CLOSE);
  324. repairUserPo.setContext(reqJson.getString("context"));
  325. repairUserPo.setCommunityId(reqJson.getString("communityId"));
  326. flag = repairUserV1InnerServiceSMOImpl.updateRepairUserNew(repairUserPo);
  327. if (flag < 1) {
  328. throw new CmdException("修改用户失败");
  329. }
  330. if ((!StringUtil.isEmpty(repairChannel) && "Z".equals(repairChannel))
  331. || (!StringUtil.isEmpty(maintenanceType) && "1001".equals(maintenanceType))) { //如果是业主报修或者是有偿的就生成一条新状态,否则不变
  332. //2.0 给开始节点派支付单
  333. repairUserDto = new RepairUserDto();
  334. repairUserDto.setRepairId(reqJson.getString("repairId"));
  335. repairUserDto.setCommunityId(reqJson.getString("communityId"));
  336. repairUserDto.setRepairEvent(RepairUserDto.REPAIR_EVENT_START_USER);
  337. List<RepairUserDto> startRepairUserDtos = repairUserInnerServiceSMOImpl.queryRepairUsers(repairUserDto);
  338. if (startRepairUserDtos.size() != 1) {
  339. ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "数据错误 该订单没有发起人!");
  340. context.setResponseEntity(responseEntity);
  341. return;
  342. }
  343. repairUserPo = new RepairUserPo();
  344. repairUserPo.setRuId(GenerateCodeFactory.getGeneratorId("83"));
  345. repairUserPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
  346. if ("1001".equals(maintenanceType)) { //如果是有偿的就走下面(业主报修有偿或者电话申请有偿或者员工报修有偿)
  347. repairUserPo.setState(RepairUserDto.STATE_PAY_FEE);
  348. repairUserPo.setContext("待支付" + reqJson.getString("totalPrice") + "元");
  349. } else {
  350. repairUserPo.setState(RepairUserDto.STATE_EVALUATE);
  351. repairUserPo.setContext("待评价");
  352. }
  353. repairUserPo.setRepairId(reqJson.getString("repairId"));
  354. if ("Z".equals(repairChannel)) { //如果是业主端报修的走下面的方法
  355. repairUserPo.setStaffId(startRepairUserDtos.get(0).getStaffId());
  356. repairUserPo.setStaffName(startRepairUserDtos.get(0).getStaffName());
  357. } else { //如果不是业主报修,并且有偿
  358. RepairDto repairDto = new RepairDto();
  359. repairDto.setRepairId(reqJson.getString("repairId"));
  360. List<RepairDto> repairDtos = repairInnerServiceSMOImpl.queryRepairs(repairDto);
  361. if (repairDtos.size() != 1) {
  362. ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "数据错误,该用户没有报修单!");
  363. context.setResponseEntity(responseEntity);
  364. return;
  365. }
  366. //此时的报修对象ID即房屋ID
  367. String roomId = repairDtos.get(0).getRepairObjId();
  368. OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto();
  369. ownerRoomRelDto.setRoomId(roomId);
  370. //查询房屋业主关系表
  371. List<OwnerRoomRelDto> ownerRoomRelDtos = ownerRoomRelInnerServiceSMO.queryOwnerRoomRels(ownerRoomRelDto);
  372. if (ownerRoomRelDtos.size() != 1) {
  373. ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "信息错误,未找到房屋的业主!");
  374. context.setResponseEntity(responseEntity);
  375. return;
  376. }
  377. //获取业主id
  378. String ownerId = ownerRoomRelDtos.get(0).getOwnerId();
  379. OwnerDto ownerDto = new OwnerDto();
  380. ownerDto.setOwnerId(ownerId);
  381. //根据业主id查询业主信息
  382. List<OwnerDto> ownerDtos = ownerInnerServiceSMO.queryOwners(ownerDto);
  383. if (ownerDtos.size() != 1) {
  384. ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "未查询到业主信息!");
  385. context.setResponseEntity(responseEntity);
  386. return;
  387. }
  388. //获取业主姓名
  389. String ownerName = ownerDtos.get(0).getName();
  390. repairUserPo.setStaffId(ownerId);
  391. repairUserPo.setStaffName(ownerName);
  392. }
  393. repairUserPo.setPreStaffId(repairUserDtos.get(0).getStaffId());
  394. repairUserPo.setPreStaffName(repairUserDtos.get(0).getStaffName());
  395. repairUserPo.setPreRuId(repairUserDtos.get(0).getRuId());
  396. repairUserPo.setRepairEvent(RepairUserDto.REPAIR_EVENT_PAY_USER);
  397. repairUserPo.setCommunityId(reqJson.getString("communityId"));
  398. flag = repairUserV1InnerServiceSMOImpl.saveRepairUserNew(repairUserPo);
  399. if (flag < 1) {
  400. throw new CmdException("修改用户失败");
  401. }
  402. }
  403. //维修前图片处理
  404. if (reqJson.containsKey("beforeRepairPhotos") && !StringUtils.isEmpty(reqJson.getString("beforeRepairPhotos"))) {
  405. JSONArray beforeRepairPhotos = reqJson.getJSONArray("beforeRepairPhotos");
  406. for (int _photoIndex = 0; _photoIndex < beforeRepairPhotos.size(); _photoIndex++) {
  407. String photo = beforeRepairPhotos.getJSONObject(_photoIndex).getString("photo");
  408. if (photo.length() > 512) {
  409. FileDto fileDto = new FileDto();
  410. fileDto.setFileId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_file_id));
  411. fileDto.setFileName(fileDto.getFileId());
  412. fileDto.setContext(photo);
  413. fileDto.setSuffix("jpeg");
  414. fileDto.setCommunityId(reqJson.getString("communityId"));
  415. photo = fileInnerServiceSMOImpl.saveFile(fileDto);
  416. }
  417. JSONObject businessUnit = new JSONObject();
  418. businessUnit.put("fileRelId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_fileRelId));
  419. businessUnit.put("relTypeCd", FileRelDto.BEFORE_REPAIR_PHOTOS);
  420. businessUnit.put("saveWay", "ftp");
  421. businessUnit.put("objId", reqJson.getString("repairId"));
  422. businessUnit.put("fileRealName", photo);
  423. businessUnit.put("fileSaveName", photo);
  424. FileRelPo fileRelPo = BeanConvertUtil.covertBean(businessUnit, FileRelPo.class);
  425. flag = fileRelInnerServiceSMOImpl.saveFileRel(fileRelPo);
  426. if (flag < 1) {
  427. throw new CmdException("保存图片失败");
  428. }
  429. }
  430. }
  431. //维修后图片处理
  432. if (reqJson.containsKey("afterRepairPhotos") && !StringUtils.isEmpty(reqJson.getString("afterRepairPhotos"))) {
  433. JSONArray afterRepairPhotos = reqJson.getJSONArray("afterRepairPhotos");
  434. for (int _photoIndex = 0; _photoIndex < afterRepairPhotos.size(); _photoIndex++) {
  435. String photo = afterRepairPhotos.getJSONObject(_photoIndex).getString("photo");
  436. if (photo.length() > 512) {
  437. FileDto fileDto = new FileDto();
  438. fileDto.setFileId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_file_id));
  439. fileDto.setFileName(fileDto.getFileId());
  440. fileDto.setContext(photo);
  441. fileDto.setSuffix("jpeg");
  442. fileDto.setCommunityId(reqJson.getString("communityId"));
  443. photo = fileInnerServiceSMOImpl.saveFile(fileDto);
  444. }
  445. JSONObject businessUnit = new JSONObject();
  446. businessUnit.put("fileRelId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_fileRelId));
  447. businessUnit.put("relTypeCd", FileRelDto.AFTER_REPAIR_PHOTOS);
  448. businessUnit.put("saveWay", "ftp");
  449. businessUnit.put("objId", reqJson.getString("repairId"));
  450. businessUnit.put("fileRealName", photo);
  451. businessUnit.put("fileSaveName", photo);
  452. FileRelPo fileRelPo = BeanConvertUtil.covertBean(businessUnit, FileRelPo.class);
  453. flag = fileRelInnerServiceSMOImpl.saveFileRel(fileRelPo);
  454. if (flag < 1) {
  455. throw new CmdException("保存图片失败");
  456. }
  457. }
  458. }
  459. if ("F".equals(publicArea) && "1002".equals(reqJson.getString("maintenanceType"))) { //如果不是公共区域且是无偿的走下面
  460. //改变r_repair_pool表maintenance_type维修类型
  461. RepairPoolPo repairPoolPo = new RepairPoolPo();
  462. repairPoolPo.setRepairId(reqJson.getString("repairId"));
  463. repairPoolPo.setMaintenanceType(reqJson.getString("maintenanceType"));
  464. flag = repairPoolV1InnerServiceSMOImpl.updateRepairPoolNew(repairPoolPo);
  465. if (flag < 1) {
  466. throw new CmdException("修改失败");
  467. }
  468. if ("Z".equals(repairChannel)) { //如果是电话报修和员工代客报修结单后状态变为待回访
  469. modifyBusinessRepairDispatch(reqJson, RepairDto.STATE_APPRAISE);
  470. } else { //如果是业主自主报修结单后状态变为待评价
  471. modifyBusinessRepairDispatch(reqJson, RepairDto.STATE_RETURN_VISIT);
  472. }
  473. } else if ("F".equals(publicArea) && "1001".equals(reqJson.getString("maintenanceType"))) { //如果不是公共区域且是有偿的走下面
  474. //3.0 生成支付费用
  475. //查询默认费用项
  476. FeeConfigDto feeConfigDto = new FeeConfigDto();
  477. feeConfigDto.setCommunityId(reqJson.getString("communityId"));
  478. feeConfigDto.setFeeTypeCd(FeeTypeConstant.FEE_TYPE_REPAIR);
  479. feeConfigDto.setIsDefault(FeeConfigDto.DEFAULT_FEE_CONFIG);
  480. List<FeeConfigDto> feeConfigDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto);
  481. if (feeConfigDtos.size() != 1) {
  482. ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "默认维修费用有多条或不存在!");
  483. context.setResponseEntity(responseEntity);
  484. return;
  485. }
  486. PayFeePo feePo = new PayFeePo();
  487. feePo.setAmount(String.valueOf(reqJson.getString("")));
  488. feePo.setCommunityId(reqJson.getString("communityId"));
  489. feePo.setConfigId(feeConfigDtos.get(0).getConfigId());
  490. feePo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
  491. feePo.setFeeFlag(feeConfigDtos.get(0).getFeeFlag());
  492. feePo.setFeeId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId));
  493. feePo.setFeeTypeCd(FeeTypeConstant.FEE_TYPE_REPAIR);
  494. feePo.setIncomeObjId(reqJson.getString("storeId"));
  495. feePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM);
  496. feePo.setAmount(reqJson.getString("totalPrice"));
  497. feePo.setBatchId("-1");
  498. RepairDto repairDto = new RepairDto();
  499. repairDto.setCommunityId(reqJson.getString("communityId"));
  500. repairDto.setRepairId(reqJson.getString("repairId"));
  501. List<RepairDto> repairDtos = repairInnerServiceSMOImpl.queryRepairs(repairDto);
  502. if (repairDtos.size() != 1) {
  503. ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "维修单有多条或不存在!");
  504. context.setResponseEntity(responseEntity);
  505. return;
  506. }
  507. feePo.setPayerObjId(repairDtos.get(0).getRepairObjId());
  508. feePo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
  509. feePo.setState(FeeDto.STATE_DOING);
  510. feePo.setUserId(userId);
  511. feePo.setbId("-1");
  512. flag = payFeeV1InnerServiceSMOImpl.savePayFee(feePo);
  513. if (flag < 1) {
  514. throw new CmdException("添加费用失败");
  515. }
  516. FeeAttrPo feeAttrPo = new FeeAttrPo();
  517. feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
  518. feeAttrPo.setFeeId(feePo.getFeeId());
  519. feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_REPAIR);
  520. feeAttrPo.setCommunityId(reqJson.getString("communityId"));
  521. feeAttrPo.setValue(reqJson.getString("repairId"));
  522. flag = feeAttrInnerServiceSMOImpl.saveFeeAttr(feeAttrPo);
  523. if (flag < 1) {
  524. throw new CmdException("添加费用失败");
  525. }
  526. //改变r_repair_pool表maintenance_type维修类型
  527. RepairPoolPo repairPoolPo = new RepairPoolPo();
  528. repairPoolPo.setRepairId(reqJson.getString("repairId"));
  529. //维修类型
  530. repairPoolPo.setMaintenanceType(reqJson.getString("maintenanceType"));
  531. //用料
  532. repairPoolPo.setRepairMaterials(repairMaterial.substring(0, repairMaterial.length() - 1));
  533. //费用明细
  534. repairPoolPo.setRepairFee(repairFee.substring(0, repairFee.length() - 1));
  535. //支付方式
  536. repairPoolPo.setPayType(reqJson.getString("payType"));
  537. flag = repairPoolV1InnerServiceSMOImpl.updateRepairPoolNew(repairPoolPo);
  538. if (flag < 1) {
  539. throw new CmdException("修改失败");
  540. }
  541. modifyBusinessRepairDispatch(reqJson, RepairDto.STATE_PAY);
  542. } else if ("T".equals(publicArea)) { //公共区域走这里
  543. //公共区域用料时修改维修类型和用料
  544. if ("1003".equals(maintenanceType)) {
  545. //改变r_repair_pool表maintenance_type维修类型
  546. RepairPoolPo repairPoolPo = new RepairPoolPo();
  547. repairPoolPo.setRepairId(reqJson.getString("repairId"));
  548. //维修类型
  549. repairPoolPo.setMaintenanceType(reqJson.getString("maintenanceType"));
  550. //用料
  551. repairPoolPo.setRepairMaterials(repairMaterial.substring(0, repairMaterial.length() - 1));
  552. flag = repairPoolV1InnerServiceSMOImpl.updateRepairPoolNew(repairPoolPo);
  553. if (flag < 1) {
  554. throw new CmdException("修改失败");
  555. }
  556. }
  557. if ("Z".equals(repairChannel)) { //如果是电话报修和员工代客报修结单后状态变为待回访
  558. modifyBusinessRepairDispatch(reqJson, RepairDto.STATE_APPRAISE);
  559. } else { //如果是业主自主报修结单后状态变为待评价
  560. modifyBusinessRepairDispatch(reqJson, RepairDto.STATE_RETURN_VISIT);
  561. }
  562. }
  563. ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_OK, ResultVo.MSG_OK);
  564. context.setResponseEntity(responseEntity);
  565. }
  566. public void modifyBusinessRepairDispatch(JSONObject paramInJson, String state) {
  567. //查询报修单
  568. RepairDto repairDto = new RepairDto();
  569. repairDto.setRepairId(paramInJson.getString("repairId"));
  570. List<RepairDto> repairDtos = repairInnerServiceSMOImpl.queryRepairs(repairDto);
  571. Assert.isOne(repairDtos, "查询到多条数据,repairId=" + repairDto.getRepairId());
  572. JSONObject businessOwnerRepair = new JSONObject();
  573. businessOwnerRepair.putAll(BeanConvertUtil.beanCovertMap(repairDtos.get(0)));
  574. businessOwnerRepair.put("state", state);
  575. //计算 应收金额
  576. RepairPoolPo repairPoolPo = BeanConvertUtil.covertBean(businessOwnerRepair, RepairPoolPo.class);
  577. int flag = repairPoolV1InnerServiceSMOImpl.updateRepairPoolNew(repairPoolPo);
  578. if (flag < 1) {
  579. throw new CmdException("修改工单失败");
  580. }
  581. }
  582. }