package com.ruoyi.warehouseBusiness.service.impl; import com.ruoyi.approvalFlow.domain.AuditItems; import com.ruoyi.approvalFlow.domain.AuditPathsLevels; import com.ruoyi.approvalFlow.mapper.AuditPathsLevelsMapper; import com.ruoyi.approvalFlow.service.impl.AuditItemsServiceImpl; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.system.domain.SysPost; import com.ruoyi.system.mapper.SysPostMapper; import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.warehouseBusiness.domain.FInvoicePayment; import com.ruoyi.warehouseBusiness.domain.FInvoicePaymentDetail; import com.ruoyi.warehouseBusiness.mapper.FInvoicePaymentDetailMapper; import com.ruoyi.warehouseBusiness.mapper.FInvoicePaymentMapper; import com.ruoyi.warehouseBusiness.mapper.TInvoiceMapper; import com.ruoyi.warehouseBusiness.service.IFInvoicePaymentService; import com.ruoyi.warehouseBusiness.vo.BankStatementsVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; /** * 收费管理Service业务层处理 * * @author ruoyi * @date 2023-10-19 */ @Service public class FInvoicePaymentServiceImpl implements IFInvoicePaymentService { @Autowired private FInvoicePaymentMapper fInvoicePaymentMapper; @Autowired private FInvoicePaymentDetailMapper fInvoicePaymentDetailMapper; @Autowired private TInvoiceMapper tInvoiceMapper; @Autowired private BillnoSerialServiceImpl billnoSerialServiceImpl; @Autowired private AuditItemsServiceImpl auditItemsService; @Autowired private AuditPathsLevelsMapper auditPathsLevelsMapper; @Autowired private SysUserMapper userMapper; @Autowired private SysPostMapper postMapper; /** * 查询收费管理 * * @param id 收费管理ID * @return 收费管理 */ @Override public FInvoicePayment selectFInvoicePaymentById(Long id) { FInvoicePayment fInvoicePayment = fInvoicePaymentMapper.selectFInvoicePaymentById(id); List invoicePaymentDetailList = fInvoicePaymentDetailMapper.selectByPid(id); fInvoicePayment.setInvoicePaymentDetailList(invoicePaymentDetailList); fInvoicePayment.setSumMoneyZh(Convert.digitUppercase(fInvoicePayment.getSumMoney().doubleValue())); getUserName(fInvoicePayment); return fInvoicePayment; } /** * 获取打印数据中的人员信息 * @param fInvoicePayment * @return */ public void getUserName(FInvoicePayment fInvoicePayment) { // 提交人 // dataMap.put("presenterName", SecurityUtils.getLoginUser().getUser().getNickName()); AuditPathsLevels auditPathsLevels = new AuditPathsLevels(); auditPathsLevels.setPathId(1141L); List pathsLevelsList = auditPathsLevelsMapper.selectAuditPathsLevelsList(auditPathsLevels); boolean isTreasurer = true; for (AuditPathsLevels pathsLevels : pathsLevelsList) { String auditUserId = pathsLevels.getAuditUserId(); if (auditUserId.contains("[")) { auditUserId = auditUserId.substring(1); } if (auditUserId.contains("]")) { auditUserId = auditUserId.substring(0, auditUserId.length() - 1); } List idList = new ArrayList<>(); if (auditUserId.contains(",")) { idList = Arrays.asList(auditUserId.split(",")); } else { idList.add(auditUserId); } SysUser sysUser = userMapper.selectUserById(Long.valueOf(idList.get(0))); List sysPosts = postMapper.selectPostsByUserName(sysUser.getUserName()); for (SysPost sysPost : sysPosts) { if ("fs".equals(sysPost.getPostCode())) { // 财务主管 fInvoicePayment.setFirstLevelReviewerName(sysUser.getNickName()); // dataMap.put("firstLevelReviewerName", sysUser.getNickName()); } else if ("fm".equals(sysPost.getPostCode())) { // 财务经理 // dataMap.put("secondaryReviewerName", sysUser.getNickName()); fInvoicePayment.setSecondaryReviewerName(sysUser.getNickName()); } } // if (isTreasurer) { // // 财务主管 // dataMap.put("firstLevelReviewerName", sysUser.getNickName()); // isTreasurer = false; // } else { // // 财务经理 // dataMap.put("secondaryReviewerName", sysUser.getNickName()); // } } } /** * 查询收费管理列表 * * @param fInvoicePayment 收费管理 * @return 收费管理 */ @Override public List selectFInvoicePaymentList(FInvoicePayment fInvoicePayment) { return fInvoicePaymentMapper.selectFInvoicePaymentList(fInvoicePayment); } /** * 新增收费管理 * * @param fInvoicePayment 收费管理 * @return 结果 */ @Override @Transactional public FInvoicePayment insertFInvoicePayment(FInvoicePayment fInvoicePayment) { Date nowDate = DateUtils.getNowDate(); String billNo = null; if (fInvoicePayment.getType() == 1) { billNo = billnoSerialServiceImpl.getBillNo("SFGL", nowDate); } else { billNo = billnoSerialServiceImpl.getBillNo("FFGL", nowDate); } fInvoicePayment.setSysNo(billNo); fInvoicePayment.setCreateBy(SecurityUtils.getUsername()); fInvoicePayment.setCreateTime(nowDate); BigDecimal sumProceeds = new BigDecimal("0"); List invoicePaymentDetailList = fInvoicePayment.getInvoicePaymentDetailList(); for (FInvoicePaymentDetail fInvoicePaymentDetail : invoicePaymentDetailList) { BigDecimal proceeds = fInvoicePaymentDetail.getProceeds(); sumProceeds = sumProceeds.add(proceeds); } fInvoicePayment.setSumMoney(sumProceeds); int i = fInvoicePaymentMapper.insertFInvoicePayment(fInvoicePayment); for (FInvoicePaymentDetail fInvoicePaymentDetail : invoicePaymentDetailList) { fInvoicePaymentDetail.setPid(fInvoicePayment.getId()); fInvoicePaymentDetail.setCreateBy(SecurityUtils.getUsername()); fInvoicePaymentDetail.setCreateTime(nowDate); fInvoicePaymentDetail.setId(null); fInvoicePaymentDetailMapper.insertFInvoicePaymentDetail(fInvoicePaymentDetail); // tInvoiceMapper.updateProceedsById( // fInvoicePaymentDetail.getInvoiceId(), // fInvoicePaymentDetail.getProceeds(), // SecurityUtils.getUsername(), // nowDate); } return fInvoicePayment; } /** * 修改收费管理 * * @param fInvoicePayment 收费管理 * @return 结果 */ @Override @Transactional public FInvoicePayment updateFInvoicePayment(FInvoicePayment fInvoicePayment) { Date nowDate = DateUtils.getNowDate(); fInvoicePayment.setUpdateBy(SecurityUtils.getUsername()); fInvoicePayment.setUpdateTime(nowDate); BigDecimal sumProceeds = new BigDecimal("0"); List invoicePaymentDetailList = fInvoicePayment.getInvoicePaymentDetailList(); for (FInvoicePaymentDetail fInvoicePaymentDetail : invoicePaymentDetailList) { BigDecimal proceeds = fInvoicePaymentDetail.getProceeds(); sumProceeds = sumProceeds.add(proceeds); } fInvoicePayment.setSumMoney(sumProceeds); int i = fInvoicePaymentMapper.updateFInvoicePayment(fInvoicePayment); fInvoicePaymentDetailMapper.DeleteByPid(fInvoicePayment.getId(), nowDate, SecurityUtils.getUsername()); // List invoicePaymentDetailList = fInvoicePayment.getInvoicePaymentDetailList(); for (FInvoicePaymentDetail fInvoicePaymentDetail : invoicePaymentDetailList) { fInvoicePaymentDetail.setPid(fInvoicePayment.getId()); fInvoicePaymentDetail.setCreateBy(SecurityUtils.getUsername()); fInvoicePaymentDetail.setCreateTime(nowDate); fInvoicePaymentDetail.setId(null); fInvoicePaymentDetailMapper.insertFInvoicePaymentDetail(fInvoicePaymentDetail); tInvoiceMapper.updateProceedsById( fInvoicePaymentDetail.getInvoiceId(), fInvoicePaymentDetail.getProceeds(), SecurityUtils.getUsername(), nowDate); } return fInvoicePayment; } /** * 批量删除收费管理 * * @param ids 需要删除的收费管理ID * @return 结果 */ @Override @Transactional public int deleteFInvoicePaymentByIds(Long[] ids) { Date nowDate = DateUtils.getNowDate(); int i = 0; for (Long id : ids) { i = fInvoicePaymentMapper.deleteByid(id, nowDate, SecurityUtils.getUsername()); List invoicePaymentDetailList = fInvoicePaymentDetailMapper.selectByPid(id); fInvoicePaymentDetailMapper.DeleteByPid(id, nowDate, SecurityUtils.getUsername()); // for (FInvoicePaymentDetail fInvoicePaymentDetail : invoicePaymentDetailList) { // tInvoiceMapper.quashProceedsById(fInvoicePaymentDetail, SecurityUtils.getUsername(), nowDate); // } } return i; } /** * 删除收费管理信息 * * @param id 收费管理ID * @return 结果 */ @Override public int deleteFInvoicePaymentById(Long id) { return fInvoicePaymentMapper.deleteFInvoicePaymentById(id); } @Override @Transactional public AjaxResult payForIt(FInvoicePayment fInvoicePayment) { if (fInvoicePayment.getType() == 1) { Date nowDate = DateUtils.getNowDate(); fInvoicePaymentMapper.payForIt(fInvoicePayment.getId(), SecurityUtils.getUsername(), nowDate, 2); List invoicePaymentDetailList = fInvoicePayment.getInvoicePaymentDetailList(); for (FInvoicePaymentDetail fInvoicePaymentDetail : invoicePaymentDetailList) { tInvoiceMapper.updateProceedsById( fInvoicePaymentDetail.getInvoiceId(), fInvoicePaymentDetail.getProceeds(), SecurityUtils.getUsername(), nowDate); } return new AjaxResult(200, "收付费成功"); } Date nowDate = DateUtils.getNowDate(); fInvoicePaymentMapper.updateAuditTypeById(fInvoicePayment.getId(), 2, SecurityUtils.getUsername(), nowDate); if (fInvoicePayment.getType() == 2) { // 提交审批流 AuditItems auditItems = new AuditItems(); auditItems.setLevelId(0L); // 业务id auditItems.setBillId(fInvoicePayment.getId()); // 活动号 auditItems.setActId(580L); auditItems.setIffinalItem("F"); // 业务编号 auditItems.setBillNo(fInvoicePayment.getSysNo()); // 存储委托方(货权方) // auditItems.setRefno1(tFee.getfCorpid() + ""); // 存储业务类型(业务类型) auditItems.setRefno2("FFGL"); // 存储提单号(提单号) // auditItems.setRefno3(tFee.getfBillno()); auditItems.setSendUserId(SecurityUtils.getLoginUser().getUser().getUserId()); auditItems.setSendName(SecurityUtils.getUsername()); auditItems.setSendTime(new Date()); auditItems.setAuditUserId(SecurityUtils.getLoginUser().getUser().getUserId()); auditItems.setAuditItem(new Date()); auditItems.setAuditOpTime(new Date()); auditItems.setAuditMsg("提交"); auditItems.setAuditStatus("O"); AjaxResult approvalFlow = auditItemsService.createApprovalFlow(auditItems); String code = approvalFlow.get("code").toString(); if ("500".equals(code)) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } } return new AjaxResult(200, "收付费成功"); } @Override @Transactional public AjaxResult quashPayForIt(FInvoicePayment fInvoicePayment) { Date nowDate = DateUtils.getNowDate(); fInvoicePaymentMapper.quashPayForIt(fInvoicePayment.getId(), SecurityUtils.getUsername(), nowDate); List invoicePaymentDetailList = fInvoicePayment.getInvoicePaymentDetailList(); for (FInvoicePaymentDetail fInvoicePaymentDetail : invoicePaymentDetailList) { tInvoiceMapper.quashProceedsById(fInvoicePaymentDetail, SecurityUtils.getUsername(), nowDate); } return new AjaxResult(200, "撤销收付费成功"); } @Override public List bankStatements(BankStatementsVO bankStatementsVO) { BigDecimal initialAmount = new BigDecimal("0"); BigDecimal balance = initialAmount; List bankStatementsVOList = fInvoicePaymentMapper.bankStatements(bankStatementsVO); String no = ""; for (BankStatementsVO statementsVO : bankStatementsVOList) { // 如果传入日期查询初期金额 SimpleDateFormat customFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); statementsVO.setDateString(customFormat.format(statementsVO.getDate())); BigDecimal amountCharged = fInvoicePaymentMapper.getInitialAmountByType(statementsVO.getDateString(), 1, statementsVO.getCdbNo()); BigDecimal amountPaid = fInvoicePaymentMapper.getInitialAmountByType(statementsVO.getDateString(), 2, statementsVO.getCdbNo()); BigDecimal amountPaids = fInvoicePaymentMapper.getInitialAmountPay(statementsVO.getDateString(), statementsVO.getCdbNo()); if (amountCharged == null) { amountCharged = new BigDecimal("0"); } if (amountPaid == null) { amountPaid = new BigDecimal("0"); } if (amountPaids == null) { amountPaids = new BigDecimal("0"); } amountPaid = amountPaid.add(amountPaids); initialAmount = amountCharged.subtract(amountPaid); // 计算当前余额 if (statementsVO.getRevenue() != null) { statementsVO.setBalance(initialAmount.add(statementsVO.getRevenue())); } else if (statementsVO.getExpenditures() != null) { statementsVO.setBalance(initialAmount.subtract(statementsVO.getExpenditures())); } // 初期 String forNo = statementsVO.getCdbNo(); String cdbNo = statementsVO.getCdbNo(); if (forNo == null) { forNo = ""; } if (cdbNo == null) { cdbNo = ""; } if(!forNo.equals(cdbNo)) { balance = initialAmount; } statementsVO.setTheStartingAmount(balance); } return bankStatementsVOList; } @Override public int confirmPrinting(Map fInvoicePayment) { String id = fInvoicePayment.get("id"); Long ids = Long.valueOf(id); String printDate = fInvoicePayment.get("printTime"); return fInvoicePaymentMapper.confirmPrinting(ids, printDate); } }