SaveHandoverCmd.java 12 KB

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