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) {
|
||||
return projectService.deleteProject(id);
|
||||
}
|
||||
/**
|
||||
* 删除草稿状态下的概算项目
|
||||
*/
|
||||
@GetMapping("/delete/{id}")
|
||||
@ResponseBody
|
||||
public ResponseMsg deleteLogic(@PathVariable int id) {
|
||||
return projectService.deleteLogic(id);
|
||||
}
|
||||
|
||||
@InitBinder
|
||||
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, '%'))",
|
||||
nativeQuery = true)
|
||||
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.runtime.ProcessInstance;
|
||||
import org.activiti.engine.task.Task;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
|
@ -358,4 +359,9 @@ public class ActProcInsService {
|
|||
}
|
||||
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 com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.activiti.engine.RuntimeService;
|
||||
import org.activiti.engine.runtime.ProcessInstance;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
|
|
@ -60,7 +62,8 @@ public class ProjectService {
|
|||
private ProjectTaskRecordRepository projectTaskRecordRepository;
|
||||
@Autowired
|
||||
private ProjectTaskRecordService projectTaskRecordService;
|
||||
|
||||
@Autowired
|
||||
private ActProcInsService actProcInsService;
|
||||
private QueryHelper getQueryHelper(Map<String, String> searchInfo) {
|
||||
/*"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," +
|
||||
|
|
@ -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" +
|
||||
", 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.addCondition("p.deleted=0 ");
|
||||
if(StrUtil.isNotEmpty(searchInfo.get("status")) && !"-1".equals(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());
|
||||
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>填写预算表
|
||||
</button>
|
||||
</#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>-->
|
||||
|
||||
<#-- 项目等于预算状态、预算审核等于通过状态 -->
|
||||
|
|
@ -1455,6 +1464,24 @@
|
|||
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) {
|
||||
if (isContract === 1) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue