package com.ruoyi.anpin.service.impl; import java.util.*; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.ruoyi.anpin.domain.TCostManagement; import com.ruoyi.anpin.domain.TCostManagementItem; import com.ruoyi.anpin.mapper.TCostManagementItemMapper; import com.ruoyi.anpin.mapper.TCostManagementMapper; import com.ruoyi.anpin.service.ITCostManagementService; import com.ruoyi.approvalFlow.domain.AuditItems; import com.ruoyi.approvalFlow.mapper.AuditItemsMapper; import com.ruoyi.approvalFlow.service.impl.AuditItemsServiceImpl; 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.model.LoginUser; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.SysConfig; import com.ruoyi.system.mapper.SysConfigMapper; import com.ruoyi.system.mapper.SysDeptMapper; import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.warehouseBusiness.domain.TEnclosure; import com.ruoyi.warehouseBusiness.mapper.TEnclosureMapper; import com.ruoyi.warehouseBusiness.service.impl.BillnoSerialServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.interceptor.TransactionAspectSupport; /** * 费用管理Service业务层处理 * * @author ruoyi * @date 2023-03-13 */ @Service public class TCostManagementServiceImpl implements ITCostManagementService { @Autowired private TCostManagementMapper tCostManagementMapper; @Autowired private BillnoSerialServiceImpl billnoSerialServiceImpl; @Autowired private TCostManagementItemMapper tCostManagementItemMapper; @Autowired private TEnclosureMapper tEnclosureMapper; @Autowired private TFeesMapper tFeesMapper; @Autowired private SysConfigMapper sysConfigMapper; @Autowired private AuditItemsServiceImpl auditItemsService; @Autowired private SysDeptMapper sysDeptMapper; @Autowired private TCorpsMapper tCorpsMapper; @Autowired private SysUserMapper userMapper; @Autowired private AuditItemsMapper auditItemsMapper; /** * 查询费用管理 * * @param fId 费用管理ID * @return 费用管理 */ @Override public Map selectTCostManagementById(Long fId) { Map map = new HashMap<>(); //查询费用管理主表数据 TCostManagement tCostManagement = tCostManagementMapper.selectTCostManagementById(fId); //获得审批流程审核人 AuditItems item = new AuditItems(); item.setBillId(tCostManagement.getfId()); item.setActId(560L); List auditItemsList = auditItemsMapper.selectAuditItemsUser(item); if (ObjectUtils.isNotNull(auditItemsList)){ //提交人 tCostManagement.setPresenterName(userMapper.selectUserById(auditItemsList.get(0).getAuditUserId()).getNickName()); if (auditItemsList.size() >= 2){//一级审核人 tCostManagement.setFirstLevelReviewerName(userMapper.selectUserById(auditItemsList.get(1).getAuditUserId()).getNickName()); } if (auditItemsList.size() >= 3){//二级审核人 tCostManagement.setSecondaryReviewerName(userMapper.selectUserById(auditItemsList.get(2).getAuditUserId()).getNickName()); } } //查询明细信息 TCostManagementItem tCostManagementItem = new TCostManagementItem(); tCostManagementItem.setfPid(tCostManagement.getfId()); List itemList = tCostManagementItemMapper.selectTCostManagementItemList(tCostManagementItem); // 查询附件表数据 TEnclosure enclosure = new TEnclosure(); enclosure.setfPid(fId); enclosure.setfMainType("CostManagement"); List enclosures = tEnclosureMapper.selectTEnclosureList(enclosure); map.put("tEnclosure", enclosures); map.put("tCostManagement", tCostManagement); map.put("tCostManagementItem", itemList); return map; } /** * 查询费用管理列表 * * @param tCostManagement 费用管理 * @return 费用管理 */ @Override public List selectTCostManagementList(TCostManagement tCostManagement) { return tCostManagementMapper.selectManagementList(tCostManagement); } /** * 新增费用管理 * * @param tCostManagement 费用管理 * @return 结果 */ @Override public AjaxResult insertTCostManagement(String tCostManagement, String tCostManagementItem, String tEnclosure, LoginUser loginUser) { Map map = new HashMap<>(); TCostManagement detailed = JSONArray.parseObject(tCostManagement, TCostManagement.class); if (StringUtils.isNotNull(detailed.getfId())){ TCostManagement management = tCostManagementMapper.selectTCostManagementById(detailed.getfId()); if (management.getfBillstatus() > 0){ return AjaxResult.error("该订单已提交,请刷新页面"); } } if (ObjectUtils.isEmpty(detailed.getDeptId())){ return AjaxResult.error("部门不能为空"); } detailed.setDeptName(sysDeptMapper.selectDeptById(detailed.getDeptId()).getDeptName());//部门名称 //保存主表信息 if (StringUtils.isNull(detailed.getfId())) {// 如果是新数据 // 业务编码 String billNo = billnoSerialServiceImpl.getBillNo("FY", new Date()); detailed.setfNo(billNo); detailed.setCreateById(loginUser.getUser().getUserId()); detailed.setCreateBy(loginUser.getUser().getUserName()); detailed.setCreateTime(new Date()); detailed.setCreateDept(String.valueOf(loginUser.getUser().getDeptId())); detailed.setCreateDeptName(sysDeptMapper.selectDeptById(loginUser.getUser().getDeptId()).getDeptName()); tCostManagementMapper.insertTCostManagement(detailed); } else { detailed.setUpdateBy(loginUser.getUser().getUserName()); detailed.setUpdateTime(new Date()); tCostManagementMapper.updateTCostManagement(detailed); } //获得明细信息并保存 List itemList = new ArrayList<>(); if (StringUtils.isNotNull(tCostManagementItem) && !"[]".equals(tCostManagementItem)) { JSONArray jsonDrArray = JSONArray.parseArray(tCostManagementItem); itemList = JSONObject.parseArray(jsonDrArray.toJSONString(), TCostManagementItem.class); for (TCostManagementItem item : itemList) { if (ObjectUtils.isEmpty(item.getPersonnelId())){ return AjaxResult.error("所属人员不能为空"); }else { item.setPersonnelName(userMapper.selectUserById(item.getPersonnelId()).getNickName()); } if (ObjectUtils.isEmpty(item.getDepartmentId())){ return AjaxResult.error("所属部门不能为空"); } item.setDepartmentName(sysDeptMapper.selectDeptById(item.getDepartmentId()).getDeptName());//所属部门名称 if (ObjectUtils.isNotEmpty(item.getExpenseId())){//费用名称 item.setExpenseName(tFeesMapper.selectTFeesById(item.getExpenseId()).getfName()); } if (ObjectUtils.isNotEmpty(item.getBelongsProjectId())){//项目名称 item.setBelongsProjectName(tCorpsMapper.selectTCorpsById(item.getBelongsProjectId()).getfName()); } if (StringUtils.isNull(item.getfId())) {// 如果是新数据 item.setfPid(detailed.getfId()); item.setCreateBy(loginUser.getUser().getUserName()); item.setCreateTime(new Date()); item.setCreateDept(String.valueOf(loginUser.getUser().getDeptId())); tCostManagementItemMapper.insertTCostManagementItem(item); } else { item.setUpdateBy(loginUser.getUser().getUserName()); item.setUpdateTime(new Date()); tCostManagementItemMapper.updateTCostManagementItem(item); } } } //保存附件信息 List enclosuresList = new ArrayList<>(); if (StringUtils.isNotNull(tEnclosure) && !"[]".equals(tEnclosure)) { JSONArray jsonEnclosureArray = JSONArray.parseArray(tEnclosure); enclosuresList = JSONObject.parseArray(jsonEnclosureArray.toJSONString(), TEnclosure.class); long lineNo = 0L; for (TEnclosure enclosure : enclosuresList) { lineNo++; if (enclosure.getfId() == null) { enclosure.setfPid(detailed.getfId()); enclosure.setfLineno(lineNo); enclosure.setCreateTime(new Date()); enclosure.setCreateBy(loginUser.getUser().getUserName()); enclosure.setfMainType("CostManagement"); tEnclosureMapper.insertTEnclosure(enclosure); } else { enclosure.setUpdateBy(loginUser.getUser().getUserName()); enclosure.setUpdateTime(new Date()); enclosure.setfMainType("CostManagement"); tEnclosureMapper.updateTEnclosure(enclosure); } } } map.put("tCostManagement",detailed); map.put("tCostManagementItem", itemList); map.put("tEnclosure", enclosuresList); return AjaxResult.success("成功", map); } /** * 修改费用管理 * * @param tCostManagement 费用管理 * @return 结果 */ @Override public int updateTCostManagement(TCostManagement tCostManagement) { tCostManagement.setUpdateTime(DateUtils.getNowDate()); return tCostManagementMapper.updateTCostManagement(tCostManagement); } /** * 批量删除费用管理 * * @param fIds 需要删除的费用管理ID * @return 结果 */ @Override public int deleteTCostManagementByIds(Long[] fIds) { return tCostManagementMapper.deleteTCostManagementByIds(fIds); } /** * 删除费用管理信息 * * @param fId 费用管理ID * @return 结果 */ @Override public int deleteTCostManagementById(Long fId) { return tCostManagementMapper.deleteTCostManagementById(fId); } @Override public AjaxResult submitCostManagement(String tCostManagement, String tCostManagementItem, String tEnclosure, LoginUser loginUser, String billType) { boolean isApprove = false;//是否开启审批流 String key = "";//键 long actId = 0L;//活动id String billStatus = null; Integer i = null; Map map = new HashMap<>(); if ("FYGL".equals(billType)) { actId = 560L; key = "anPingJingYuan.costManagement.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) { billStatus = "1"; } else { billStatus = "4"; } TCostManagement detailed = JSONArray.parseObject(tCostManagement, TCostManagement.class); if (ObjectUtils.isEmpty(detailed.getDeptId())){ return AjaxResult.error("部门不能为空"); } detailed.setDeptName(sysDeptMapper.selectDeptById(detailed.getDeptId()).getDeptName());//部门名称 detailed.setfStatus(billStatus); detailed.setfBillstatus(5); detailed.setApplicantId(loginUser.getUser().getUserId()); detailed.setApplicantName(loginUser.getUser().getUserName()); detailed.setfReviewDate(new Date()); //保存主表信息 if (StringUtils.isNull(detailed.getfId())) {// 如果是新数据 // 业务编码 String billNo = billnoSerialServiceImpl.getBillNo("FY", new Date()); detailed.setfNo(billNo); detailed.setCreateById(loginUser.getUser().getUserId()); detailed.setCreateBy(loginUser.getUser().getUserName()); detailed.setCreateTime(new Date()); detailed.setCreateDept(String.valueOf(loginUser.getUser().getDeptId())); detailed.setCreateDeptName(sysDeptMapper.selectDeptById(loginUser.getUser().getDeptId()).getDeptName()); i = tCostManagementMapper.insertTCostManagement(detailed); } else { detailed.setUpdateBy(loginUser.getUser().getUserName()); detailed.setUpdateTime(new Date()); i = tCostManagementMapper.updateTCostManagement(detailed); } //获得明细信息并保存 List itemList = new ArrayList<>(); if (StringUtils.isNotNull(tCostManagementItem) && !"[]".equals(tCostManagementItem)) { JSONArray jsonDrArray = JSONArray.parseArray(tCostManagementItem); itemList = JSONObject.parseArray(jsonDrArray.toJSONString(), TCostManagementItem.class); for (TCostManagementItem item : itemList) { if (ObjectUtils.isEmpty(item.getPersonnelId())){ return AjaxResult.error("所属人员不能为空"); }else { item.setPersonnelName(userMapper.selectUserById(item.getPersonnelId()).getNickName()); } if (ObjectUtils.isEmpty(item.getDepartmentId())){ return AjaxResult.error("所属部门不能为空"); } item.setDepartmentName(sysDeptMapper.selectDeptById(item.getDepartmentId()).getDeptName());//所属部门名称 if (ObjectUtils.isNotEmpty(item.getExpenseId())){//费用名称 item.setExpenseName(tFeesMapper.selectTFeesById(item.getExpenseId()).getfName()); } if (ObjectUtils.isNotEmpty(item.getBelongsProjectId())){//项目名称 item.setBelongsProjectName(tCorpsMapper.selectTCorpsById(item.getBelongsProjectId()).getfName()); } if (StringUtils.isNull(item.getfId())) {// 如果是新数据 item.setfPid(detailed.getfId()); item.setCreateBy(loginUser.getUser().getUserName()); item.setCreateTime(new Date()); item.setCreateDept(String.valueOf(loginUser.getUser().getDeptId())); i = tCostManagementItemMapper.insertTCostManagementItem(item); } else { item.setUpdateBy(loginUser.getUser().getUserName()); item.setUpdateTime(new Date()); i = tCostManagementItemMapper.updateTCostManagementItem(item); } } } //保存附件信息 List enclosuresList = new ArrayList<>(); if (StringUtils.isNotNull(tEnclosure) && !"[]".equals(tEnclosure)) { JSONArray jsonEnclosureArray = JSONArray.parseArray(tEnclosure); enclosuresList = JSONObject.parseArray(jsonEnclosureArray.toJSONString(), TEnclosure.class); long lineNo = 0L; for (TEnclosure enclosure : enclosuresList) { lineNo++; if (enclosure.getfId() == null) { enclosure.setfPid(detailed.getfId()); enclosure.setfLineno(lineNo); enclosure.setCreateTime(new Date()); enclosure.setCreateBy(loginUser.getUser().getUserName()); enclosure.setfMainType("CostManagement"); i = tEnclosureMapper.insertTEnclosure(enclosure); } else { enclosure.setUpdateBy(loginUser.getUser().getUserName()); enclosure.setUpdateTime(new Date()); enclosure.setfMainType("CostManagement"); i = tEnclosureMapper.updateTEnclosure(enclosure); } } } if (isApprove) { AuditItems auditItems = new AuditItems(); auditItems.setLevelId(0L); auditItems.setBillId(detailed.getfId()); auditItems.setActId(actId); auditItems.setIffinalItem("F"); auditItems.setBillNo(detailed.getfNo()); // 存储业务类型(业务类型) auditItems.setRefno1(String.valueOf(itemList.get(0).getBelongsProjectId())); auditItems.setRefno2(billType); auditItems.setRefno3(detailed.getfNo()); auditItems.setSendUserId(loginUser.getUser().getUserId()); auditItems.setSendName(SecurityUtils.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); String code = approvalFlow.get("code").toString(); if ("500".equals(code)) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } return approvalFlow; } map.put("tCostManagement",detailed); map.put("tCostManagementItem", itemList); map.put("tEnclosure", enclosuresList); if (i != null && i > 0) { return AjaxResult.success("success", map); } else { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); String error = null; if (detailed.getfId() == null) { error = "费用管理请核失败,请联系管理员"; } return AjaxResult.error(error); } } /** * 获取费用管理环比分析数据 * @param expenseIds 费用名称 * @param year 年份 */ public AjaxResult costLinkAnalysis(String expenseIds, String year){ Map map = new HashMap<>(); //获得列表数据 List> list = tCostManagementMapper.costLinkAnalysis(expenseIds, year); //组装环比数据 List expenseNameList = new ArrayList<>(); List januaryList = new ArrayList<>(); List februaryList = new ArrayList<>(); List marchList = new ArrayList<>(); List aprilList = new ArrayList<>(); List mayList = new ArrayList<>(); List juneList = new ArrayList<>(); List julyList = new ArrayList<>(); List augustList = new ArrayList<>(); List septemberList = new ArrayList<>(); List octoberList = new ArrayList<>(); List novemberList = new ArrayList<>(); List decemberList = new ArrayList<>(); expenseNameList.add("费用名称"); januaryList.add("一月"); februaryList.add("二月"); marchList.add("三月"); aprilList.add("四月"); mayList.add("五月"); juneList.add("六月"); julyList.add("七月"); augustList.add("八月"); septemberList.add("九月"); octoberList.add("十月"); novemberList.add("十一月"); decemberList.add("十二月"); list.forEach(e -> { expenseNameList.add(e.get("expenseName")); januaryList.add(e.get("amount1")); februaryList.add(e.get("amount2")); marchList.add(e.get("amount3")); aprilList.add(e.get("amount4")); mayList.add(e.get("amount5")); juneList.add(e.get("amount6")); julyList.add(e.get("amount7")); augustList.add(e.get("amount8")); septemberList.add(e.get("amount9")); octoberList.add(e.get("amount10")); novemberList.add(e.get("amount11")); decemberList.add(e.get("amount12")); }); List> objectMap = new ArrayList<>(); objectMap.add(expenseNameList); objectMap.add(januaryList); objectMap.add(februaryList); objectMap.add(marchList); objectMap.add(aprilList); objectMap.add(mayList); objectMap.add(juneList); objectMap.add(julyList); objectMap.add(augustList); objectMap.add(septemberList); objectMap.add(octoberList); objectMap.add(novemberList); objectMap.add(decemberList); map.put("list", list); map.put("LinkAnalysisList", objectMap); return AjaxResult.success("成功", map); } /** * 获取费用管理同比分析数据 * @param expenseIds 费用名称 * @param currentDate 当前日期 * @param comparisonDate 对比日期 */ public AjaxResult costYOYAnalysis(String expenseIds, String currentDate, String comparisonDate){ Map map = new HashMap<>(); //获得列表数据 List> list = tCostManagementMapper.costYOYAnalysis(expenseIds, currentDate, comparisonDate); //组装环比数据 List expenseNameList = new ArrayList<>(); List currentList = new ArrayList<>(); List comparisonList = new ArrayList<>(); if (currentDate.equals(comparisonDate)){ return AjaxResult.error("当前日期与对比日期不能相同请重新选择"); } expenseNameList.add("费用名称"); currentList.add(currentDate); comparisonList.add(comparisonDate); list.forEach(e -> { expenseNameList.add(e.get("expenseName")); currentList.add(e.get("currentAmount")); comparisonList.add(e.get("comparisonAmount")); }); List> objectMap = new ArrayList<>(); objectMap.add(expenseNameList); objectMap.add(currentList); objectMap.add(comparisonList); map.put("list", list); map.put("costYOYAnalysisList", objectMap); return AjaxResult.success("成功", map); } /** * 获取利润分析环比数据 * @param corpId 项目名称 * @param year 年 */ public AjaxResult profitAnalysis(String corpId, String year){ Map map = new HashMap<>(); //获得列表数据 List> list = tCostManagementMapper.profitAnalysis(corpId, year); //组装环比数据 List expenseNameList = new ArrayList<>(); List januaryList = new ArrayList<>(); List februaryList = new ArrayList<>(); List marchList = new ArrayList<>(); List aprilList = new ArrayList<>(); List mayList = new ArrayList<>(); List juneList = new ArrayList<>(); List julyList = new ArrayList<>(); List augustList = new ArrayList<>(); List septemberList = new ArrayList<>(); List octoberList = new ArrayList<>(); List novemberList = new ArrayList<>(); List decemberList = new ArrayList<>(); expenseNameList.add("项目名称"); januaryList.add("一月"); februaryList.add("二月"); marchList.add("三月"); aprilList.add("四月"); mayList.add("五月"); juneList.add("六月"); julyList.add("七月"); augustList.add("八月"); septemberList.add("九月"); octoberList.add("十月"); novemberList.add("十一月"); decemberList.add("十二月"); list.forEach(e -> { expenseNameList.add(e.get("fname")); januaryList.add(e.get("profit1")); februaryList.add(e.get("profit2")); marchList.add(e.get("profit3")); aprilList.add(e.get("profit4")); mayList.add(e.get("profit5")); juneList.add(e.get("profit6")); julyList.add(e.get("profit7")); augustList.add(e.get("profit8")); septemberList.add(e.get("profit9")); octoberList.add(e.get("profit10")); novemberList.add(e.get("profit11")); decemberList.add(e.get("profit12")); }); List> objectMap = new ArrayList<>(); objectMap.add(expenseNameList); objectMap.add(januaryList); objectMap.add(februaryList); objectMap.add(marchList); objectMap.add(aprilList); objectMap.add(mayList); objectMap.add(juneList); objectMap.add(julyList); objectMap.add(augustList); objectMap.add(septemberList); objectMap.add(octoberList); objectMap.add(novemberList); objectMap.add(decemberList); map.put("list", list); map.put("profitAnalysisList", objectMap); return AjaxResult.success("成功", map); } }