package com.dk.mdm.service.mac; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.dk.common.infrastructure.annotaiton.Pagination; import com.dk.common.infrastructure.constant.Constant; import com.dk.common.model.pojo.PageList; import com.dk.common.response.ResponseResultUtil; import com.dk.common.response.ResponseResultVO; import com.dk.mdm.infrastructure.convert.mac.ReceiptConvert; import com.dk.mdm.mapper.mac.AccountObjectMapper; import com.dk.mdm.mapper.mac.ReceivableMapper; import com.dk.mdm.model.pojo.mac.AccountObject; import com.dk.mdm.model.pojo.mac.Receipt; import com.dk.mdm.mapper.mac.ReceiptMapper; import com.dk.common.service.BaseService; import com.dk.common.mapper.BaseMapper; import com.dk.mdm.model.pojo.mac.Receivable; import com.dk.mdm.model.query.mac.ReceiptQuery; import com.dk.mdm.model.response.mac.ReceiptResponse; import com.dk.mdm.model.vo.mac.ReceiptVO; import com.dk.mdm.service.common.CommonService; import org.springframework.stereotype.Service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; import java.util.UUID; @Service @Transactional public class ReceiptService extends BaseService { @Override public String getPrimaryKey() { return "receipt_id"; } @Override public BaseMapper getRepository() { return receiptMapper; } @Autowired private ReceiptMapper receiptMapper; @Autowired private ReceivableMapper receivableMapper; // 应收账款 @Autowired private AccountObjectService accountObjectService; @Autowired private AccountObjectMapper accountObjectMapper; @Autowired private CommonService commonService; @Autowired private ReceiptConvert receiptConvert; /** * @desc : 条件查询 * @author : 付斌 * @date : 2023/1/9 10:40 */ @Pagination public ResponseResultVO> selectByCond(ReceiptQuery receiptQuery) { return super.mergeListWithCount(receiptQuery, receiptMapper.selectByCond(receiptQuery), receiptMapper.countByCond(receiptQuery)); } /** * @desc : 新建方法 * @author : 付斌 * @date : 2023/1/9 10:49 */ @Transactional( rollbackFor = {Exception.class} ) public ResponseResultVO insert(Map map) { List receiptVOList = JSONArray.parseArray(JSON.toJSONString(map.get("itemList"))).toJavaList(ReceiptVO.class); // 明细保存 if (receiptVOList != null && receiptVOList.size() > 0) { for (ReceiptVO receiptVO : receiptVOList) { // 获取单号 Map codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.CUSRECEIPT.getName(), false); receiptVO.setReceiptId(codeMap.get("outId").toString()).setReceiptNo(codeMap.get("outNote").toString()) .setReceiptType(Constant.DocumentType.ORDER.getName()); // 转化实体 Receipt receipt = receiptConvert.convertToPo(receiptVO); // Receipt保存 super.insert(receipt); // 插入应收账款 Receivable receivable = new Receivable(); // 获取单号 codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.RECEIVABLE.getName(), false); receivable.setRecId(codeMap.get("outId").toString()).setRecNo(codeMap.get("outNote").toString()) .setRecType(Constant.recType.SHOU_KUAN.getName()).setAccType(1).setRecDirection(false) .setObjectId(receiptVO.getCusId()).setOrgId(receiptVO.getOrgId()).setStaffId(receipt.getStaffId()) .setAccDate(receiptVO.getReceiptDate()).setRecStatus(Constant.recStatuse.QUE_DING.getName()) .setAmtReceivable(receiptVO.getReceiptAmt().negate()).setAmtResidue(receiptVO.getReceiptAmt().negate()) .setBiznisType("t_mac_receipt").setBiznisId(receiptVO.getReceiptId()).setBiznisNo(receiptVO.getReceiptNo()) .setMakeStaff(receiptVO.getMakeStaff()); receivableMapper.insert(receivable); // 更新收款单上的应收账款 Receipt receiptUpdate = new Receipt(); receiptUpdate.setReceivableId(receivable.getRecId()).setReceiptId(receiptVO.getReceiptId()); super.updateByUuid(receiptUpdate); // 插入账款总表 AccountObject accountObjectForUpdate = accountObjectMapper.selectByIdForUpdate(receiptVO.getCusId()); // 没有账款对象,需要新建 if(accountObjectForUpdate == null){ accountObjectForUpdate = new AccountObject(); accountObjectForUpdate.setObjectId(receiptVO.getCusId()).setObjectType("对象类型-客户"); accountObjectMapper.insert(accountObjectForUpdate); } // 更新账款总表上收款的相关字段 AccountObject accountObjectUpdate = new AccountObject(); accountObjectUpdate.setSumPayment(accountObjectForUpdate.getSumPayment().add(receiptVO.getReceiptAmt()))// 总收付 .setSumMoney(accountObjectForUpdate.getSumMoney().add(receiptVO.getReceiptAmt()))// 总资金 .setAmtRefundable(accountObjectForUpdate.getAmtRefundable().add(receiptVO.getReceiptAmt())) // 可退金额 .setObjectId(accountObjectForUpdate.getObjectId()); accountObjectService.updateByUuid(accountObjectUpdate); } } return ResponseResultUtil.success(); } /** * @desc : 编辑方法 * @author : 付斌 * @date : 2023/1/9 10:49 */ @Transactional( rollbackFor = {Exception.class} ) public ResponseResultVO update(ReceiptVO receiptVO) { Receipt receipt = receiptConvert.convertToPo(receiptVO); return ResponseResultUtil.success(super.update(receipt, new UpdateWrapper().lambda().eq(Receipt::getReceiptId, UUID.fromString(receipt.getReceiptId())))); } }