2021-10-29 10:15:36 +00:00
package cn.palmte.work.service ;
2021-11-01 11:00:53 +00:00
import cn.palmte.work.bean.ApproveStatusEnum ;
import cn.palmte.work.bean.EstimateBean ;
import cn.palmte.work.bean.StatusEnum ;
import cn.palmte.work.bean.TypeEnum ;
2021-11-01 12:07:02 +00:00
import cn.palmte.work.model.* ;
2021-10-29 10:15:36 +00:00
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.stereotype.Service ;
2021-11-01 13:09:10 +00:00
import org.springframework.transaction.annotation.Transactional ;
2021-10-29 10:15:36 +00:00
import top.jfunc.common.db.QueryHelper ;
import top.jfunc.common.db.bean.Page ;
import top.jfunc.common.db.utils.Pagination ;
2021-11-01 13:09:10 +00:00
import top.jfunc.common.utils.CollectionUtil ;
2021-10-29 10:15:36 +00:00
import top.jfunc.common.utils.StrUtil ;
2021-11-01 11:00:53 +00:00
import java.util.Date ;
2021-11-01 13:09:10 +00:00
import java.util.List ;
2021-10-29 10:15:36 +00:00
import java.util.Map ;
2021-11-01 13:09:10 +00:00
import java.util.stream.Collectors ;
2021-10-29 10:15:36 +00:00
/ * *
* @author xiongshiyan at 2021 / 10 / 29 , contact me with email yanshixiong @ 126. com or phone 15208384257
* /
@Service
public class ProjectService {
@Autowired
private Pagination pagination ;
2021-11-01 11:00:53 +00:00
@Autowired
private ProjectRepository projectRepository ;
2021-11-01 12:07:02 +00:00
@Autowired
private ProjectEstimateIncomeRepository projectEstimateIncomeRepository ;
@Autowired
private ProjectEstimateCostRepository projectEstimateCostRepository ;
@Autowired
private ProjectEstimateCostManageRepository projectEstimateCostManageRepository ;
2021-10-29 10:15:36 +00:00
private QueryHelper getQueryHelper ( Map < String , String > 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" ) ;
2021-11-01 03:22:37 +00:00
if ( StrUtil . isNotEmpty ( searchInfo . get ( "status" ) ) & & ! "-1" . equals ( searchInfo . get ( "status" ) ) ) {
queryHelper . addCondition ( "p.status=?" , Integer . parseInt ( searchInfo . get ( "status" ) ) ) ;
2021-10-29 10:15:36 +00:00
}
2021-11-01 03:22:37 +00:00
if ( StrUtil . isNotEmpty ( searchInfo . get ( "approveStatus" ) ) & & ! "-1" . equals ( searchInfo . get ( "approveStatus" ) ) ) {
2021-11-02 04:20:20 +00:00
int approveStatus = Integer . parseInt ( searchInfo . get ( "approveStatus" ) ) ;
//四种状态满足其一即可
queryHelper . addCondition ( "(p.approve_status_estimate=? OR p.approve_status_budget=? OR p.approve_status_settle=? OR p.approve_status_final=?)" , approveStatus , approveStatus , approveStatus , approveStatus ) ;
2021-10-29 10:15:36 +00:00
}
2021-11-01 03:22:37 +00:00
if ( StrUtil . isNotEmpty ( searchInfo . get ( "deptId" ) ) & & ! "-1" . equals ( searchInfo . get ( "deptId" ) ) ) {
queryHelper . addCondition ( "p.dept_id=?" , Integer . parseInt ( searchInfo . get ( "deptId" ) ) ) ;
2021-10-29 10:15:36 +00:00
}
2021-11-01 03:22:37 +00:00
if ( StrUtil . isNotEmpty ( searchInfo . get ( "type" ) ) & & ! "-1" . equals ( searchInfo . get ( "type" ) ) ) {
queryHelper . addCondition ( "p.type=?" , Integer . parseInt ( searchInfo . get ( "type" ) ) ) ;
2021-10-29 10:15:36 +00:00
}
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" ) + "%" ) ;
/ * *
* 只 选 择 了 一 个 时 间 的 情 况 , 就 项 目 时 间 包 括 这 个 时 间 的
* /
2021-11-01 11:00:53 +00:00
if ( StrUtil . isNotEmpty ( searchInfo . get ( "startDate" ) ) & & StrUtil . isEmpty ( searchInfo . get ( "endDate" ) ) ) {
String time = searchInfo . get ( "startDate" ) + " 00:00:00" ;
2021-11-01 03:22:37 +00:00
queryHelper . addCondition ( "p.start_date<=? AND p.end_date>=?" , time , time ) ;
2021-10-29 10:15:36 +00:00
}
2021-11-01 11:00:53 +00:00
if ( StrUtil . isNotEmpty ( searchInfo . get ( "endDate" ) ) & & StrUtil . isEmpty ( searchInfo . get ( "startDate" ) ) ) {
String time = searchInfo . get ( "endDate" ) + " 00:00:00" ;
2021-11-01 03:22:37 +00:00
queryHelper . addCondition ( "p.start_date<=? AND p.end_date>=?" , time , time ) ;
2021-10-29 10:15:36 +00:00
}
/ * *
* 两 个 时 间 都 选 了 , 则 包 含 项 目 时 间
* /
2021-11-01 11:00:53 +00:00
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" ;
2021-11-01 03:22:37 +00:00
queryHelper . addCondition ( "p.start_date>=? AND p.end_date<=?" , startTime , endTime ) ;
2021-10-29 10:15:36 +00:00
}
return queryHelper ;
}
public Page < Project > list ( Map < String , String > searchInfo , int pageNumber , int pageSize ) {
QueryHelper queryHelper = getQueryHelper ( searchInfo , pageNumber , pageSize ) ;
return pagination . paginate ( queryHelper . getSql ( ) , Project . class , pageNumber , pageSize ) ;
}
2021-11-01 11:00:53 +00:00
/ * *
2021-11-01 13:09:10 +00:00
* 新 增 概 算 保 存 项 目
2021-11-01 11:00:53 +00:00
* /
2021-11-01 13:09:10 +00:00
@Transactional ( rollbackFor = RuntimeException . class )
2021-11-02 04:20:20 +00:00
public Project estimateAddSave ( Project project , EstimateBean estimateBean , Admin admin , ApproveStatusEnum approveStatusEnum ) {
2021-11-01 11:00:53 +00:00
project . setTypeDesc ( TypeEnum . parseType ( project . getType ( ) ) . getTypeDesc ( ) ) ;
2021-11-02 04:20:20 +00:00
project . setStatus ( StatusEnum . CREATED . getStatus ( ) ) ;
project . setStatusDesc ( StatusEnum . CREATED . getStatusDesc ( ) ) ;
project . setApproveStatusEstimate ( approveStatusEnum . getApproveStatus ( ) ) ;
2021-11-01 11:00:53 +00:00
project . setCreatorId ( admin . getId ( ) ) ;
project . setCreatorName ( admin . getUserName ( ) ) ;
2021-11-02 04:20:20 +00:00
project . setApproveId ( null ) ;
2021-11-01 11:00:53 +00:00
project . setApproveName ( "" ) ;
//TODO 获取登录人的部门信息
project . setDeptId ( admin . getId ( ) ) ;
2021-11-02 04:20:20 +00:00
project . setDeptName ( "工程部" ) ;
2021-11-01 11:00:53 +00:00
project . setCreateTime ( new Date ( ) ) ;
project = projectRepository . saveAndFlush ( project ) ;
2021-11-01 12:07:02 +00:00
//收入记录
income ( project , estimateBean ) ;
//成本记录
cost ( project , estimateBean ) ;
//管理记录
costManage ( project , estimateBean ) ;
2021-11-02 04:20:20 +00:00
2021-11-01 11:00:53 +00:00
return project ;
}
2021-11-01 12:07:02 +00:00
2021-11-01 13:09:10 +00:00
private void clearEstimate ( Project project ) {
List < ProjectEstimateIncome > incomes = projectEstimateIncomeRepository . findAllByProjectIdEquals ( project . getId ( ) ) ;
if ( CollectionUtil . isNotEmpty ( incomes ) ) {
projectEstimateIncomeRepository . deleteInBatch ( incomes ) ;
}
List < ProjectEstimateCost > costs = projectEstimateCostRepository . findAllByProjectIdEquals ( project . getId ( ) ) ;
if ( CollectionUtil . isNotEmpty ( costs ) ) {
projectEstimateCostRepository . deleteInBatch ( costs ) ;
}
List < ProjectEstimateCostManage > costManages = projectEstimateCostManageRepository . findAllByProjectIdEquals ( project . getId ( ) ) ;
if ( CollectionUtil . isNotEmpty ( costManages ) ) {
projectEstimateCostManageRepository . deleteInBatch ( costManages ) ;
}
}
/ * *
* 编 辑 概 算 保 存 项 目
* /
@Transactional ( rollbackFor = RuntimeException . class )
2021-11-02 04:20:20 +00:00
public Project estimateEditSave ( Project project , EstimateBean estimateBean , Admin admin , ApproveStatusEnum approveStatusEnum ) {
2021-11-01 13:09:10 +00:00
//删除原来的
projectRepository . delete ( project . getId ( ) ) ;
//清空概算信息
clearEstimate ( project ) ;
2021-11-02 04:20:20 +00:00
return estimateAddSave ( project , estimateBean , admin , approveStatusEnum ) ;
2021-11-01 13:09:10 +00:00
}
2021-11-01 12:07:02 +00:00
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 ) ;
2021-11-01 13:09:10 +00:00
projectEstimateCostZijin . setCostTaxExclude ( estimateBean . getCostExpropriationTaxExclude ( ) ) ;
2021-11-01 12:07:02 +00:00
projectEstimateCostManageRepository . saveAndFlush ( projectEstimateCostZijin ) ;
ProjectEstimateCostManage projectEstimateCostManage = new ProjectEstimateCostManage ( ) ;
projectEstimateCostManage . setProjectId ( project . getId ( ) ) ;
projectEstimateCostManage . setType ( 2 ) ;
2021-11-01 13:09:10 +00:00
projectEstimateCostManage . setCostTaxExclude ( estimateBean . getCostCompanyManageTaxExclude ( ) ) ;
2021-11-01 12:07:02 +00:00
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 ) ;
}
2021-11-01 13:09:10 +00:00
public Project getProject ( int id ) {
return projectRepository . findOne ( id ) ;
}
public EstimateBean estimate ( Project project ) {
EstimateBean estimateBean = new EstimateBean ( ) ;
List < ProjectEstimateIncome > incomes = projectEstimateIncomeRepository . findAllByProjectIdEquals ( project . getId ( ) ) ;
ProjectEstimateIncome projectEstimateIncomeDevice = incomes . stream ( ) . filter ( d - > d . getType ( ) = = 1 ) . collect ( Collectors . toList ( ) ) . get ( 0 ) ;
estimateBean . setIncomeDeviceTaxInclude ( projectEstimateIncomeDevice . getIncomeTaxInclude ( ) ) ;
estimateBean . setIncomeDeviceTaxExclude ( projectEstimateIncomeDevice . getIncomeTaxExclude ( ) ) ;
ProjectEstimateIncome projectEstimateIncomeEngineer = incomes . stream ( ) . filter ( d - > d . getType ( ) = = 2 ) . collect ( Collectors . toList ( ) ) . get ( 0 ) ;
estimateBean . setIncomeEngineerTaxInclude ( projectEstimateIncomeEngineer . getIncomeTaxInclude ( ) ) ;
estimateBean . setIncomeEngineerTaxExclude ( projectEstimateIncomeEngineer . getIncomeTaxExclude ( ) ) ;
ProjectEstimateIncome projectEstimateIncomeService = incomes . stream ( ) . filter ( d - > d . getType ( ) = = 3 ) . collect ( Collectors . toList ( ) ) . get ( 0 ) ;
estimateBean . setIncomeServiceTaxInclude ( projectEstimateIncomeService . getIncomeTaxInclude ( ) ) ;
estimateBean . setIncomeServiceTaxExclude ( projectEstimateIncomeService . getIncomeTaxExclude ( ) ) ;
List < ProjectEstimateCost > costs = projectEstimateCostRepository . findAllByProjectIdEquals ( project . getId ( ) ) ;
ProjectEstimateCost projectEstimateCostDevice = costs . stream ( ) . filter ( d - > d . getType ( ) = = 1 ) . collect ( Collectors . toList ( ) ) . get ( 0 ) ;
estimateBean . setCostPurchaseDeviceTaxInclude ( projectEstimateCostDevice . getCostTaxInclude ( ) ) ;
estimateBean . setCostPurchaseDeviceTaxExclude ( projectEstimateCostDevice . getCostTaxExclude ( ) ) ;
ProjectEstimateCost projectEstimateCostBuild = costs . stream ( ) . filter ( d - > d . getType ( ) = = 2 ) . collect ( Collectors . toList ( ) ) . get ( 0 ) ;
estimateBean . setCostPurchaseBuildTaxInclude ( projectEstimateCostBuild . getCostTaxInclude ( ) ) ;
estimateBean . setCostPurchaseBuildTaxExclude ( projectEstimateCostBuild . getCostTaxExclude ( ) ) ;
ProjectEstimateCost projectEstimateCostService = costs . stream ( ) . filter ( d - > d . getType ( ) = = 3 ) . collect ( Collectors . toList ( ) ) . get ( 0 ) ;
estimateBean . setCostPurchaseServiceTaxInclude ( projectEstimateCostService . getCostTaxInclude ( ) ) ;
estimateBean . setCostPurchaseServiceTaxExclude ( projectEstimateCostService . getCostTaxExclude ( ) ) ;
ProjectEstimateCost projectEstimateCostOther = costs . stream ( ) . filter ( d - > d . getType ( ) = = 4 ) . collect ( Collectors . toList ( ) ) . get ( 0 ) ;
estimateBean . setCostPurchaseOtherTaxInclude ( projectEstimateCostOther . getCostTaxInclude ( ) ) ;
estimateBean . setCostPurchaseOtherTaxExclude ( projectEstimateCostOther . getCostTaxExclude ( ) ) ;
ProjectEstimateCost projectEstimateCostProjectManage = costs . stream ( ) . filter ( d - > d . getType ( ) = = 5 ) . collect ( Collectors . toList ( ) ) . get ( 0 ) ;
estimateBean . setCostProjectManageTaxInclude ( projectEstimateCostProjectManage . getCostTaxInclude ( ) ) ;
estimateBean . setCostProjectManageTaxExclude ( projectEstimateCostProjectManage . getCostTaxExclude ( ) ) ;
ProjectEstimateCost projectEstimateCostOtherOther = costs . stream ( ) . filter ( d - > d . getType ( ) = = 6 ) . collect ( Collectors . toList ( ) ) . get ( 0 ) ;
estimateBean . setCostOtherOtherTaxInclude ( projectEstimateCostOtherOther . getCostTaxInclude ( ) ) ;
estimateBean . setCostOtherOtherTaxExclude ( projectEstimateCostOtherOther . getCostTaxExclude ( ) ) ;
List < ProjectEstimateCostManage > manages = projectEstimateCostManageRepository . findAllByProjectIdEquals ( project . getId ( ) ) ;
ProjectEstimateCostManage costManageExpropriation = manages . stream ( ) . filter ( d - > d . getType ( ) = = 1 ) . collect ( Collectors . toList ( ) ) . get ( 0 ) ;
estimateBean . setCostExpropriationTaxExclude ( costManageExpropriation . getCostTaxExclude ( ) ) ;
ProjectEstimateCostManage costManageCompany = manages . stream ( ) . filter ( d - > d . getType ( ) = = 2 ) . collect ( Collectors . toList ( ) ) . get ( 0 ) ;
estimateBean . setCostCompanyManageTaxExclude ( costManageCompany . getCostTaxExclude ( ) ) ;
return estimateBean ;
}
2021-10-29 10:15:36 +00:00
}