| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335 |
- package com.dk.mdm.service.mac;
- import com.dk.common.exception.BaseBusinessException;
- import com.dk.common.infrastructure.annotaiton.Pagination;
- import com.dk.common.infrastructure.constant.Constant;
- import com.dk.common.infrastructure.enums.ErrorCodeEnum;
- import com.dk.common.model.pojo.PageList;
- import com.dk.common.response.ResponseCodeEnum;
- import com.dk.common.response.ResponseResultUtil;
- import com.dk.common.response.ResponseResultVO;
- import com.dk.mdm.infrastructure.convert.mac.MacTransferConvert;
- import com.dk.mdm.infrastructure.convert.mac.MacTransferItemConvert;
- import com.dk.mdm.mapper.mac.MacTransferItemMapper;
- import com.dk.mdm.mapper.mst.MoneyAccountItemMapper;
- import com.dk.mdm.mapper.mst.MoneyAccountMapper;
- import com.dk.mdm.model.pojo.mac.MacTransfer;
- import com.dk.mdm.mapper.mac.MacTransferMapper;
- import com.dk.common.service.BaseService;
- import com.dk.common.mapper.BaseMapper;
- import com.dk.mdm.model.pojo.mac.MacTransferItem;
- import com.dk.mdm.model.pojo.mst.MoneyAccount;
- import com.dk.mdm.model.pojo.mst.MoneyAccountItem;
- import com.dk.mdm.model.query.mac.*;
- import com.dk.mdm.model.response.mac.*;
- import com.dk.mdm.model.vo.mac.MacTransferVO;
- import com.dk.mdm.model.vo.mac.MacTransferItemVO;
- import com.dk.mdm.service.common.CommonService;
- import com.dk.mdm.service.mst.MoneyAccountService;
- import org.springframework.stereotype.Service;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.transaction.annotation.Transactional;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- @Service
- @Transactional
- public class MacTransferService extends BaseService<MacTransfer> {
- @Override
- public String getPrimaryKey() {
- return "trf_id";
- }
- @Override
- public BaseMapper<MacTransfer> getRepository() {
- return macTransferMapper;
- }
- @Autowired
- private MacTransferMapper macTransferMapper;
- @Autowired
- private MacTransferItemMapper macTransferItemMapper;
- @Autowired
- private MoneyAccountService moneyAccountService;
- @Autowired
- private MoneyAccountMapper moneyAccountMapper;
- @Autowired
- private MoneyAccountItemMapper moneyAccountItemMapper;
- @Autowired
- private AccountService accountService;
- @Autowired
- private CommonService commonService;
- @Autowired
- private MacTransferConvert macTransferConvert;
- @Autowired
- private MacTransferItemConvert macTransferItemConvert;
- /**
- * @desc : 条件查询
- * @author : 付斌
- * @date : 2023/1/9 10:40
- */
- @Pagination
- public ResponseResultVO<PageList<MacTransferResponse>> selectByCond(MacTransferQuery macTransferQuery) {
- List<MacTransferResponse> list = new ArrayList<>();
- list = macTransferMapper.selectByCond(macTransferQuery);
- for(int i =0;i<list.size();i++){ //显示明细第一条的 内容
- list.get(i).getTrfId();
- // 转账明细
- List<MacTransferItemResponse> itemList = macTransferItemMapper.selectByCond(new MacTransferItemQuery().setTrfId(list.get(i).getTrfId()));
- if(itemList.size()>0){
- list.get(i).setTrfInMac(itemList.get(0).getTrfInMac());
- list.get(i).setTrfOutMac(itemList.get(0).getTrfOutMac());
- list.get(i).setAmtTrf(itemList.get(0).getAmtTrf());
- list.get(i).setTrfInMacName(itemList.get(0).getTrfInMacName());
- list.get(i).setTrfOutMacName(itemList.get(0).getTrfOutMacName());
- }
- }
- return super.mergeListWithCount(macTransferQuery, list,
- macTransferMapper.countByCond(macTransferQuery));
- }
- /**
- * @desc : 查询转账明细
- * @author : 付斌
- * @date : 2024-02-28 13:25
- */
- @Pagination
- public ResponseResultVO<Map<String, Object>> selectMacTransferInfoById(String id) {
- Map<String, Object> result = new HashMap<>();
- // 转账明细
- List<MacTransferItemResponse> macTransferItemResponse = macTransferItemMapper.selectByCond(new MacTransferItemQuery().setTrfId(id));
- result.put("macTransferItem", macTransferItemResponse);
- // 附件
- return ResponseResultUtil.success(result);
- }
- /**
- * @desc : 条件查询
- * @author : 付斌
- * @date : 2023/2/29 10:40
- */
- @Pagination
- public ResponseResultVO selectById(String id) {
- MacTransferResponse macTransferResponse = macTransferMapper.selectById(id);
- return ResponseResultUtil.success(macTransferResponse);
- }
- /**
- * @desc : 新建
- * @author : 付斌
- * @date : 2023/2/29 10:49
- */
- @Transactional(
- rollbackFor = {Exception.class}
- )
- public ResponseResultVO<?> insert(MacTransferVO macTransferVO) {
- // 转化实体
- MacTransfer macTransfer = macTransferConvert.convertToPo(macTransferVO);
- // 获取编码和主键UuId
- Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.MACTRANSFER.getName(),true);
- macTransfer.setTrfId(codeMap.get("outId").toString()).setTrfNo(codeMap.get("outNote").toString());
- macTransferMapper.insert(macTransfer);
- // 明细保存
- if (macTransferVO.getItemList() != null && macTransferVO.getItemList().size() > 0) {
- for (MacTransferItemVO macTransferItemVO : macTransferVO.getItemList()) {
- MacTransferItem macTransferItem = macTransferItemConvert.convertToPo(macTransferItemVO);
- macTransferItem.setTrfId(macTransfer.getTrfId()).setCpId(macTransfer.getCpId()).setMakeStaff(macTransfer.getMakeStaff());
- macTransferItemMapper.insert(macTransferItem);
- // 更新资金账户
- MoneyAccount moneyAccountForUpdate = moneyAccountMapper.selectByIdForUpdate(macTransferItem.getTrfOutMac());
- // 如果账户不允许为负数
- if(!moneyAccountForUpdate.getFlgNegative()){
- // 如果账户余额比转出金额小,就不允许转出
- if(moneyAccountForUpdate.getBalance().compareTo(macTransferItem.getAmtTrf()) == -1){
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.RESIDUE_NO_LESS.getMessage());
- }
- }
- // 插入转出流水
- MoneyAccountItem moneyAccountItem = new MoneyAccountItem();
- moneyAccountItem.setMacId(macTransferItem.getTrfOutMac()).setFlowType(Constant.FlowType.ZHUAN_ZHANG.getName())
- .setInvoiceId(macTransferItem.getItemId()).setAmtInflow(macTransferItem.getAmtTrf().negate()).setAccDate(macTransfer.getAccDate())
- .setMakeStaff(macTransferVO.getMakeStaff()).setCpId(macTransfer.getCpId());
- moneyAccountItemMapper.insert(moneyAccountItem);
- MoneyAccount moneyAccountUpdate = new MoneyAccount();
- moneyAccountUpdate.setBalance(moneyAccountForUpdate.getBalance().subtract(macTransferItem.getAmtTrf()))
- .setMacId(moneyAccountForUpdate.getMacId());
- moneyAccountService.updateByUuid(moneyAccountUpdate);
- // 插入转入流水
- moneyAccountItem = new MoneyAccountItem();
- moneyAccountItem.setMacId(macTransferItem.getTrfInMac()).setFlowType(Constant.FlowType.ZHUAN_ZHANG.getName())
- .setInvoiceId(macTransferItem.getItemId()).setAmtInflow(macTransferItem.getAmtTrf()).setAccDate(macTransfer.getAccDate())
- .setMakeStaff(macTransferVO.getMakeStaff()).setCpId(macTransfer.getCpId());
- moneyAccountItemMapper.insert(moneyAccountItem);
- // 更新资金账户
- moneyAccountForUpdate = moneyAccountMapper.selectByIdForUpdate(macTransferItem.getTrfInMac());
- moneyAccountUpdate = new MoneyAccount();
- moneyAccountUpdate.setBalance(moneyAccountForUpdate.getBalance().add(macTransferItem.getAmtTrf()))
- .setMacId(moneyAccountForUpdate.getMacId());
- moneyAccountService.updateByUuid(moneyAccountUpdate);
- }
- }
- return ResponseResultUtil.success();
- }
- /**
- * @desc : 更新
- * @author : 付斌
- * @date : 2023/2/29 10:49
- */
- @Transactional(
- rollbackFor = {Exception.class}
- )
- public ResponseResultVO<?> update(MacTransferVO macTransferVO) {
- MacTransfer macTransferForUpdate = macTransferMapper.selectByIdForUpdate(macTransferVO.getTrfId());
- if(!macTransferForUpdate.getFlgValid()){
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVOICE_ISFLGVALID_FALSE.getMessage());
- }
- // 如果是期初转账,不允许操作
- if(macTransferForUpdate.getTrfType() == 0){
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVOICE_ISQICHU.getMessage());
- }
- // 将之前的明细全部删除
- List<MacTransferItem> MacTransferItemOriginalList = macTransferItemMapper.selectByZIdForUpdate(macTransferVO.getTrfId());
- // 需要重新计算的资金账户
- List<String> macList = new ArrayList<>();
- for (MacTransferItem macTransferItem : MacTransferItemOriginalList) {
- // 删除收付款明细
- macTransferItemMapper.deleteById(macTransferItem.getItemId());
- // 删除账户流水
- moneyAccountItemMapper.deleteByInvoiceId(macTransferItem.getItemId());
- if (!macList.contains(macTransferItem.getTrfOutMac())) {
- macList.add(macTransferItem.getTrfOutMac());
- }
- if (!macList.contains(macTransferItem.getTrfInMac())) {
- macList.add(macTransferItem.getTrfInMac());
- }
- }
- // 新增明细
- if (macTransferVO.getItemList() != null && macTransferVO.getItemList().size() > 0) {
- for (MacTransferItemVO macTransferItemVO : macTransferVO.getItemList()) {
- MacTransferItem macTransferItem = macTransferItemConvert.convertToPo(macTransferItemVO);
- macTransferItem.setItemId(null);
- macTransferItemMapper.insert(macTransferItem);
- // 插入转出流水
- MoneyAccountItem moneyAccountItem = new MoneyAccountItem();
- moneyAccountItem.setMacId(macTransferItem.getTrfOutMac()).setFlowType(Constant.FlowType.ZHUAN_ZHANG.getName())
- .setInvoiceId(macTransferItem.getItemId()).setAmtInflow(macTransferItem.getAmtTrf().negate()).setAccDate(macTransferVO.getAccDate())
- .setMakeStaff(macTransferVO.getMakeStaff()).setCpId(macTransferVO.getCpId());
- moneyAccountItemMapper.insert(moneyAccountItem);
- // 插入转入流水
- moneyAccountItem = new MoneyAccountItem();
- moneyAccountItem.setMacId(macTransferItem.getTrfInMac()).setFlowType(Constant.FlowType.ZHUAN_ZHANG.getName())
- .setInvoiceId(macTransferItem.getItemId()).setAmtInflow(macTransferItem.getAmtTrf()).setAccDate(macTransferVO.getAccDate())
- .setMakeStaff(macTransferVO.getMakeStaff()).setCpId(macTransferVO.getCpId());
- moneyAccountItemMapper.insert(moneyAccountItem);
- if (!macList.contains(macTransferItem.getTrfOutMac())) {
- macList.add(macTransferItem.getTrfOutMac());
- }
- if (!macList.contains(macTransferItem.getTrfInMac())) {
- macList.add(macTransferItem.getTrfInMac());
- }
- }
- }
- // 转化实体
- MacTransfer macTransfer = macTransferConvert.convertToPo(macTransferVO);
- super.updateByUuid(macTransfer);
- // 更新账户余额
- for (String macId : macList) {
- accountService.updateMac(macId);
- }
- return ResponseResultUtil.success();
- }
- /**
- * @desc : 查询转账明细(编辑用)
- * @author : 付斌
- * @date : 2024-03-02 17:27
- */
- public ResponseResultVO<?> getMacTransferForUpdate(String id) {
- Map<String, Object> dataInfo = new HashMap<>();
- MacTransferResponse macTransferResponse = macTransferMapper.selectById(id);
- dataInfo.put("data", macTransferResponse);
- // 转账明细
- List<MacTransferItemResponse> macTransferItemResponse = macTransferItemMapper.selectByCond(new MacTransferItemQuery().setTrfId(id));
- dataInfo.put("dataItem", macTransferItemResponse);
- return ResponseResultUtil.success(dataInfo);
- }
- /**
- * @desc : 作废
- * @author : 付斌
- * @date : 2024-03-08 16:38
- */
- public ResponseResultVO<?> invalid(String id) {
- MacTransfer macTransferForUpdate = macTransferMapper.selectByIdForUpdate(id);
- // 并发校验
- if (!macTransferForUpdate.getFlgValid()) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ISFLGVALID_FALSE.getMessage());
- }
- // 如果是期初转账,不允许操作
- if(macTransferForUpdate.getTrfType() == 0){
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVOICE_ISQICHU.getMessage());
- }
- // 将之前的明细全部删除
- List<MacTransferItem> MacTransferItemOriginalList = macTransferItemMapper.selectByZIdForUpdate(id);
- // 需要重新计算的资金账户
- List<String> macList = new ArrayList<>();
- for (MacTransferItem macTransferItem : MacTransferItemOriginalList) {
- // 删除收付款明细
- macTransferItemMapper.deleteById(macTransferItem.getItemId());
- // 删除账户流水
- moneyAccountItemMapper.deleteByInvoiceId(macTransferItem.getItemId());
- if (!macList.contains(macTransferItem.getTrfOutMac())) {
- macList.add(macTransferItem.getTrfOutMac());
- }
- if (!macList.contains(macTransferItem.getTrfInMac())) {
- macList.add(macTransferItem.getTrfInMac());
- }
- }
- // 更新账户余额
- for (String macId : macList) {
- accountService.updateMac(macId);
- }
- // 作废
- MacTransfer macTransferUpdate = new MacTransfer();
- macTransferUpdate.setFlgValid(false).setTrfId(id);
- super.updateByUuid(macTransferUpdate);
- return ResponseResultUtil.success();
- }
- }
|