2021-10-29 10:15:36 +00:00
package cn.palmte.work.service ;
2021-11-02 09:33:34 +00:00
import cn.palmte.work.bean.* ;
2021-11-12 04:11:28 +00:00
import cn.palmte.work.config.activiti.ActConstant ;
import cn.palmte.work.model.* ;
2021-11-08 09:32:25 +00:00
import cn.palmte.work.utils.InterfaceUtil ;
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 ;
import top.jfunc.common.utils.StrUtil ;
2021-11-01 11:00:53 +00:00
import java.util.Date ;
2021-11-12 04:11:28 +00:00
import java.util.HashMap ;
2021-11-08 09:32:25 +00:00
import java.util.List ;
2021-10-29 10:15:36 +00:00
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 ;
2021-11-01 11:00:53 +00:00
@Autowired
private ProjectRepository projectRepository ;
2021-11-01 12:07:02 +00:00
@Autowired
2021-11-02 06:43:42 +00:00
private ProjectEstimateService projectEstimateService ;
2021-11-02 09:33:34 +00:00
@Autowired
private ProjectBudgetService projectBudgetService ;
2021-11-12 04:11:28 +00:00
@Autowired
private ProjectInstanceService projectInstanceService ;
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-08 08:38:02 +00:00
if ( StrUtil . isNotEmpty ( searchInfo . get ( "approveId" ) ) ) {
int approveId = Integer . parseInt ( searchInfo . get ( "approveId" ) ) ;
queryHelper . addCondition ( "p.approve_id=?" , approveId ) ;
}
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
}
2021-11-08 08:27:33 +00:00
if ( StrUtil . isNotEmpty ( searchInfo . get ( "startUpdateDate" ) ) ) {
String time = searchInfo . get ( "startUpdateDate" ) + " 00:00:00" ;
queryHelper . addCondition ( "p.last_update_time>=?" , time ) ;
}
if ( StrUtil . isNotEmpty ( searchInfo . get ( "endUpdateDate" ) ) ) {
String time = searchInfo . get ( "endUpdateDate" ) + " 00:00:00" ;
queryHelper . addCondition ( "p.last_update_time<=?" , time ) ;
}
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-08 09:32:25 +00:00
/ * *
* 找 到 待 我 审 核 项 目
* /
public Page < Project > findMyApproveProjects ( Map < String , String > searchInfo , int adminId , int pageNumber , int pageSize ) {
//在列表基础上增加审核人是我和待审核状态的条件
searchInfo . put ( "approveId" , "" + adminId ) ;
searchInfo . put ( "approveStatus" , "" + ApproveStatusEnum . APPROVAL_PENDING . getApproveStatus ( ) ) ;
return list ( searchInfo , pageNumber , pageSize ) ;
}
2021-11-02 06:43:42 +00:00
public Project getProject ( int id ) {
return projectRepository . findOne ( id ) ;
}
2021-10-29 10:15:36 +00:00
2021-11-12 04:11:28 +00:00
/ * *
* 新 增 概 算 保 存 项 目 并 发 起 审 核
* /
@Transactional ( rollbackFor = RuntimeException . class )
public Project estimateAddSaveAndApprove ( Project project ,
EstimateBean estimateBean ,
Admin admin ) throws Exception {
Project p = estimateAddSave ( project , estimateBean , admin , ApproveStatusEnum . APPROVAL_PENDING ) ;
projectInstanceService . startEstimateProcessInstance ( p , admin ) ;
return project ;
}
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-12 04:11:28 +00:00
public Project estimateAddSave ( Project project ,
EstimateBean estimateBean ,
Admin admin ,
ApproveStatusEnum approveStatusEnum ) {
2021-11-02 06:43:42 +00:00
Project p = addProject ( project , admin , approveStatusEnum ) ;
projectEstimateService . saveEstimate ( p , estimateBean ) ;
return project ;
}
2021-11-12 04:11:28 +00:00
/ * *
* 编 辑 概 算 保 存 项 目 并 发 起 审 核
* /
@Transactional ( rollbackFor = RuntimeException . class )
public Project estimateEditSaveAndApprove ( Project project ,
EstimateBean estimateBean ,
Admin admin ) throws Exception {
Project p = estimateEditSave ( project , estimateBean , admin , ApproveStatusEnum . APPROVAL_PENDING ) ;
//TODO 此处找到以前的概算审批实例,然后完成任务
//projectInstanceService.startEstimateProcessInstance(p, admin);
return p ;
}
2021-11-02 06:43:42 +00:00
/ * *
* 编 辑 概 算 保 存 项 目
* /
@Transactional ( rollbackFor = RuntimeException . class )
public Project estimateEditSave ( Project project , EstimateBean estimateBean , Admin admin , ApproveStatusEnum approveStatusEnum ) {
Project p = editProject ( project , admin , approveStatusEnum ) ;
2021-11-02 09:37:55 +00:00
p . setStatus ( StatusEnum . CREATED . getStatus ( ) ) ;
p . setStatusDesc ( StatusEnum . CREATED . getStatusDesc ( ) ) ;
2021-11-02 09:33:34 +00:00
p . setApproveStatusEstimate ( approveStatusEnum . getApproveStatus ( ) ) ;
2021-11-05 04:19:01 +00:00
ProjectConfigBean projectConfigBeanConfig = projectBudgetService . getProjectConfigBeanConfig ( ) ;
project . setProjectContributionProfitRateThreshold ( projectConfigBeanConfig . getProjectContributionProfitRateThreshold ( ) ) ;
project . setUnderwrittenTaxRate ( projectConfigBeanConfig . getUnderwrittenTaxRate ( ) ) ;
2021-11-02 09:33:34 +00:00
p = projectRepository . saveAndFlush ( p ) ;
2021-11-02 06:43:42 +00:00
//清空重新保存概算信息
2021-11-02 09:33:34 +00:00
projectEstimateService . clearEstimate ( p ) ;
2021-11-02 06:43:42 +00:00
projectEstimateService . saveEstimate ( p , estimateBean ) ;
return p ;
}
2021-11-12 04:11:28 +00:00
2021-11-02 06:43:42 +00:00
private Project addProject ( Project project , 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-05 04:19:01 +00:00
ProjectConfigBean projectConfigBeanConfig = projectBudgetService . getProjectConfigBeanConfig ( ) ;
project . setProjectContributionProfitRateThreshold ( projectConfigBeanConfig . getProjectContributionProfitRateThreshold ( ) ) ;
project . setUnderwrittenTaxRate ( projectConfigBeanConfig . getUnderwrittenTaxRate ( ) ) ;
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
2021-11-08 08:27:33 +00:00
Date now = new Date ( ) ;
project . setCreateTime ( now ) ;
project . setLastUpdateTime ( now ) ;
2021-11-01 11:00:53 +00:00
project = projectRepository . saveAndFlush ( project ) ;
return project ;
}
2021-11-01 12:07:02 +00:00
2021-11-02 06:43:42 +00:00
private Project editProject ( Project project , Admin admin , ApproveStatusEnum approveStatusEnum ) {
Project p = getProject ( project . getId ( ) ) ;
2021-11-01 13:09:10 +00:00
2021-11-02 06:43:42 +00:00
//只有如下可以修改
p . setStartDate ( project . getStartDate ( ) ) ;
p . setEndDate ( project . getEndDate ( ) ) ;
p . setAdvanceInterestAmount ( project . getAdvanceInterestAmount ( ) ) ;
p . setAdvancePeakAmount ( project . getAdvancePeakAmount ( ) ) ;
p . setContractAmount ( project . getContractAmount ( ) ) ;
p . setHuazhiProductAmount ( project . getHuazhiProductAmount ( ) ) ;
p . setZiguangOtherAmount ( project . getZiguangOtherAmount ( ) ) ;
p . setMainContractCollectionTerms ( project . getMainContractCollectionTerms ( ) ) ;
2021-11-01 13:09:10 +00:00
2021-11-02 06:43:42 +00:00
p . setApproveStatusEstimate ( approveStatusEnum . getApproveStatus ( ) ) ;
2021-11-01 13:09:10 +00:00
2021-11-08 08:27:33 +00:00
p . setLastUpdateTime ( new Date ( ) ) ;
2021-11-02 09:33:34 +00:00
return p ;
}
2021-11-12 04:11:28 +00:00
/ * *
* 编 辑 预 算 保 存 项 目 并 审 核
* /
@Transactional ( rollbackFor = RuntimeException . class )
public Project budgetEditSaveAndApprove ( Project project , BudgetBean budgetBean , Admin admin ) throws Exception {
Project p = budgetEditSave ( project , budgetBean , admin , ApproveStatusEnum . APPROVAL_PENDING ) ;
projectInstanceService . startBudgetProcessInstance ( p , admin ) ;
return p ;
}
2021-11-02 09:33:34 +00:00
/ * *
* 编 辑 预 算 保 存 项 目
* /
@Transactional ( rollbackFor = RuntimeException . class )
public Project budgetEditSave ( Project project , BudgetBean budgetBean , Admin admin , ApproveStatusEnum approveStatusEnum ) {
Project p = editProject ( project , admin , approveStatusEnum ) ;
2021-11-02 09:37:55 +00:00
p . setStatus ( StatusEnum . BUDGET_ACCOUNTS . getStatus ( ) ) ;
p . setStatusDesc ( StatusEnum . BUDGET_ACCOUNTS . getStatusDesc ( ) ) ;
2021-11-02 09:33:34 +00:00
p . setApproveStatusEstimate ( approveStatusEnum . getApproveStatus ( ) ) ;
p = projectRepository . saveAndFlush ( p ) ;
//清空重新保存概算信息
projectBudgetService . clearBudget ( p ) ;
projectBudgetService . saveBudget ( p , budgetBean ) ;
return p ;
2021-11-01 13:09:10 +00:00
}
2021-10-29 10:15:36 +00:00
}