package cn.palmte.work.service; import cn.palmte.work.bean.ApproveStatusEnum; import cn.palmte.work.bean.EstimateBean; import cn.palmte.work.bean.StatusEnum; import cn.palmte.work.bean.TypeEnum; import cn.palmte.work.model.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import top.jfunc.common.db.QueryHelper; import top.jfunc.common.db.bean.Page; import top.jfunc.common.db.utils.Pagination; import top.jfunc.common.utils.StrUtil; import java.util.Date; import java.util.Map; /** * @author xiongshiyan at 2021/10/29 , contact me with email yanshixiong@126.com or phone 15208384257 */ @Service public class ProjectService { @Autowired private Pagination pagination; @Autowired private ProjectRepository projectRepository; @Autowired private ProjectEstimateIncomeRepository projectEstimateIncomeRepository; @Autowired private ProjectEstimateCostRepository projectEstimateCostRepository; @Autowired private ProjectEstimateCostManageRepository projectEstimateCostManageRepository; private QueryHelper getQueryHelper(Map searchInfo, int pageNumber, int pageSize) { /*"CASE p.type WHEN 1 THEN '工程集成类' WHEN 2 THEN '设备集成类' WHEN 3 THEN '战略合作类' ELSE '未知' AS typeDesc," + "CASE p.status WHEN 0 THEN '草稿' WHEN 1 THEN '项目创建' WHEN 5 THEN '概算完成' WHEN 10 THEN '预算完成' WHEN 15 THEN '结算中' WHEN 20 THEN '决算完成' ELSE '未知' AS statusDesc," + "CASE p.approve_status WHEN 0 THEN '待审核' WHEN 1 THEN '审核通过' WHEN 2 THEN '审核不通过' ELSE '未知' AS approveStatusDesc," + */ QueryHelper queryHelper = new QueryHelper("SELECT p.*","project","p"); if(StrUtil.isNotEmpty(searchInfo.get("status")) && !"-1".equals(searchInfo.get("status"))){ queryHelper.addCondition("p.status=?", Integer.parseInt(searchInfo.get("status"))); } if(StrUtil.isNotEmpty(searchInfo.get("approveStatus")) && !"-1".equals(searchInfo.get("approveStatus"))){ queryHelper.addCondition("p.approve_status=?", Integer.parseInt(searchInfo.get("approveStatus"))); } if(StrUtil.isNotEmpty(searchInfo.get("deptId")) && !"-1".equals(searchInfo.get("deptId"))){ queryHelper.addCondition("p.dept_id=?", Integer.parseInt(searchInfo.get("deptId"))); } if(StrUtil.isNotEmpty(searchInfo.get("type")) && !"-1".equals(searchInfo.get("type"))){ queryHelper.addCondition("p.type=?", Integer.parseInt(searchInfo.get("type"))); } queryHelper.addCondition(StrUtil.isNotEmpty(searchInfo.get("name")),"p.name LIKE ?", "%"+searchInfo.get("name")+"%"); queryHelper.addCondition(StrUtil.isNotEmpty(searchInfo.get("creatorName")),"p.creator_name LIKE ?", "%"+searchInfo.get("creatorName")+"%"); /** * 只选择了一个时间的情况,就项目时间包括这个时间的 */ if(StrUtil.isNotEmpty(searchInfo.get("startDate")) && StrUtil.isEmpty(searchInfo.get("endDate"))){ String time = searchInfo.get("startDate") + " 00:00:00"; queryHelper.addCondition("p.start_date<=? AND p.end_date>=?", time, time); } if(StrUtil.isNotEmpty(searchInfo.get("endDate")) && StrUtil.isEmpty(searchInfo.get("startDate"))){ String time = searchInfo.get("endDate") + " 00:00:00"; queryHelper.addCondition("p.start_date<=? AND p.end_date>=?", time, time); } /** * 两个时间都选了,则包含项目时间 */ if(StrUtil.isNotEmpty(searchInfo.get("startDate")) && StrUtil.isNotEmpty(searchInfo.get("endDate"))){ String startTime = searchInfo.get("startDate") + " 00:00:00"; String endTime = searchInfo.get("endDate") + " 23:59:59"; queryHelper.addCondition("p.start_date>=? AND p.end_date<=?", startTime, endTime); } return queryHelper; } public Page list(Map searchInfo, int pageNumber, int pageSize){ QueryHelper queryHelper = getQueryHelper(searchInfo, pageNumber, pageSize); return pagination.paginate(queryHelper.getSql(), Project.class,pageNumber,pageSize); } /** * 概算保存项目 */ public Project estimateSave(Project project, EstimateBean estimateBean, Admin admin) { project.setTypeDesc(TypeEnum.parseType(project.getType()).getTypeDesc()); project.setStatusDesc(StatusEnum.parseStatus(project.getStatus()).getStatusDesc()); project.setApproveStatus(ApproveStatusEnum.APPROVAL_PENDING.getApproveStatus()); project.setApproveStatusDesc(ApproveStatusEnum.APPROVAL_PENDING.getApproveStatusDesc()); project.setCreatorId(admin.getId()); project.setCreatorName(admin.getUserName()); //TODO 审核人通过计算得到 project.setApproveId(0); project.setApproveName(""); //TODO 获取登录人的部门信息 project.setDeptId(admin.getId()); project.setDeptName(""); project.setCreateTime(new Date()); project = projectRepository.saveAndFlush(project); //收入记录 income(project, estimateBean); //成本记录 cost(project, estimateBean); //管理记录 costManage(project, estimateBean); return project; } private void cost(Project project, EstimateBean estimateBean) { ProjectEstimateCost projectEstimateCostDevice = new ProjectEstimateCost(); projectEstimateCostDevice.setProjectId(project.getId()); projectEstimateCostDevice.setFee(1); projectEstimateCostDevice.setType(1); projectEstimateCostDevice.setCostTaxInclude(estimateBean.getCostPurchaseDeviceTaxInclude()); projectEstimateCostDevice.setCostTaxExclude(estimateBean.getCostPurchaseDeviceTaxExclude()); projectEstimateCostRepository.saveAndFlush(projectEstimateCostDevice); ProjectEstimateCost projectEstimateCostBuild = new ProjectEstimateCost(); projectEstimateCostBuild.setProjectId(project.getId()); projectEstimateCostBuild.setFee(1); projectEstimateCostBuild.setType(2); projectEstimateCostBuild.setCostTaxInclude(estimateBean.getCostPurchaseBuildTaxInclude()); projectEstimateCostBuild.setCostTaxExclude(estimateBean.getCostPurchaseBuildTaxExclude()); projectEstimateCostRepository.saveAndFlush(projectEstimateCostBuild); ProjectEstimateCost projectEstimateCostService = new ProjectEstimateCost(); projectEstimateCostService.setProjectId(project.getId()); projectEstimateCostService.setFee(1); projectEstimateCostService.setType(3); projectEstimateCostService.setCostTaxInclude(estimateBean.getCostPurchaseServiceTaxInclude()); projectEstimateCostService.setCostTaxExclude(estimateBean.getCostPurchaseServiceTaxExclude()); projectEstimateCostRepository.saveAndFlush(projectEstimateCostService); ProjectEstimateCost projectEstimateCostOther = new ProjectEstimateCost(); projectEstimateCostOther.setProjectId(project.getId()); projectEstimateCostOther.setFee(1); projectEstimateCostOther.setType(4); projectEstimateCostOther.setCostTaxInclude(estimateBean.getCostPurchaseOtherTaxInclude()); projectEstimateCostOther.setCostTaxExclude(estimateBean.getCostPurchaseOtherTaxExclude()); projectEstimateCostRepository.saveAndFlush(projectEstimateCostOther); ProjectEstimateCost projectEstimateCostProject = new ProjectEstimateCost(); projectEstimateCostProject.setProjectId(project.getId()); projectEstimateCostProject.setFee(2); projectEstimateCostProject.setType(5); projectEstimateCostProject.setCostTaxInclude(estimateBean.getCostProjectManageTaxInclude()); projectEstimateCostProject.setCostTaxExclude(estimateBean.getCostProjectManageTaxExclude()); projectEstimateCostRepository.saveAndFlush(projectEstimateCostProject); ProjectEstimateCost projectEstimateCostOtherOther = new ProjectEstimateCost(); projectEstimateCostOtherOther.setProjectId(project.getId()); projectEstimateCostOtherOther.setFee(3); projectEstimateCostOtherOther.setType(6); projectEstimateCostOtherOther.setCostTaxInclude(estimateBean.getCostOtherOtherTaxInclude()); projectEstimateCostOtherOther.setCostTaxExclude(estimateBean.getCostOtherOtherTaxExclude()); projectEstimateCostRepository.saveAndFlush(projectEstimateCostOtherOther); } private void costManage(Project project, EstimateBean estimateBean) { ProjectEstimateCostManage projectEstimateCostZijin = new ProjectEstimateCostManage(); projectEstimateCostZijin.setProjectId(project.getId()); projectEstimateCostZijin.setType(1); projectEstimateCostZijin.setIncomeTaxExclude(estimateBean.getCostCompanyManageTaxExclude()); projectEstimateCostManageRepository.saveAndFlush(projectEstimateCostZijin); ProjectEstimateCostManage projectEstimateCostManage = new ProjectEstimateCostManage(); projectEstimateCostManage.setProjectId(project.getId()); projectEstimateCostManage.setType(2); projectEstimateCostManage.setIncomeTaxExclude(estimateBean.getCostCompanyManageTaxExclude()); projectEstimateCostManageRepository.saveAndFlush(projectEstimateCostManage); } private void income(Project project, EstimateBean estimateBean) { ProjectEstimateIncome projectEstimateIncomeDevice = new ProjectEstimateIncome(); projectEstimateIncomeDevice.setProjectId(project.getId()); projectEstimateIncomeDevice.setType(1); projectEstimateIncomeDevice.setIncomeTaxInclude(estimateBean.getIncomeDeviceTaxInclude()); projectEstimateIncomeDevice.setIncomeTaxExclude(estimateBean.getIncomeDeviceTaxExclude()); projectEstimateIncomeRepository.saveAndFlush(projectEstimateIncomeDevice); ProjectEstimateIncome projectEstimateIncomeEngineer = new ProjectEstimateIncome(); projectEstimateIncomeEngineer.setProjectId(project.getId()); projectEstimateIncomeEngineer.setType(2); projectEstimateIncomeEngineer.setIncomeTaxInclude(estimateBean.getIncomeEngineerTaxInclude()); projectEstimateIncomeEngineer.setIncomeTaxExclude(estimateBean.getIncomeEngineerTaxExclude()); projectEstimateIncomeRepository.saveAndFlush(projectEstimateIncomeEngineer); ProjectEstimateIncome projectEstimateIncomeService = new ProjectEstimateIncome(); projectEstimateIncomeService.setProjectId(project.getId()); projectEstimateIncomeService.setType(3); projectEstimateIncomeService.setIncomeTaxInclude(estimateBean.getIncomeServiceTaxInclude()); projectEstimateIncomeService.setIncomeTaxExclude(estimateBean.getIncomeServiceTaxExclude()); projectEstimateIncomeRepository.saveAndFlush(projectEstimateIncomeService); } }