RepairFinishCmd.java 35 KB

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