SaveHandoverCmd.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. package com.java110.user.cmd.owner;
  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.AbstractServiceCmdListener;
  8. import com.java110.core.event.cmd.CmdEvent;
  9. import com.java110.core.factory.GenerateCodeFactory;
  10. import com.java110.dto.RoomDto;
  11. import com.java110.dto.fee.FeeAttrDto;
  12. import com.java110.dto.fee.FeeConfigDto;
  13. import com.java110.dto.fee.FeeDto;
  14. import com.java110.dto.owner.OwnerDto;
  15. import com.java110.dto.owner.OwnerRoomRelDto;
  16. import com.java110.dto.payFeeBatch.PayFeeBatchDto;
  17. import com.java110.dto.user.UserDto;
  18. import com.java110.intf.community.IOwnerRoomRelV1InnerServiceSMO;
  19. import com.java110.intf.community.IOwnerV1InnerServiceSMO;
  20. import com.java110.intf.community.IRoomInnerServiceSMO;
  21. import com.java110.intf.fee.*;
  22. import com.java110.intf.user.IUserInnerServiceSMO;
  23. import com.java110.po.fee.FeeAttrPo;
  24. import com.java110.po.fee.PayFeePo;
  25. import com.java110.po.owner.OwnerPo;
  26. import com.java110.po.owner.OwnerRoomRelPo;
  27. import com.java110.po.payFeeBatch.PayFeeBatchPo;
  28. import com.java110.utils.constant.CommonConstant;
  29. import com.java110.utils.exception.CmdException;
  30. import com.java110.utils.util.Assert;
  31. import com.java110.utils.util.BeanConvertUtil;
  32. import com.java110.utils.util.DateUtil;
  33. import com.java110.utils.util.StringUtil;
  34. import com.java110.vo.ResultVo;
  35. import org.springframework.beans.factory.annotation.Autowired;
  36. import java.util.ArrayList;
  37. import java.util.List;
  38. @Java110Cmd(serviceCode = "owner.saveHandover")
  39. public class SaveHandoverCmd extends AbstractServiceCmdListener {
  40. @Autowired
  41. private IOwnerV1InnerServiceSMO ownerV1InnerServiceSMOImpl;
  42. @Autowired
  43. private IOwnerRoomRelV1InnerServiceSMO ownerRoomRelV1InnerServiceSMOImpl;
  44. @Autowired
  45. private IFeeConfigInnerServiceSMO feeConfigInnerServiceSMOImpl;
  46. @Autowired
  47. private IUserInnerServiceSMO userInnerServiceSMOImpl;
  48. @Autowired
  49. private IPayFeeBatchV1InnerServiceSMO payFeeBatchV1InnerServiceSMOImpl;
  50. @Autowired
  51. private IPayFeeV1InnerServiceSMO payFeeV1InnerServiceSMOImpl;
  52. @Autowired
  53. private IFeeAttrInnerServiceSMO feeAttrInnerServiceSMOImpl;
  54. @Autowired
  55. private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
  56. @Override
  57. public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
  58. Assert.jsonObjectHaveKey(reqJson, "name", "请求报文中未包含name");
  59. Assert.jsonObjectHaveKey(reqJson, "userId", "请求报文中未包含userId");
  60. Assert.jsonObjectHaveKey(reqJson, "age", "请求报文中未包含age");
  61. Assert.jsonObjectHaveKey(reqJson, "link", "请求报文中未包含link");
  62. Assert.jsonObjectHaveKey(reqJson, "sex", "请求报文中未包含sex");
  63. Assert.jsonObjectHaveKey(reqJson, "communityId", "请求报文中未包含communityId");
  64. if (!reqJson.containsKey("rooms")) {
  65. throw new CmdException("未包含房屋信息");
  66. }
  67. JSONArray rooms = reqJson.getJSONArray("rooms");
  68. if (rooms.size() < 1) {
  69. throw new CmdException("未包含房屋信息");
  70. }
  71. }
  72. @Override
  73. @Java110Transactional
  74. public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
  75. OwnerPo ownerPo = BeanConvertUtil.covertBean(reqJson, OwnerPo.class);
  76. int flag = 0;
  77. if (reqJson.containsKey("ownerId") && !StringUtil.isEmpty(reqJson.getString("ownerId"))) {
  78. ownerPo.setMemberId(ownerPo.getOwnerId());
  79. flag = ownerV1InnerServiceSMOImpl.updateOwner(ownerPo);
  80. } else {
  81. ownerPo.setOwnerTypeCd(OwnerDto.OWNER_TYPE_CD_OWNER);
  82. ownerPo.setOwnerId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_ownerId));
  83. ownerPo.setMemberId(ownerPo.getOwnerId());
  84. ownerPo.setState(OwnerDto.STATE_FINISH);
  85. ownerPo.setOwnerFlag(OwnerDto.OWNER_FLAG_TRUE);
  86. flag = ownerV1InnerServiceSMOImpl.saveOwner(ownerPo);
  87. reqJson.put("ownerId", ownerPo.getOwnerId());
  88. }
  89. if (flag < 1) {
  90. throw new CmdException("操作业主失败");
  91. }
  92. JSONArray rooms = reqJson.getJSONArray("rooms");
  93. OwnerRoomRelPo ownerRoomRelPo = null;
  94. for (int roomIndex = 0; roomIndex < rooms.size(); roomIndex++) {
  95. ownerRoomRelPo = new OwnerRoomRelPo();
  96. ownerRoomRelPo.setbId("-1");
  97. ownerRoomRelPo.setEndTime(DateUtil.getLastTime());
  98. ownerRoomRelPo.setOwnerId(reqJson.getString("ownerId"));
  99. ownerRoomRelPo.setOperate("ADD");
  100. ownerRoomRelPo.setRelId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_relId));
  101. ownerRoomRelPo.setRoomId(rooms.getJSONObject(roomIndex).getString("roomId"));
  102. ownerRoomRelPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
  103. ownerRoomRelPo.setState("2001");
  104. ownerRoomRelPo.setUserId("-1");
  105. flag = ownerRoomRelV1InnerServiceSMOImpl.saveOwnerRoomRel(ownerRoomRelPo);
  106. if (flag < 1) {
  107. throw new CmdException("操作业主失败");
  108. }
  109. }
  110. if (!reqJson.containsKey("fees")) {
  111. cmdDataFlowContext.setResponseEntity(ResultVo.success());
  112. return;
  113. }
  114. JSONArray fees = reqJson.getJSONArray("fees");
  115. if (fees.size() < 1) {
  116. cmdDataFlowContext.setResponseEntity(ResultVo.success());
  117. return;
  118. }
  119. generatorBatch(reqJson);
  120. JSONObject paramInJson = null;
  121. PayFeePo payFeePo = null;
  122. FeeAttrPo feeAttrPo = null;
  123. List<RoomDto> roomDtos = null;
  124. RoomDto roomDto = null;
  125. for (int roomIndex = 0; roomIndex < rooms.size(); roomIndex++) {
  126. roomDto = new RoomDto();
  127. roomDto.setRoomId(rooms.getJSONObject(roomIndex).getString("roomId"));
  128. roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
  129. Assert.listOnlyOne(roomDtos,"房屋不存在");
  130. for (int feeIndex = 0; feeIndex < fees.size(); feeIndex++) {
  131. paramInJson = fees.getJSONObject(feeIndex);
  132. String time = DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A);
  133. if (paramInJson.containsKey("startTime")) {
  134. time = paramInJson.getString("startTime");
  135. }
  136. //查询费用项
  137. FeeConfigDto feeConfigDto = new FeeConfigDto();
  138. feeConfigDto.setConfigId(fees.getJSONObject(feeIndex).getString("configId"));
  139. List<FeeConfigDto> feeConfigDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto);
  140. Assert.listOnlyOne(feeConfigDtos, "查询费用项错误!");
  141. JSONObject businessUnit = new JSONObject();
  142. businessUnit.put("feeId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId));
  143. businessUnit.put("configId", fees.getJSONObject(feeIndex).getString("configId"));
  144. businessUnit.put("feeTypeCd", feeConfigDtos.get(0).getFeeTypeCd());
  145. businessUnit.put("incomeObjId", reqJson.getString("storeId"));
  146. businessUnit.put("amount", "-1.00");
  147. if (paramInJson.containsKey("amount") && !StringUtil.isEmpty(paramInJson.getString("amount"))) {
  148. businessUnit.put("amount", paramInJson.getString("amount"));
  149. }
  150. businessUnit.put("startTime", time);
  151. businessUnit.put("endTime", time);
  152. businessUnit.put("communityId", reqJson.getString("communityId"));
  153. businessUnit.put("payerObjId", rooms.getJSONObject(roomIndex).getString("roomId"));
  154. businessUnit.put("payerObjType", "3333");
  155. businessUnit.put("feeFlag", feeConfigDtos.get(0).getFeeFlag());
  156. businessUnit.put("state", "2008001");
  157. businessUnit.put("batchId", reqJson.getString("batchId"));
  158. businessUnit.put("userId", "-1");
  159. businessUnit.put("bId","-1");
  160. payFeePo = BeanConvertUtil.covertBean(businessUnit, PayFeePo.class);
  161. flag = payFeeV1InnerServiceSMOImpl.savePayFee(payFeePo);
  162. if (flag < 1) {
  163. throw new CmdException("保存费用失败");
  164. }
  165. feeAttrPo = addFeeAttr(businessUnit, FeeAttrDto.SPEC_CD_OWNER_ID, reqJson.getString("ownerId"));
  166. flag = feeAttrInnerServiceSMOImpl.saveFeeAttr(feeAttrPo);
  167. if (flag < 1) {
  168. throw new CmdException("保存费用失败");
  169. }
  170. feeAttrPo = addFeeAttr(businessUnit, FeeAttrDto.SPEC_CD_OWNER_LINK, reqJson.getString("link"));
  171. flag = feeAttrInnerServiceSMOImpl.saveFeeAttr(feeAttrPo);
  172. if (flag < 1) {
  173. throw new CmdException("保存费用失败");
  174. }
  175. feeAttrPo = addFeeAttr(businessUnit, FeeAttrDto.SPEC_CD_OWNER_NAME, reqJson.getString("name"));
  176. flag = feeAttrInnerServiceSMOImpl.saveFeeAttr(feeAttrPo);
  177. if (flag < 1) {
  178. throw new CmdException("保存费用失败");
  179. }
  180. feeAttrPo = addFeeAttr(businessUnit, FeeAttrDto.SPEC_CD_PAY_OBJECT_NAME,
  181. roomDtos.get(roomIndex).getFloorNum() + "-" + roomDtos.get(roomIndex).getUnitNum() + "-" + roomDtos.get(roomIndex).getRoomNum());
  182. flag = feeAttrInnerServiceSMOImpl.saveFeeAttr(feeAttrPo);
  183. if (flag < 1) {
  184. throw new CmdException("保存费用失败");
  185. }
  186. if (FeeDto.FEE_FLAG_ONCE.equals(businessUnit.getString("feeFlag"))) {
  187. feeAttrPo = addFeeAttr(businessUnit, FeeAttrDto.SPEC_CD_ONCE_FEE_DEADLINE_TIME,
  188. paramInJson.containsKey("endTime") ? paramInJson.getString("endTime") : feeConfigDtos.get(0).getEndTime());
  189. flag = feeAttrInnerServiceSMOImpl.saveFeeAttr(feeAttrPo);
  190. if (flag < 1) {
  191. throw new CmdException("保存费用失败");
  192. }
  193. }
  194. }
  195. }
  196. }
  197. /**
  198. * 生成批次号
  199. *
  200. * @param reqJson
  201. */
  202. private void generatorBatch(JSONObject reqJson) {
  203. PayFeeBatchPo payFeeBatchPo = new PayFeeBatchPo();
  204. payFeeBatchPo.setBatchId(GenerateCodeFactory.getGeneratorId("12"));
  205. payFeeBatchPo.setCommunityId(reqJson.getString("communityId"));
  206. payFeeBatchPo.setCreateUserId(reqJson.getString("userId"));
  207. UserDto userDto = new UserDto();
  208. userDto.setUserId(reqJson.getString("userId"));
  209. List<UserDto> userDtos = userInnerServiceSMOImpl.getUsers(userDto);
  210. Assert.listOnlyOne(userDtos, "用户不存在");
  211. payFeeBatchPo.setCreateUserName(userDtos.get(0).getUserName());
  212. payFeeBatchPo.setState(PayFeeBatchDto.STATE_NORMAL);
  213. payFeeBatchPo.setMsg("正常");
  214. int flag = payFeeBatchV1InnerServiceSMOImpl.savePayFeeBatch(payFeeBatchPo);
  215. if (flag < 1) {
  216. throw new IllegalArgumentException("生成批次失败");
  217. }
  218. reqJson.put("batchId", payFeeBatchPo.getBatchId());
  219. }
  220. public FeeAttrPo addFeeAttr(JSONObject paramInJson, String specCd, String value) {
  221. FeeAttrPo feeAttrPo = new FeeAttrPo();
  222. feeAttrPo.setCommunityId(paramInJson.getString("communityId"));
  223. feeAttrPo.setSpecCd(specCd);
  224. feeAttrPo.setValue(value);
  225. feeAttrPo.setFeeId(paramInJson.getString("feeId"));
  226. feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
  227. return feeAttrPo;
  228. }
  229. }