MacTransferService.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. package com.dk.mdm.service.mac;
  2. import com.dk.common.exception.BaseBusinessException;
  3. import com.dk.common.infrastructure.annotaiton.Pagination;
  4. import com.dk.common.infrastructure.constant.Constant;
  5. import com.dk.common.infrastructure.enums.ErrorCodeEnum;
  6. import com.dk.common.model.pojo.PageList;
  7. import com.dk.common.response.ResponseCodeEnum;
  8. import com.dk.common.response.ResponseResultUtil;
  9. import com.dk.common.response.ResponseResultVO;
  10. import com.dk.mdm.infrastructure.convert.mac.MacTransferConvert;
  11. import com.dk.mdm.infrastructure.convert.mac.MacTransferItemConvert;
  12. import com.dk.mdm.mapper.mac.MacTransferItemMapper;
  13. import com.dk.mdm.mapper.mst.MoneyAccountItemMapper;
  14. import com.dk.mdm.mapper.mst.MoneyAccountMapper;
  15. import com.dk.mdm.model.pojo.mac.MacTransfer;
  16. import com.dk.mdm.mapper.mac.MacTransferMapper;
  17. import com.dk.common.service.BaseService;
  18. import com.dk.common.mapper.BaseMapper;
  19. import com.dk.mdm.model.pojo.mac.MacTransferItem;
  20. import com.dk.mdm.model.pojo.mst.MoneyAccount;
  21. import com.dk.mdm.model.pojo.mst.MoneyAccountItem;
  22. import com.dk.mdm.model.query.mac.*;
  23. import com.dk.mdm.model.response.mac.*;
  24. import com.dk.mdm.model.vo.mac.MacTransferVO;
  25. import com.dk.mdm.model.vo.mac.MacTransferItemVO;
  26. import com.dk.mdm.service.common.CommonService;
  27. import com.dk.mdm.service.mst.MoneyAccountService;
  28. import org.springframework.stereotype.Service;
  29. import org.springframework.beans.factory.annotation.Autowired;
  30. import org.springframework.transaction.annotation.Transactional;
  31. import java.util.ArrayList;
  32. import java.util.HashMap;
  33. import java.util.List;
  34. import java.util.Map;
  35. @Service
  36. @Transactional
  37. public class MacTransferService extends BaseService<MacTransfer> {
  38. @Override
  39. public String getPrimaryKey() {
  40. return "trf_id";
  41. }
  42. @Override
  43. public BaseMapper<MacTransfer> getRepository() {
  44. return macTransferMapper;
  45. }
  46. @Autowired
  47. private MacTransferMapper macTransferMapper;
  48. @Autowired
  49. private MacTransferItemMapper macTransferItemMapper;
  50. @Autowired
  51. private MoneyAccountService moneyAccountService;
  52. @Autowired
  53. private MoneyAccountMapper moneyAccountMapper;
  54. @Autowired
  55. private MoneyAccountItemMapper moneyAccountItemMapper;
  56. @Autowired
  57. private AccountService accountService;
  58. @Autowired
  59. private CommonService commonService;
  60. @Autowired
  61. private MacTransferConvert macTransferConvert;
  62. @Autowired
  63. private MacTransferItemConvert macTransferItemConvert;
  64. /**
  65. * @desc : 条件查询
  66. * @author : 付斌
  67. * @date : 2023/1/9 10:40
  68. */
  69. @Pagination
  70. public ResponseResultVO<PageList<MacTransferResponse>> selectByCond(MacTransferQuery macTransferQuery) {
  71. List<MacTransferResponse> list = new ArrayList<>();
  72. list = macTransferMapper.selectByCond(macTransferQuery);
  73. for(int i =0;i<list.size();i++){ //显示明细第一条的 内容
  74. list.get(i).getTrfId();
  75. // 转账明细
  76. List<MacTransferItemResponse> itemList = macTransferItemMapper.selectByCond(new MacTransferItemQuery().setTrfId(list.get(i).getTrfId()));
  77. if(itemList.size()>0){
  78. list.get(i).setTrfInMac(itemList.get(0).getTrfInMac());
  79. list.get(i).setTrfOutMac(itemList.get(0).getTrfOutMac());
  80. list.get(i).setAmtTrf(itemList.get(0).getAmtTrf());
  81. list.get(i).setTrfInMacName(itemList.get(0).getTrfInMacName());
  82. list.get(i).setTrfOutMacName(itemList.get(0).getTrfOutMacName());
  83. }
  84. }
  85. return super.mergeListWithCount(macTransferQuery, list,
  86. macTransferMapper.countByCond(macTransferQuery));
  87. }
  88. /**
  89. * @desc : 查询转账明细
  90. * @author : 付斌
  91. * @date : 2024-02-28 13:25
  92. */
  93. @Pagination
  94. public ResponseResultVO<Map<String, Object>> selectMacTransferInfoById(String id) {
  95. Map<String, Object> result = new HashMap<>();
  96. // 转账明细
  97. List<MacTransferItemResponse> macTransferItemResponse = macTransferItemMapper.selectByCond(new MacTransferItemQuery().setTrfId(id));
  98. result.put("macTransferItem", macTransferItemResponse);
  99. // 附件
  100. return ResponseResultUtil.success(result);
  101. }
  102. /**
  103. * @desc : 条件查询
  104. * @author : 付斌
  105. * @date : 2023/2/29 10:40
  106. */
  107. @Pagination
  108. public ResponseResultVO selectById(String id) {
  109. MacTransferResponse macTransferResponse = macTransferMapper.selectById(id);
  110. return ResponseResultUtil.success(macTransferResponse);
  111. }
  112. /**
  113. * @desc : 新建
  114. * @author : 付斌
  115. * @date : 2023/2/29 10:49
  116. */
  117. @Transactional(
  118. rollbackFor = {Exception.class}
  119. )
  120. public ResponseResultVO<?> insert(MacTransferVO macTransferVO) {
  121. // 转化实体
  122. MacTransfer macTransfer = macTransferConvert.convertToPo(macTransferVO);
  123. // 获取编码和主键UuId
  124. Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.MACTRANSFER.getName(),true);
  125. macTransfer.setTrfId(codeMap.get("outId").toString()).setTrfNo(codeMap.get("outNote").toString());
  126. macTransferMapper.insert(macTransfer);
  127. // 明细保存
  128. if (macTransferVO.getItemList() != null && macTransferVO.getItemList().size() > 0) {
  129. for (MacTransferItemVO macTransferItemVO : macTransferVO.getItemList()) {
  130. MacTransferItem macTransferItem = macTransferItemConvert.convertToPo(macTransferItemVO);
  131. macTransferItem.setTrfId(macTransfer.getTrfId()).setCpId(macTransfer.getCpId()).setMakeStaff(macTransfer.getMakeStaff());
  132. macTransferItemMapper.insert(macTransferItem);
  133. // 更新资金账户
  134. MoneyAccount moneyAccountForUpdate = moneyAccountMapper.selectByIdForUpdate(macTransferItem.getTrfOutMac());
  135. // 如果账户不允许为负数
  136. if(!moneyAccountForUpdate.getFlgNegative()){
  137. // 如果账户余额比转出金额小,就不允许转出
  138. if(moneyAccountForUpdate.getBalance().compareTo(macTransferItem.getAmtTrf()) == -1){
  139. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.RESIDUE_NO_LESS.getMessage());
  140. }
  141. }
  142. // 插入转出流水
  143. MoneyAccountItem moneyAccountItem = new MoneyAccountItem();
  144. moneyAccountItem.setMacId(macTransferItem.getTrfOutMac()).setFlowType(Constant.FlowType.ZHUAN_ZHANG.getName())
  145. .setInvoiceId(macTransferItem.getItemId()).setAmtInflow(macTransferItem.getAmtTrf().negate()).setAccDate(macTransfer.getAccDate())
  146. .setMakeStaff(macTransferVO.getMakeStaff()).setCpId(macTransfer.getCpId());
  147. moneyAccountItemMapper.insert(moneyAccountItem);
  148. MoneyAccount moneyAccountUpdate = new MoneyAccount();
  149. moneyAccountUpdate.setBalance(moneyAccountForUpdate.getBalance().subtract(macTransferItem.getAmtTrf()))
  150. .setMacId(moneyAccountForUpdate.getMacId());
  151. moneyAccountService.updateByUuid(moneyAccountUpdate);
  152. // 插入转入流水
  153. moneyAccountItem = new MoneyAccountItem();
  154. moneyAccountItem.setMacId(macTransferItem.getTrfInMac()).setFlowType(Constant.FlowType.ZHUAN_ZHANG.getName())
  155. .setInvoiceId(macTransferItem.getItemId()).setAmtInflow(macTransferItem.getAmtTrf()).setAccDate(macTransfer.getAccDate())
  156. .setMakeStaff(macTransferVO.getMakeStaff()).setCpId(macTransfer.getCpId());
  157. moneyAccountItemMapper.insert(moneyAccountItem);
  158. // 更新资金账户
  159. moneyAccountForUpdate = moneyAccountMapper.selectByIdForUpdate(macTransferItem.getTrfInMac());
  160. moneyAccountUpdate = new MoneyAccount();
  161. moneyAccountUpdate.setBalance(moneyAccountForUpdate.getBalance().add(macTransferItem.getAmtTrf()))
  162. .setMacId(moneyAccountForUpdate.getMacId());
  163. moneyAccountService.updateByUuid(moneyAccountUpdate);
  164. }
  165. }
  166. return ResponseResultUtil.success();
  167. }
  168. /**
  169. * @desc : 更新
  170. * @author : 付斌
  171. * @date : 2023/2/29 10:49
  172. */
  173. @Transactional(
  174. rollbackFor = {Exception.class}
  175. )
  176. public ResponseResultVO<?> update(MacTransferVO macTransferVO) {
  177. MacTransfer macTransferForUpdate = macTransferMapper.selectByIdForUpdate(macTransferVO.getTrfId());
  178. if(!macTransferForUpdate.getFlgValid()){
  179. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVOICE_ISFLGVALID_FALSE.getMessage());
  180. }
  181. // 如果是期初转账,不允许操作
  182. if(macTransferForUpdate.getTrfType() == 0){
  183. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVOICE_ISQICHU.getMessage());
  184. }
  185. // 将之前的明细全部删除
  186. List<MacTransferItem> MacTransferItemOriginalList = macTransferItemMapper.selectByZIdForUpdate(macTransferVO.getTrfId());
  187. // 需要重新计算的资金账户
  188. List<String> macList = new ArrayList<>();
  189. for (MacTransferItem macTransferItem : MacTransferItemOriginalList) {
  190. // 删除收付款明细
  191. macTransferItemMapper.deleteById(macTransferItem.getItemId());
  192. // 删除账户流水
  193. moneyAccountItemMapper.deleteByInvoiceId(macTransferItem.getItemId());
  194. if (!macList.contains(macTransferItem.getTrfOutMac())) {
  195. macList.add(macTransferItem.getTrfOutMac());
  196. }
  197. if (!macList.contains(macTransferItem.getTrfInMac())) {
  198. macList.add(macTransferItem.getTrfInMac());
  199. }
  200. }
  201. // 新增明细
  202. if (macTransferVO.getItemList() != null && macTransferVO.getItemList().size() > 0) {
  203. for (MacTransferItemVO macTransferItemVO : macTransferVO.getItemList()) {
  204. MacTransferItem macTransferItem = macTransferItemConvert.convertToPo(macTransferItemVO);
  205. macTransferItem.setItemId(null);
  206. macTransferItemMapper.insert(macTransferItem);
  207. // 插入转出流水
  208. MoneyAccountItem moneyAccountItem = new MoneyAccountItem();
  209. moneyAccountItem.setMacId(macTransferItem.getTrfOutMac()).setFlowType(Constant.FlowType.ZHUAN_ZHANG.getName())
  210. .setInvoiceId(macTransferItem.getItemId()).setAmtInflow(macTransferItem.getAmtTrf().negate()).setAccDate(macTransferVO.getAccDate())
  211. .setMakeStaff(macTransferVO.getMakeStaff()).setCpId(macTransferVO.getCpId());
  212. moneyAccountItemMapper.insert(moneyAccountItem);
  213. // 插入转入流水
  214. moneyAccountItem = new MoneyAccountItem();
  215. moneyAccountItem.setMacId(macTransferItem.getTrfInMac()).setFlowType(Constant.FlowType.ZHUAN_ZHANG.getName())
  216. .setInvoiceId(macTransferItem.getItemId()).setAmtInflow(macTransferItem.getAmtTrf()).setAccDate(macTransferVO.getAccDate())
  217. .setMakeStaff(macTransferVO.getMakeStaff()).setCpId(macTransferVO.getCpId());
  218. moneyAccountItemMapper.insert(moneyAccountItem);
  219. if (!macList.contains(macTransferItem.getTrfOutMac())) {
  220. macList.add(macTransferItem.getTrfOutMac());
  221. }
  222. if (!macList.contains(macTransferItem.getTrfInMac())) {
  223. macList.add(macTransferItem.getTrfInMac());
  224. }
  225. }
  226. }
  227. // 转化实体
  228. MacTransfer macTransfer = macTransferConvert.convertToPo(macTransferVO);
  229. super.updateByUuid(macTransfer);
  230. // 更新账户余额
  231. for (String macId : macList) {
  232. accountService.updateMac(macId);
  233. }
  234. return ResponseResultUtil.success();
  235. }
  236. /**
  237. * @desc : 查询转账明细(编辑用)
  238. * @author : 付斌
  239. * @date : 2024-03-02 17:27
  240. */
  241. public ResponseResultVO<?> getMacTransferForUpdate(String id) {
  242. Map<String, Object> dataInfo = new HashMap<>();
  243. MacTransferResponse macTransferResponse = macTransferMapper.selectById(id);
  244. dataInfo.put("data", macTransferResponse);
  245. // 转账明细
  246. List<MacTransferItemResponse> macTransferItemResponse = macTransferItemMapper.selectByCond(new MacTransferItemQuery().setTrfId(id));
  247. dataInfo.put("dataItem", macTransferItemResponse);
  248. return ResponseResultUtil.success(dataInfo);
  249. }
  250. /**
  251. * @desc : 作废
  252. * @author : 付斌
  253. * @date : 2024-03-08 16:38
  254. */
  255. public ResponseResultVO<?> invalid(String id) {
  256. MacTransfer macTransferForUpdate = macTransferMapper.selectByIdForUpdate(id);
  257. // 并发校验
  258. if (!macTransferForUpdate.getFlgValid()) {
  259. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ISFLGVALID_FALSE.getMessage());
  260. }
  261. // 如果是期初转账,不允许操作
  262. if(macTransferForUpdate.getTrfType() == 0){
  263. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVOICE_ISQICHU.getMessage());
  264. }
  265. // 将之前的明细全部删除
  266. List<MacTransferItem> MacTransferItemOriginalList = macTransferItemMapper.selectByZIdForUpdate(id);
  267. // 需要重新计算的资金账户
  268. List<String> macList = new ArrayList<>();
  269. for (MacTransferItem macTransferItem : MacTransferItemOriginalList) {
  270. // 删除收付款明细
  271. macTransferItemMapper.deleteById(macTransferItem.getItemId());
  272. // 删除账户流水
  273. moneyAccountItemMapper.deleteByInvoiceId(macTransferItem.getItemId());
  274. if (!macList.contains(macTransferItem.getTrfOutMac())) {
  275. macList.add(macTransferItem.getTrfOutMac());
  276. }
  277. if (!macList.contains(macTransferItem.getTrfInMac())) {
  278. macList.add(macTransferItem.getTrfInMac());
  279. }
  280. }
  281. // 更新账户余额
  282. for (String macId : macList) {
  283. accountService.updateMac(macId);
  284. }
  285. // 作废
  286. MacTransfer macTransferUpdate = new MacTransfer();
  287. macTransferUpdate.setFlgValid(false).setTrfId(id);
  288. super.updateByUuid(macTransferUpdate);
  289. return ResponseResultUtil.success();
  290. }
  291. }