package com.ruoyi.finance.service.impl; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ruoyi.approvalFlow.domain.AuditItems; import com.ruoyi.approvalFlow.service.impl.AuditItemsServiceImpl; import com.ruoyi.basicData.domain.TCorps; import com.ruoyi.basicData.domain.TFees; import com.ruoyi.basicData.mapper.TCorpsMapper; import com.ruoyi.basicData.mapper.TFeesMapper; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.finance.domain.TFee; import com.ruoyi.finance.domain.TFeeDo; import com.ruoyi.finance.domain.TWareHouseFees; import com.ruoyi.finance.mapper.TFeeDoMapper; import com.ruoyi.finance.mapper.TFeeMapper; import com.ruoyi.finance.service.ITFeeService; import com.ruoyi.system.domain.SysConfig; import com.ruoyi.system.mapper.SysConfigMapper; import com.ruoyi.system.service.ISysDictDataService; import com.ruoyi.warehouseBusiness.domain.*; import com.ruoyi.warehouseBusiness.mapper.BillnoDelMapper; import com.ruoyi.warehouseBusiness.mapper.TWarehouseBillsMapper; import com.ruoyi.warehouseBusiness.mapper.TWarehousebillsfeesMapper; import com.ruoyi.warehouseBusiness.service.impl.BillnoSerialServiceImpl; 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.util.*; /** * 财务数据主Service业务层处理 * * @author ruoyi * @date 2021-01-18 */ @Service public class TFeeServiceImpl implements ITFeeService { @Autowired private TFeeMapper tFeeMapper; @Autowired private TFeeDoMapper tFeeDoMapper; @Autowired private BillnoSerialServiceImpl billnoSerialServiceImpl; @Autowired private BillnoDelMapper billnoDelMapper; @Autowired private TCorpsMapper tCorpsMapper; @Autowired private TFeesMapper tFeesMapper; @Autowired private TWarehouseBillsMapper tWarehouseBillsMapper; @Autowired private TWarehousebillsfeesMapper tWarehousebillsfeesMapper; @Autowired private SysConfigMapper sysConfigMapper; @Autowired private AuditItemsServiceImpl auditItemsService; @Autowired private ISysDictDataService iSysDictDataService; /** * 查询财务数据主 * * @param fId 财务数据主ID * @return 财务数据主 */ @Override public Map selectTFeeById(Long fId) { Map map = new HashMap<>(); // 客户表 List corpsId = new ArrayList<>(); // 费用 List feesId = new ArrayList<>(); TFee tFee=tFeeMapper.selectTFeeById(fId); if (StringUtils.isNotNull(tFee.getfCorpid())) { corpsId.add(tFee.getfCorpid()); } corpsId.add(tFee.getfCorpid()); // 查询从表数据 TFeeDo tFeeDo = new TFeeDo(); tFeeDo.setfPid(fId); List tFeeDoList= tFeeDoMapper.selectTFeeDoList(tFeeDo); List> feeDoList=new ArrayList<>(); if (StringUtils.isNotEmpty(tFeeDoList)) { for (TFeeDo fees : tFeeDoList) { Map map1 = new HashMap<>(); feesId.add(fees.getfFeeid()); // 查询主表 TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(fees.getfSrcpid()); // 费用名称 TFees tFees= tFeesMapper.selectTFeesById(fees.getfFeeid()); // 费用表数据 TWarehousebillsfees tWarehousebillsfees = tWarehousebillsfeesMapper.selectTWarehousebillsfeesById(fees.getfSrcid()); // 字典宝 SysDictData sysDictData =new SysDictData(); sysDictData.setDictType("data_unitfees"); sysDictData.setDictValue(String.valueOf(tWarehousebillsfees.getfFeeunitid())); sysDictData.setStatus("0"); List sysDictDataList = iSysDictDataService.selectDictDataList(sysDictData); List sysDictDataListIn = new ArrayList<>(); SysDictData sysDictDataIn =new SysDictData(); if(tWarehousebillsfees.getfBilltype().equals("SJRK")){ sysDictData.setDictType("st_in_type"); sysDictData.setDictValue(String.valueOf(tWarehousebillsfees.getfFeeunitid())); sysDictData.setStatus("0"); sysDictDataListIn = iSysDictDataService.selectDictDataList(sysDictData); } else if (tWarehousebillsfees.getfBilltype().equals("SJCK")){ sysDictData.setDictType("st_out_type"); sysDictData.setDictValue(String.valueOf(tWarehousebillsfees.getfFeeunitid())); sysDictData.setStatus("0"); sysDictDataListIn = iSysDictDataService.selectDictDataList(sysDictData); } else if (tWarehousebillsfees.getfBilltype().equals("HQZY")){ sysDictData.setDictType("st_trans_type"); sysDictData.setDictValue(String.valueOf(tWarehousebillsfees.getfFeeunitid())); sysDictData.setStatus("0"); sysDictDataListIn = iSysDictDataService.selectDictDataList(sysDictData); } map1.put("fId",fees.getfId()); map1.put("fSrcid",fees.getfSrcid()); map1.put("fSrcpid",fees.getfSrcpid()); map1.put("fMblno",tWarehousebillsfees.getfMblno()); map1.put("fBscorpno",tWarehousebills.getfBscorpno()); map1.put("fProductName",tWarehousebillsfees.getfProductName()); map1.put("fBsdate",tWarehousebillsfees.getfBsdate()); map1.put("fFeeid",fees.getfFeeid()); map1.put("fFeeName",tFees.getfName()); map1.put("fSrcdc",fees.getfSrcdc()); map1.put("fAmt",fees.getfAmt()); map1.put("fAmtdr",fees.getfAmtdr()); map1.put("fRemarks",fees.getfRemarks()); map1.put("srcBillNo",tWarehousebillsfees.getSrcId()); map1.put("fMarks",tWarehousebillsfees.getfMarks()); map1.put("fChargedate",tWarehousebillsfees.getfChargedate()); map1.put("fBillingDeadline",tWarehousebillsfees.getfBillingDeadline()); map1.put("fBillingDays",tWarehousebillsfees.getfBillingDays()); map1.put("fInventoryDays",tWarehousebillsfees.getfInventoryDays()); map1.put("fFeeunitid",sysDictDataList.get(0).getDictLabel()); map1.put("fQty",tWarehousebillsfees.getfQty()); map1.put("fUnitprice",tWarehousebillsfees.getfUnitprice()); map1.put("fBusinessType",sysDictDataListIn.get(0).getDictLabel()); if(tWarehousebills.getfBilltype().equals("SJRK")){ map1.put("fBilltype","入库"); } else if(tWarehousebills.getfBilltype().equals("SJCK")){ map1.put("fBilltype","出库"); } else if(tWarehousebills.getfBilltype().equals("CKDB")){ map1.put("fBilltype","调拨"); } else if(tWarehousebills.getfBilltype().equals("HQZY")){ map1.put("fBilltype","货权转移"); } feeDoList.add(map1); } } List corpsList = new ArrayList<>(); List corpsIdList = StringUtils.integerDeduplication(corpsId); for (Long corpId : corpsIdList) { TCorps corps = tCorpsMapper.selectTCorpsById(corpId); if (StringUtils.isNotNull(corps)) { corpsList.add(corps); } } List feesList = new ArrayList<>(); List longList = StringUtils.integerDeduplication(feesId); for (Long fees : longList) { TFees tFees = tFeesMapper.selectTFeesById(fees); if (StringUtils.isNotNull(tFees)) { feesList.add(tFees); } } map.put("tFee",tFee); map.put("corps",corpsList); map.put("feesList", feesList); map.put("feeDoList",feeDoList); return map; } /** * 查询财务数据主列表 * * @param tFee 财务数据主 * @return 财务数据主 */ @Override public List selectTFeeList(TFee tFee) { return tFeeMapper.selectTFeeList(tFee); } @Override public List> selectTFeeList1(TFee tFee) { return tFeeMapper.selectTFeeList1(tFee); } /** * 新增财务数据主 * * @param tFee 财务数据主 * @return 结果 */ @Override public int insertTFee(TFee tFee) { tFee.setCreateTime(DateUtils.getNowDate()); return tFeeMapper.insertTFee(tFee); } /** * 新增对账 、收费、 * @param tfee * @param tfeeDo * @param loginUser * @param fBilltype * @return */ @Override @Transactional public AjaxResult insertTFeeTFeeDo(String tfee, String tfeeDo, LoginUser loginUser, String fBilltype) { Long fPid = null; Map map = new HashMap<>(); TFee tFee = JSONArray.parseObject(tfee, TFee.class); if (StringUtils.isNull(tFee.getfId())) { // 如果是新数据 tFee.setCreateBy(loginUser.getUser().getUserName()); tFee.setCreateTime(new Date()); tFee.setfDeptid(loginUser.getUser().getDeptId()); tFee.setfBilltype(fBilltype); // 业务编码 Date time = new Date(); String billNo = billnoSerialServiceImpl.getBillNo(fBilltype, time); tFee.setfBillno(billNo); tFeeMapper.insertTFee(tFee); fPid = tFee.getfId(); } else { fPid = tFee.getfId(); tFee.setUpdateBy(loginUser.getUser().getUserName()); tFee.setUpdateTime(new Date()); tFeeMapper.updateTFee(tFee); // 删除从表 tFeeDoMapper.deleteByFPid(fPid); } // 财务从表 if (StringUtils.isNotNull(tfeeDo)) { JSONArray jsonDrArray = JSONArray.parseArray(tfeeDo); List tFeeDoList = JSONObject.parseArray(jsonDrArray.toJSONString(), TFeeDo.class); for (TFeeDo tFeeDo : tFeeDoList) { tFeeDo.setfPid(fPid); tFeeDo.setCreateBy(loginUser.getUser().getUserName()); tFeeDo.setCreateTime(new Date()); tFeeDoMapper.insertTFeeDo(tFeeDo); } } map.put("tFee", tFee); return AjaxResult.success("成功", map); } /** * 修改财务数据主 * * @param tFee 财务数据主 * @return 结果 */ @Override public int updateTFee(TFee tFee) { tFee.setUpdateTime(DateUtils.getNowDate()); return tFeeMapper.updateTFee(tFee); } /** * 批量删除财务数据主 * * @param fIds 需要删除的财务数据主ID * @return 结果 */ @Override public int deleteTFeeByIds(Long[] fIds) { // 取出业务编号、 放入 billno_del for (Long id : fIds) { // 1、查询主表信息 TFee tFee = tFeeMapper.selectTFeeById(id); // 2、业务编号、客存编号 放入 billno_del BillnoDel billnoDel = new BillnoDel(); billnoDel.setBillType(tFee.getfBilltype()); billnoDel.setBillNo(tFee.getfBillno()); billnoDelMapper.insertBillnoDel(billnoDel); } return tFeeMapper.deleteTFeeByIds(fIds); } /** * 删除财务数据主信息 * * @param fId 财务数据主ID * @return 结果 */ @Override public int deleteTFeeById(Long fId) { return tFeeMapper.deleteTFeeById(fId); } @Override public List> warehouseBillsFeesList(TWareHouseFees tWareHouseFees,String billsType) { List> maps =new ArrayList>(); Map map = new HashMap<>(); map.put("tWareHouseFees", tWareHouseFees); List> mapList =new ArrayList<>(); if(billsType.equals("DZ")){ mapList = tFeeMapper.warehouseBillsFeesListAccamount(map); } else{ mapList = tFeeMapper.warehouseBillsFeesList(map); /*if(tWareHouseFees.getfStatementNo()!=null && !tWareHouseFees.getfStatementNo().equals("")){ mapList = tFeeMapper.warehouseBillsFeesListAccamount(map); }else { }*/ } return mapList; } @Override public List> warehouseBillsFeesList(TWareHouseFees tWareHouseFees) { return tFeeMapper.warehouseBillsFeesList1(tWareHouseFees); } @Override public List> warehouseBillsFeesProfitList(TWareHouseFees tWareHouseFees) { return tFeeMapper.warehouseBillsFeesProfitList(tWareHouseFees); } public static BigDecimal calculation1(String fTotalgross, String fGrossweightblc) { BigDecimal num1 = new BigDecimal(fTotalgross); BigDecimal num2 = new BigDecimal(fGrossweightblc); BigDecimal result = num1.subtract(num2); return result.setScale(2, BigDecimal.ROUND_HALF_UP); } @Override @Transactional public AjaxResult confirm(String tfee, String tfeeDo, LoginUser loginUser, String fBilltype) { TFee tFee = JSONArray.parseObject(tfee, TFee.class); tFee.setfBillstatus("4"); if (StringUtils.isNull(tFee.getfId())) { // 如果是新数据 tFee.setCreateBy(loginUser.getUser().getUserName()); tFee.setfDeptid(loginUser.getUser().getDeptId()); tFee.setfBilltype(fBilltype); // 业务编码 Date time = new Date(); String billNo = billnoSerialServiceImpl.getBillNo(fBilltype, time); tFee.setfBillno(billNo); tFeeMapper.insertTFee(tFee); } else { tFee.setUpdateBy(loginUser.getUser().getUserName()); tFee.setUpdateTime(new Date()); tFeeMapper.updateTFee(tFee); // 删除从表 tFeeDoMapper.deleteByFPid(tFee.getfId()); } // 财务从表 if (StringUtils.isNotNull(tfeeDo) && !"[]".equals(tfeeDo)) { JSONArray jsonDrArray = JSONArray.parseArray(tfeeDo); List tFeeDoList = JSONObject.parseArray(jsonDrArray.toJSONString(), TFeeDo.class); for (TFeeDo tFeeDo : tFeeDoList) { tFeeDo.setfPid(tFee.getfId()); tFeeDo.setCreateBy(loginUser.getUser().getUserName()); tFeeDo.setCreateTime(new Date()); tFeeDoMapper.insertTFeeDo(tFeeDo); } } // 这里加个判断取系统参数来确定是否需要启用审批流 String key = ""; boolean isApprove = false; long actId = 0L; if ("DZ".equals(fBilltype)) { actId = 210L; key = "warehouse.contrast.ApprovalFlow"; } else if ("SF".equals(fBilltype)) { actId = 220L; key = "warehouse.charge.ApprovalFlow"; } else if ("FF".equals(fBilltype)) { actId = 230L; key = "warehouse.payment.ApprovalFlow"; } SysConfig sysConfig = sysConfigMapper.checkConfigKeyUnique(key); if (StringUtils.isNull(sysConfig)) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("系统参数异常,未找到开启审批流参数"); } if ("0".equals(sysConfig.getConfigValue())) { isApprove = true; } if (isApprove) { AuditItems auditItems = new AuditItems(); auditItems.setLevelId(0L); auditItems.setBillId(tFee.getfId()); auditItems.setActId(actId); auditItems.setIffinalItem("F"); auditItems.setBillNo(tFee.getfBillno()); // 业务编号 auditItems.setRefno1(String.valueOf(tFee.getfCorpid())); // 货权方 auditItems.setRefno2(tFee.getfBilltype());// 财务类型 auditItems.setRefno3(tFee.gettMblno());// 提单号 auditItems.setSendUserId(loginUser.getUser().getUserId()); auditItems.setSendName(loginUser.getUsername()); auditItems.setSendTime(new Date()); auditItems.setAuditUserId(loginUser.getUser().getUserId()); auditItems.setAuditItem(new Date()); auditItems.setAuditOpTime(new Date()); auditItems.setAuditMsg("提交"); auditItems.setAuditStatus("O"); AjaxResult approvalFlow = auditItemsService.createApprovalFlow(auditItems); Long code = Long.valueOf(String.valueOf(approvalFlow.get("code"))).longValue(); if (code.equals(500L)) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } return approvalFlow; }else { if (StringUtils.isNotNull(tfeeDo) && !"[]".equals(tfeeDo)) { JSONArray jsonDrArray = JSONArray.parseArray(tfeeDo); List tFeeDoList = JSONObject.parseArray(jsonDrArray.toJSONString(), TFeeDo.class); for (TFeeDo tFeeDo : tFeeDoList) { // 跟新费用明细 int m = updateBillsFees(tFee.getfId(),tFeeDo,fBilltype); if (m == 0) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("更新费用明细失败"); } } } AjaxResult ajaxResult = tfeeFollow(tFee.getfId(), 6L); Long code = Long.valueOf(String.valueOf(ajaxResult.get("code"))).longValue(); return ajaxResult; } } /** * 根据财务主表id 更新对应明细表状态 * * @param fPid 财务主表id * @return 结果 */ @Transactional public AjaxResult tfeeFollow(Long fPid, long fettle) { if (StringUtils.isNull(fPid)) { return AjaxResult.error("财务更新状态未找到主表信息,请与管理员联系"); } TFee tFee = new TFee(); tFee.setfId(fPid); tFee.setfBillstatus(String.valueOf(fettle)); int tFeeUpdateResult = tFeeMapper.updateTFee(tFee); if (tFeeUpdateResult <= 0) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("更新财务明细状态失败,请联系管理员"); } try{ int itemUpdateResult = tFeeDoMapper.tfeeDoFollowUpdate(fPid,fettle); } catch (Exception exception){ return AjaxResult.error("更新财务明细状态失败,请联系管理员"); } return AjaxResult.success(); } @Transactional public AjaxResult billsfeesFollow(Long fPid) { if (StringUtils.isNull(fPid)) { return AjaxResult.error("费用明细更新状态未找到主表信息,请与管理员联系"); } TFee tFee=tFeeMapper.selectTFeeById(fPid); // 查询从表数据 TFeeDo tFeeDo = new TFeeDo(); tFeeDo.setfPid(fPid); List tFeeDoList= tFeeDoMapper.selectTFeeDoList(tFeeDo); for (TFeeDo tFeeDo1 : tFeeDoList) { // 跟新费用明细 int m = updateBillsFees(fPid,tFeeDo1,tFee.getfBilltype()); if (m == 0) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("更新费用明细失败"); } } return AjaxResult.success(); } @Override @Transactional public AjaxResult revoke(String tfee, String tfeeDo, LoginUser loginUser, String fBilltype) { // 更新 主表、从表 TFee tFee = JSONArray.parseObject(tfee, TFee.class); tFee.setUpdateBy(loginUser.getUser().getUserName()); tFee.setUpdateTime(new Date()); tFeeMapper.updateTFee(tFee); // 删除从表 tFeeDoMapper.deleteByFPid(tFee.getfId()); // 财务从表 if (StringUtils.isNotNull(tfeeDo)) { JSONArray jsonDrArray = JSONArray.parseArray(tfeeDo); List tFeeDoList = JSONObject.parseArray(jsonDrArray.toJSONString(), TFeeDo.class); for (TFeeDo tFeeDo : tFeeDoList) { tFeeDo.setfPid(tFee.getfId()); tFeeDo.setCreateBy(loginUser.getUser().getUserName()); tFeeDo.setCreateTime(new Date()); tFeeDoMapper.insertTFeeDo(tFeeDo); // 跟新费用明细 int m = updateBillsFees(tFee.getfId(),tFeeDo,fBilltype); if (m == 0) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("更新费用明细失败"); } } } return AjaxResult.success(); } @Override public AjaxResult queryRemove(Long fId) { TFee tFee=tFeeMapper.selectTFeeById(fId); TFeeDo tFeeDo = new TFeeDo(); tFeeDo.setfPid(tFee.getfId()); List tFeeDoList= tFeeDoMapper.selectTFeeDoList(tFeeDo); if( StringUtils.isNull(tFee)){ return AjaxResult.success("0"); } else if(StringUtils.isNotNull(tFee) && StringUtils.isEmpty(tFeeDoList) ){ return AjaxResult.success("1"); } else { return AjaxResult.success("2"); } } @Override public List selectTWarehousebillsItemsList(Long fId) { return tFeeMapper.selectTWarehousebillsItemsList(fId); } @Override public String findCtrlcorpid(Long fId) { TFee tFee=tFeeMapper.selectTFeeById(fId); String exportName = tFee.getfCtrlcorpid()+"-"+tFee.getfBillno(); return exportName; } /** * 更新费用明细 * @param fid * @param tFeeDo * @param billsType * @return */ @Transactional public int updateBillsFees(Long fid,TFeeDo tFeeDo,String billsType){ // 查询从表数据 TFee tFee=tFeeMapper.selectTFeeById(fid); if(billsType.equals("SF") || billsType.equals("FF")){ billsType="DC"; } Map map = new HashMap<>(); map.put("tFee", tFee); map.put("billType", billsType); map.put("tFeeDo", tFeeDo); return tWarehousebillsfeesMapper.updateTWarehousebillsfee(map); } }