feat(project): 添加项目决算功能
- 在项目列表页面添加决算按钮 - 实现项目决算的逻辑,包括更新项目状态和删除相关流程实例 - 新增获取流程实例的方法dev_2.0.4
parent
d02ce1738d
commit
0eb8d1563d
|
|
@ -1032,6 +1032,14 @@ public class ProjectController extends BaseController {
|
||||||
public ResponseMsg deleteProject(@PathVariable int id) {
|
public ResponseMsg deleteProject(@PathVariable int id) {
|
||||||
return projectService.deleteProject(id);
|
return projectService.deleteProject(id);
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 删除草稿状态下的概算项目
|
||||||
|
*/
|
||||||
|
@GetMapping("/delete/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
public ResponseMsg deleteLogic(@PathVariable int id) {
|
||||||
|
return projectService.deleteLogic(id);
|
||||||
|
}
|
||||||
|
|
||||||
@InitBinder
|
@InitBinder
|
||||||
public void initBinder(WebDataBinder webDataBinder) {
|
public void initBinder(WebDataBinder webDataBinder) {
|
||||||
|
|
|
||||||
|
|
@ -47,5 +47,8 @@ public interface ProjectRepository extends JpaRepository<Project,Integer> {
|
||||||
" and (`project_no` like concat('%', :q, '%') or `name` like concat('%', :q, '%'))",
|
" and (`project_no` like concat('%', :q, '%') or `name` like concat('%', :q, '%'))",
|
||||||
nativeQuery = true)
|
nativeQuery = true)
|
||||||
List<Project> findBudgetPassedProjects(@Param("q") String query);
|
List<Project> findBudgetPassedProjects(@Param("q") String query);
|
||||||
|
@Modifying
|
||||||
|
@Transactional(rollbackOn = Exception.class)
|
||||||
|
@Query(value = "update project set deleted=1 where id = ?", nativeQuery = true)
|
||||||
|
void deleteLogic(int id);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ import org.activiti.engine.impl.identity.Authentication;
|
||||||
import org.activiti.engine.repository.ProcessDefinition;
|
import org.activiti.engine.repository.ProcessDefinition;
|
||||||
import org.activiti.engine.runtime.ProcessInstance;
|
import org.activiti.engine.runtime.ProcessInstance;
|
||||||
import org.activiti.engine.task.Task;
|
import org.activiti.engine.task.Task;
|
||||||
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
@ -358,4 +359,9 @@ public class ActProcInsService {
|
||||||
}
|
}
|
||||||
return flowIdList;
|
return flowIdList;
|
||||||
}
|
}
|
||||||
|
public ProcessInstance getProcInsByBusinessKey(String businessKey) {
|
||||||
|
List<ProcessInstance> list = runtimeService.createProcessInstanceQuery().processInstanceBusinessKey(businessKey).list();
|
||||||
|
list.sort(Comparator.comparing(ProcessInstance::getStartTime).reversed());
|
||||||
|
return CollectionUtils.isNotEmpty(list) ? list.get(0) : null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@ import cn.palmte.work.pojo.ProjectExportDto;
|
||||||
import cn.palmte.work.utils.InterfaceUtil;
|
import cn.palmte.work.utils.InterfaceUtil;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import org.activiti.engine.RuntimeService;
|
||||||
|
import org.activiti.engine.runtime.ProcessInstance;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
|
|
@ -60,7 +62,8 @@ public class ProjectService {
|
||||||
private ProjectTaskRecordRepository projectTaskRecordRepository;
|
private ProjectTaskRecordRepository projectTaskRecordRepository;
|
||||||
@Autowired
|
@Autowired
|
||||||
private ProjectTaskRecordService projectTaskRecordService;
|
private ProjectTaskRecordService projectTaskRecordService;
|
||||||
|
@Autowired
|
||||||
|
private ActProcInsService actProcInsService;
|
||||||
private QueryHelper getQueryHelper(Map<String, String> searchInfo) {
|
private QueryHelper getQueryHelper(Map<String, String> searchInfo) {
|
||||||
/*"CASE p.type WHEN 1 THEN '工程集成类' WHEN 2 THEN '设备集成类' WHEN 3 THEN '战略合作类' ELSE '未知' AS typeDesc," +
|
/*"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.status WHEN 0 THEN '草稿' WHEN 1 THEN '项目创建' WHEN 5 THEN '概算完成' WHEN 10 THEN '预算完成' WHEN 15 THEN '结算中' WHEN 20 THEN '决算完成' ELSE '未知' AS statusDesc," +
|
||||||
|
|
@ -73,6 +76,7 @@ public class ProjectService {
|
||||||
", FORMAT(pe.gross_profit,2) as grossProfitRound2, FORMAT(pe.gross_profit_margin,2) as grossProfitMarginRound2, FORMAT(pe.advance_interest_amount,2) as advanceInterestAmountRound2, FORMAT(pe.advance_peak_amount,2) as advancePeakAmountRound2" +
|
", FORMAT(pe.gross_profit,2) as grossProfitRound2, FORMAT(pe.gross_profit_margin,2) as grossProfitMarginRound2, FORMAT(pe.advance_interest_amount,2) as advanceInterestAmountRound2, FORMAT(pe.advance_peak_amount,2) as advancePeakAmountRound2" +
|
||||||
", DATE_FORMAT(p.start_date, '%Y-%m-%d') as startDateStr, DATE_FORMAT(p.end_date, '%Y-%m-%d') as endDateStr, DATE_FORMAT(p.last_update_time, '%Y-%m-%d') as lastUpdateTimeStr, DATE_FORMAT(p.contract_time, '%Y-%m-%d') as contractTimeStr, DATE_FORMAT(p.bids_time, '%Y-%m-%d') as bidsTimeStr","project","p");
|
", DATE_FORMAT(p.start_date, '%Y-%m-%d') as startDateStr, DATE_FORMAT(p.end_date, '%Y-%m-%d') as endDateStr, DATE_FORMAT(p.last_update_time, '%Y-%m-%d') as lastUpdateTimeStr, DATE_FORMAT(p.contract_time, '%Y-%m-%d') as contractTimeStr, DATE_FORMAT(p.bids_time, '%Y-%m-%d') as bidsTimeStr","project","p");
|
||||||
queryHelper.leftJoin("project_extend pe", "p.id = pe.project_id");
|
queryHelper.leftJoin("project_extend pe", "p.id = pe.project_id");
|
||||||
|
queryHelper.addCondition("p.deleted=0 ");
|
||||||
if(StrUtil.isNotEmpty(searchInfo.get("status")) && !"-1".equals(searchInfo.get("status"))){
|
if(StrUtil.isNotEmpty(searchInfo.get("status")) && !"-1".equals(searchInfo.get("status"))){
|
||||||
queryHelper.addCondition("p.status=?", Integer.parseInt(searchInfo.get("status")));
|
queryHelper.addCondition("p.status=?", Integer.parseInt(searchInfo.get("status")));
|
||||||
}
|
}
|
||||||
|
|
@ -1048,4 +1052,18 @@ public class ProjectService {
|
||||||
List<Integer> projectIds = projectVisibleRepository.findProjectIdByTypeAndTid(ProjectVisible.TYPE_USER, admin.getId());
|
List<Integer> projectIds = projectVisibleRepository.findProjectIdByTypeAndTid(ProjectVisible.TYPE_USER, admin.getId());
|
||||||
return projectList.stream().filter(i -> i.getCreatorId() == admin.getId() || projectIds.contains(i.getId())).collect(Collectors.toList());
|
return projectList.stream().filter(i -> i.getCreatorId() == admin.getId() || projectIds.contains(i.getId())).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ResponseMsg deleteLogic(int id) {
|
||||||
|
Project one = projectRepository.findOne(id);
|
||||||
|
if (one == null) {
|
||||||
|
return ResponseMsg.buildFailedMsg("项目不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
projectRepository.deleteLogic(id);
|
||||||
|
ProcessInstance processInstance = actProcInsService.getProcInsByBusinessKey(String.valueOf(id));
|
||||||
|
actProcInsService.deleteProcessInstance(processInstance.getId(), "项目决算");
|
||||||
|
return ResponseMsg.buildSuccessMsg("決算成功");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1079,6 +1079,15 @@
|
||||||
class="am-icon-pencil-square-o"></span>填写预算表
|
class="am-icon-pencil-square-o"></span>填写预算表
|
||||||
</button>
|
</button>
|
||||||
</#if>
|
</#if>
|
||||||
|
<@shiro.hasPermission name="PROJECT_FINAL_ACCOUNTS">
|
||||||
|
<#if list.status!=15>
|
||||||
|
<button type="button"
|
||||||
|
class="am-btn am-btn-default am-btn-xs am-text-secondary"
|
||||||
|
onclick="deleteLogicProject('${list.id}','${list.projectNo}','${list.name}')"><span
|
||||||
|
class="am-icon-pencil-square-o"></span>決算
|
||||||
|
</button>
|
||||||
|
</#if>
|
||||||
|
</@shiro.hasPermission>
|
||||||
<#-- </@shiro.hasPermission>-->
|
<#-- </@shiro.hasPermission>-->
|
||||||
|
|
||||||
<#-- 项目等于预算状态、预算审核等于通过状态 -->
|
<#-- 项目等于预算状态、预算审核等于通过状态 -->
|
||||||
|
|
@ -1455,6 +1464,24 @@
|
||||||
layer.alert("请先填写预算表中的合同名称,再填写结算表");
|
layer.alert("请先填写预算表中的合同名称,再填写结算表");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
function deleteLogicProject(id,projectNo,name){
|
||||||
|
let title='请确认'+projectNo+'('+name+')是否决算?'
|
||||||
|
layer.confirm(title,()=>{
|
||||||
|
$.ajax({
|
||||||
|
url: '${base}/' + id,
|
||||||
|
dataType: "json",
|
||||||
|
async: false,
|
||||||
|
success: function (data) {
|
||||||
|
if (data.status == 0) {
|
||||||
|
layer.alert(data.msg);
|
||||||
|
window.location.href = window.location.href;
|
||||||
|
} else if (data.status == 1) {
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
function checkContractName2(id, isContract) {
|
function checkContractName2(id, isContract) {
|
||||||
if (isContract === 1) {
|
if (isContract === 1) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue