Browse Source

添加节点类型、标签等

master
陈裕财 4 years ago
parent
commit
889fa1aa92
  1. 194
      xm-core/src/main/java/com/xm/core/ctrl/XmTaskExecuserController.java
  2. 346
      xm-core/src/main/java/com/xm/core/service/XmTaskExecuserService.java

194
xm-core/src/main/java/com/xm/core/ctrl/XmTaskExecuserController.java

@ -31,6 +31,8 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.mdp.core.utils.BaseUtils.map;
/**
* url编制采用rest风格,如对XM.xm_task_execuser xm_task_execuser的操作有增删改查,对应的url分别为:<br>
* 新增: xm/xmTaskExecuser/add <br>
@ -173,7 +175,7 @@ public class XmTaskExecuserController {
return m;
}
User user=LoginUtils.getCurrentUserInfo();
List<XmTaskExecuser> xmTaskExecuserListDb=this.xmTaskExecuserService.selectListByIds(xmTaskExecusers.stream().map(i->i.getId()).collect(Collectors.toList()));
List<XmTaskExecuser> xmTaskExecuserListDb=this.xmTaskExecuserService.selectListByIds(xmTaskExecusers.stream().map(i->map("taskId",i.getTaskId(),"userid",i.getUserid())).collect(Collectors.toList()));
if(xmTaskExecuserListDb==null || xmTaskExecuserListDb.size()==0){
return ResponseHelper.failed("data-0","执行人/候选人都已不存在");
}
@ -202,10 +204,6 @@ public class XmTaskExecuserController {
status5Names.add(xmTaskExecuser.getUsername());
continue;
}
if("1".equals(xmTaskExecuser.getBizFlowState())){
flowState1Names.add(xmTaskExecuser.getUsername());
continue;
}
if(!user.getUserid().equals(xmTaskExecuser.getUserid())) {//只有组长任务责任人可以请别人请离开任务
if(isTaskCreater||isExe||isPm){
allowUsers.add(xmTaskExecuser);
@ -329,148 +327,6 @@ public class XmTaskExecuserController {
return m;
}
@ApiOperation( value = "提交任务测试",notes="editXmTaskExecuser")
@ApiResponses({
@ApiResponse(code = 200,response=XmTaskExecuser.class, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}")
})
@HasQx(value = "xm_core_xmTaskExecuser_toTest",name = "提交任务到测试",categoryId = "admin-xm",categoryName = "管理端-项目管理系统")
@RequestMapping(value="/toTest",method=RequestMethod.POST)
public Map<String,Object> toTest(@RequestBody XmTaskExecuser xmTaskExecuser) {
Map<String,Object> m = new HashMap<>();
Tips tips=new Tips("成功更新一条数据");
try{
/**
* 如果是提交测试需要检查提交人是本人还是组长本人或者组长才有权提交任务测试
*/
String taskId=xmTaskExecuser.getTaskId();
XmTask xmTask= xmTaskService.selectOneObject(new XmTask(taskId));
if(xmTask==null ){
tips.setFailureMsg("任务已不存在");
m.put("tips", tips);
return m;
}
if(!"0".equals(xmTask.getTaskState()) && !"1".equals(xmTask.getTaskState()) ){
tips.setFailureMsg("该任务已经处于完工、结算状态,不允许再修改");
m.put("tips", tips);
return m;
}
User user=LoginUtils.getCurrentUserInfo();
boolean isTaskCreater=user.getUserid().equals(xmTask.getCreateUserid());
if(!user.getUserid().equals(xmTaskExecuser.getUserid())) {
String projectId=xmTaskExecuser.getProjectId();
List<XmGroupVo> pgroups=groupService.getProjectGroupVoList(projectId);
boolean isHead= groupService.checkUserIsOtherUserTeamHeadOrAss(pgroups, xmTaskExecuser.getUserid(), user.getUserid());
if( !isHead && !isTaskCreater ) {
tips.setFailureMsg("自己或者组长可以提交任务到测试,"+user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权提交");
}
}
if(tips.isOk()) {
xmTaskExecuserService.toTest(xmTaskExecuser);
}
}catch (BizException e) {
tips=e.getTips();
logger.error("",e);
}catch (Exception e) {
tips.setFailureMsg(e.getMessage());
logger.error("",e);
}
m.put("tips", tips);
return m;
}
@ApiOperation( value = "测试通过",notes="editXmTaskExecuser")
@ApiResponses({
@ApiResponse(code = 200,response=XmTaskExecuser.class, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}")
})
@HasQx(value = "xm_core_xmTaskExecuser_testSuccess",name = "变更任务为测试通过",categoryId = "admin-xm",categoryName = "管理端-项目管理系统")
@RequestMapping(value="/testSuccess",method=RequestMethod.POST)
public Map<String,Object> testSuccess(@RequestBody XmTaskExecuser xmTaskExecuser) {
Map<String,Object> m = new HashMap<>();
Tips tips=new Tips("成功更新一条数据");
try{
String taskId=xmTaskExecuser.getTaskId();
XmTask xmTask= xmTaskService.selectOneObject(new XmTask(taskId));
if(xmTask==null ){
tips.setFailureMsg("任务已不存在");
m.put("tips", tips);
return m;
}
if(!"0".equals(xmTask.getTaskState()) && !"1".equals(xmTask.getTaskState()) ){
tips.setFailureMsg("该任务已经处于完工、结算状态,不允许再修改");
m.put("tips", tips);
return m;
}
User user=LoginUtils.getCurrentUserInfo();
boolean isTaskCreater=user.getUserid().equals(xmTask.getCreateUserid());
String projectId=xmTaskExecuser.getProjectId();
List<XmGroupVo> pgroups=groupService.getProjectGroupVoList(projectId);
boolean isHead= groupService.checkUserIsOtherUserTeamHeadOrAss(pgroups, xmTaskExecuser.getUserid(), user.getUserid());
if( !isHead && !isTaskCreater ) {
tips.setFailureMsg("您无权提交测试结果!任务责任人、组长可以提交该任务的测试结果。");
}
if(tips.isOk()) {
xmTaskExecuserService.testSuccess(xmTaskExecuser);
}
}catch (BizException e) {
tips=e.getTips();
logger.error("",e);
}catch (Exception e) {
tips.setFailureMsg(e.getMessage());
logger.error("",e);
}
m.put("tips", tips);
return m;
}
@ApiOperation( value = "测试不通过",notes="editXmTaskExecuser")
@ApiResponses({
@ApiResponse(code = 200,response=XmTaskExecuser.class, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}")
})
@HasQx(value = "xm_core_xmTaskExecuser_testFail",name = "变更任务状态为测试失败",categoryId = "admin-xm",categoryName = "管理端-项目管理系统")
@RequestMapping(value="/testFail",method=RequestMethod.POST)
public Map<String,Object> testFalse(@RequestBody XmTaskExecuser xmTaskExecuser) {
Map<String,Object> m = new HashMap<>();
Tips tips=new Tips("成功更新一条数据");
try{
String taskId=xmTaskExecuser.getTaskId();
XmTask xmTask= xmTaskService.selectOneObject(new XmTask(taskId));
if(xmTask==null ){
tips.setFailureMsg("任务已不存在");
m.put("tips", tips);
return m;
}
if(!"0".equals(xmTask.getTaskState()) && !"1".equals(xmTask.getTaskState()) ){
tips.setFailureMsg("该任务已经处于完工、结算状态,不需要提交测试");
m.put("tips", tips);
return m;
}
User user=LoginUtils.getCurrentUserInfo();
boolean isTaskCreater=user.getUserid().equals(xmTask.getCreateUserid());
String projectId=xmTaskExecuser.getProjectId();
List<XmGroupVo> pgroups=groupService.getProjectGroupVoList(projectId);
boolean isHead= groupService.checkUserIsOtherUserTeamHeadOrAss(pgroups, xmTaskExecuser.getUserid(), user.getUserid());
if( !isHead && !isTaskCreater ) {
tips.setFailureMsg("您无权提交测试结果!任务责任人、组长可以提交该任务的测试结果。");
}
if(tips.isOk()) {
xmTaskExecuserService.testFail(xmTaskExecuser);
}
}catch (BizException e) {
tips=e.getTips();
logger.error("",e);
}catch (Exception e) {
tips.setFailureMsg(e.getMessage());
logger.error("",e);
}
m.put("tips", tips);
return m;
}
@ApiOperation( value = "候选人报价",notes="quotePrice")
@ApiResponses({
@ApiResponse(code = 200,response=XmTaskExecuser.class, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}")
@ -507,7 +363,7 @@ public class XmTaskExecuserController {
}
}
if(tips.isOk()) {
XmTaskExecuser xmTaskExecuserDb = xmTaskExecuserService.selectOneObject(new XmTaskExecuser(xmTaskExecuser.getId()));
XmTaskExecuser xmTaskExecuserDb = xmTaskExecuserService.selectOneObject(new XmTaskExecuser(xmTaskExecuser.getTaskId(),xmTaskExecuser.getUserid()));
if("0".equals(xmTaskExecuserDb.getStatus())) {
xmTaskExecuserService.quotePrice(xmTaskExecuser);
m.put("data",xmTaskExecuser);
@ -606,7 +462,7 @@ public class XmTaskExecuserController {
}
}
if(tips.isOk()) {
XmTaskExecuser xmTaskExecuserDb = xmTaskExecuserService.selectOneObject(new XmTaskExecuser(xmTaskExecuser.getId()));
XmTaskExecuser xmTaskExecuserDb = xmTaskExecuserService.selectOneObject(new XmTaskExecuser(xmTaskExecuser.getTaskId(),xmTaskExecuser.getUserid()));
if(xmTaskExecuserDb !=null ) {
if( "0".equals( xmTaskExecuserDb.getStatus() ) || "7".equals( xmTaskExecuserDb.getStatus() ) || "8".equals( xmTaskExecuserDb.getStatus() ) ) {
xmTaskExecuserService.delete(xmTaskExecuser);
@ -631,44 +487,4 @@ public class XmTaskExecuserController {
m.put("tips", tips);
return m;
}
/**
* 流程审批过程中回调该接口更新业务数据
* 如果发起流程时上送了restUrl则无论流程中是否配置了监听器都会在流程发生以下事件时推送数据过来
* eventName: PROCESS_STARTED 流程启动完成 全局
* PROCESS_COMPLETED 流程正常结束 全局
* PROCESS_CANCELLED 流程删除 全局
* create 人工任务启动
* complete 人工任务完成
* assignment 人工任务分配给了具体的人
* delete 人工任务被删除
*
* 其中 create/complete/assignment/delete事件是需要在模型中人工节点上配置了委托代理表达式 ${taskBizCallListener}才会推送过来
* 在人工任务节点上配置 任务监听器 建议事件为 complete,其它assignment/create/complete/delete也可以一般建议在complete,委托代理表达式 ${taskBizCallListener}
*
* @param flowVars {flowBranchId,agree,procInstId,assignee,actId,taskName,mainTitle,branchId,bizKey,commentMsg,eventName,modelKey}
* @return 如果tips.isOk==false将影响流程提交
**/
@AuditLog(firstMenu="办公平台",secondMenu="项目执行人管理",func="processApprova",funcDesc="任务分配/结算审核",operType=OperType.UPDATE)
@RequestMapping(value="/processApprova",method=RequestMethod.POST)
public Map<String,Object> processApprova( @RequestBody Map<String,Object> flowVars){
Map<String,Object> m = new HashMap<>();
Tips tips=new Tips("成功新增一条数据");
try{
this.xmTaskExecuserService.processApprova(flowVars);
logger.debug("procInstId====="+flowVars.get("procInstId"));
}catch (BizException e) {
tips=e.getTips();
logger.error("执行异常",e);
}catch (Exception e) {
tips.setFailureMsg(e.getMessage());
logger.error("执行异常",e);
}
m.put("tips", tips);
return m;
}
}

346
xm-core/src/main/java/com/xm/core/service/XmTaskExecuserService.java

@ -52,8 +52,6 @@ public class XmTaskExecuserService extends BaseService {
@Autowired
CashOperateServie cashOperateServie;
@Autowired
MkClient mkClient;
public void addExecuser(XmTaskExecuser xmTaskExecuser){
User user = LoginUtils.getCurrentUserInfo();
@ -64,7 +62,6 @@ public class XmTaskExecuserService extends BaseService {
if(userDb.size()>0) {
throw new BizException(xmTaskExecuser.getUsername()+"已在任务中,不允许再添加");
}
xmTaskExecuser.setId(this.createKey("id"));
xmTaskExecuser.setCreateUserid(user.getUserid());
xmTaskExecuser.setCreateUsername(user.getUsername());
xmTaskExecuser.setCreateTime(new Date());
@ -77,52 +74,6 @@ public class XmTaskExecuserService extends BaseService {
this.pushMsgService.pushPrichatMsgToIm(user.getBranchId(),user.getUserid(),user.getUsername(), xmTaskExecuser.getUserid(), xmTaskExecuser.getUsername(),imMsg);
this.pushMsgService.pushCreateCssGroupMsg(user.getBranchId(), xmTaskExecuser.getUserid(), xmTaskExecuser.getUsername(), imMsg);
xmRecordService.addXmTaskRecord(xmTaskExecuser.getProjectId(), xmTaskExecuser.getTaskId(), "项目-任务-增加候选人", "任务增加候选人"+xmTaskExecuser.getUsername(),JSONObject.toJSONString(xmTaskExecuser),null);
}
/**
* 提交任务给测试人员测试
* @param xmTaskExecuser
*/
public void toTest(XmTaskExecuser xmTaskExecuser){
User user = LoginUtils.getCurrentUserInfo();
XmTaskExecuser xmTaskExecuserNew = new XmTaskExecuser();
xmTaskExecuserNew.setId(xmTaskExecuser.getId());
xmTaskExecuserNew.setStatus("2");
this.updateSomeFieldByPk(xmTaskExecuserNew);
updateXmTaskExeUseridsAndUsernamesByTaskId(xmTaskExecuser.getTaskId());
String imMsg=xmTaskExecuser.getUsername()+"提交任务【"+xmTaskExecuser.getTaskId()+"-"+xmTaskExecuser.getTaskName()+"】,请安排测试";
this.pushMsgService.pushCreateCssGroupMsg(user.getBranchId(), xmTaskExecuser.getUserid(), xmTaskExecuser.getUsername(), imMsg);
xmRecordService.addXmTaskRecord(xmTaskExecuser.getProjectId(), xmTaskExecuser.getTaskId(), "项目-任务-提交任务测试", "提交任务测试"+xmTaskExecuser.getUsername(),JSONObject.toJSONString(xmTaskExecuser),null);
}
public void testFail(XmTaskExecuser xmTaskExecuser) {
User user = LoginUtils.getCurrentUserInfo();
XmTaskExecuser xmTaskExecuserNew = new XmTaskExecuser();
xmTaskExecuserNew.setId(xmTaskExecuser.getId());
xmTaskExecuserNew.setStatus("4");
this.updateSomeFieldByPk(xmTaskExecuserNew);
updateXmTaskExeUseridsAndUsernamesByTaskId(xmTaskExecuser.getTaskId());
String imMsg=xmTaskExecuser.getUsername()+"的任务【"+xmTaskExecuser.getTaskId()+"-"+xmTaskExecuser.getTaskName()+"】测试不通过";
this.pushMsgService.pushCreateCssGroupMsg(user.getBranchId(), xmTaskExecuser.getUserid(), xmTaskExecuser.getUsername(), imMsg);
xmRecordService.addXmTaskRecord(xmTaskExecuser.getProjectId(), xmTaskExecuser.getTaskId(), "项目-任务-任务测试", "测试不通过",JSONObject.toJSONString(xmTaskExecuser),null);
}
public void testSuccess(XmTaskExecuser xmTaskExecuser) {
User user = LoginUtils.getCurrentUserInfo();
XmTaskExecuser xmTaskExecuserNew = new XmTaskExecuser();
xmTaskExecuserNew.setId(xmTaskExecuser.getId());
xmTaskExecuserNew.setStatus("3");
this.updateSomeFieldByPk(xmTaskExecuserNew);
updateXmTaskExeUseridsAndUsernamesByTaskId(xmTaskExecuser.getTaskId());
String imMsg=xmTaskExecuser.getUsername()+"的任务【"+xmTaskExecuser.getTaskId()+"-"+xmTaskExecuser.getTaskName()+"】测试通过";
this.pushMsgService.pushCreateCssGroupMsg(user.getBranchId(), xmTaskExecuser.getUserid(), xmTaskExecuser.getUsername(), imMsg);
xmRecordService.addXmTaskRecord(xmTaskExecuser.getProjectId(), xmTaskExecuser.getTaskId(), "项目-任务-提交任务测试", "提交任务测试"+xmTaskExecuser.getUsername(),JSONObject.toJSONString(xmTaskExecuser),null);
}
/**
* 本人或者组长可以变更
@ -138,7 +89,8 @@ public class XmTaskExecuserService extends BaseService {
for (XmTaskExecuser xmTaskExecuser : xmTaskExecuserList) {
List<XmGroupVo> userGroups=groupService.getUserGroups(pgroups, xmTaskExecuser.getUserid());
XmTaskExecuser xmTaskExecuser2=new XmTaskExecuser();
xmTaskExecuser2.setId(xmTaskExecuser.getId());
xmTaskExecuser2.setTaskId(xmTaskExecuser.getTaskId());
xmTaskExecuser2.setUserid(xmTaskExecuser.getUserid());
xmTaskExecuser2.setStatus("7");
this.updateSomeFieldByPk(xmTaskExecuser2);
projectId=xmTaskExecuser.getProjectId();
@ -199,9 +151,9 @@ public class XmTaskExecuserService extends BaseService {
}
}
XmTaskExecuser xmTaskExecuser2=new XmTaskExecuser();
xmTaskExecuser2.setId(xmTaskExecuser.getId());
xmTaskExecuser2.setStatus("1");
xmTaskExecuser2.setIsLeader("1");
xmTaskExecuser2.setTaskId(xmTaskExecuser.getTaskId());
xmTaskExecuser2.setUserid(xmTaskExecuser.getUserid());
xmTaskExecuser2.setStatus("1");
this.updateSomeFieldByPk(xmTaskExecuser2);
/**
* 下面为推送任务执行人变更im通知消息
@ -216,160 +168,14 @@ public class XmTaskExecuserService extends BaseService {
updateXmTaskExeUseridsAndUsernamesByTaskId(taskId);
xmRecordService.addXmTaskRecord(projectId, taskId, "项目-任务-变更为执行人", xmTaskExecuser.getUsername()+"变更为任务执行人",null,null);
}
/**
* 结算
* 1 当前结算金额+已结算金额应该<=任务总预算
* 2 每个人的结算金额应该<=报价金额
* @param xmTaskExecuserList
*/
public void batchSettle(String execuserProcInstId,List<XmTaskExecuser> xmTaskExecuserList){
if(xmTaskExecuserList==null || xmTaskExecuserList.size()<=0) {
return;
}
XmTaskExecuser one=xmTaskExecuserList.get(0);
String projectId=one.getProjectId();
String taskId=one.getTaskId();
List<String> usernames=new ArrayList<>();
String subjectId="rwcl";
String subjectName="任务酬劳";
Map<String,Object> params=new HashMap<>();
params.put("taskId", taskId);
XmTask xmTaskDb=xmTaskService.selectOneObject(new XmTask(taskId));
if(xmTaskDb==null){
throw new BizException("任务已不存在,不允许申请结算");
}
if("3".equals(xmTaskDb.getTaskState())){
throw new BizException("任务状态为已结算,不能再申请结算");
} else if(!"2".equals(xmTaskDb.getTaskState())){
throw new BizException("任务状态必须是完工状态,才可以进行结算申请");
}
String projectName=xmTaskDb.getProjectName();
List<Map<String,Object>> actCostAmountList=xmProjectMCostUserService.listSumForSettleGroupByTaskIdAndUserid(params);
BigDecimal addSettleAmount=BigDecimal.ZERO;
BigDecimal allActCostAmount=BigDecimal.ZERO;
BigDecimal taskBudgetAt=NumberUtil.getBigDecimal(xmTaskDb.getBudgetAt(),BigDecimal.ZERO);
Map<String,Map<String,Object>> actCostAmountMap=new HashMap<>();
XmTaskExecuser execuserQuery=new XmTaskExecuser();
execuserQuery.setTaskId(taskId);
execuserQuery.setProjectId(projectId);
List<XmTaskExecuser> execuserDBList=this.selectListByWhere(execuserQuery);
Map<String,XmTaskExecuser> xmTaskExecuserDBMap=new HashMap<>();
for (XmTaskExecuser xmTaskExecuser : execuserDBList) {
xmTaskExecuserDBMap.put(xmTaskExecuser.getUserid(), xmTaskExecuser);
}
for (Map<String, Object> map : actCostAmountList) {
BigDecimal actCostAmount=NumberUtil.getBigDecimal(map.get("actCostAmount"), BigDecimal.ZERO);
allActCostAmount=allActCostAmount.add(actCostAmount);
actCostAmountMap.put((String) map.get("userid"), map);
}
for (XmTaskExecuser xmTaskExecuser : xmTaskExecuserList) {
XmTaskExecuser xmTaskExecuserDB =xmTaskExecuserDBMap.get(xmTaskExecuser.getUserid());
if(xmTaskExecuserDB==null) {
throw new BizException(xmTaskExecuser.getUsername()+"不在执行人列表中,不允许结算");
}
if("0".equals(xmTaskExecuserDB.getStatus())) {
throw new BizException(xmTaskExecuser.getUsername()+"候选排队中人员不能申请结算");
}
//结算状态0未结算1已部分结算2无需结算4已申请结算5结算失败6已全部结算
// 0/1/5状态可以结算
if("2".equals(xmTaskExecuserDB.getSettleStatus())) {
throw new BizException(xmTaskExecuser.getUsername()+"无需结算");
}
if("4".equals(xmTaskExecuserDB.getSettleStatus())) {
throw new BizException(xmTaskExecuserDB.getUsername()+"已有申请在审核中,不能再申请");
}
if("6".equals(xmTaskExecuserDB.getSettleStatus())) {
throw new BizException(xmTaskExecuserDB.getUsername()+"已经结算完毕,不能再申请");
}
if("1".equals(xmTaskExecuserDB.getBizFlowState())) {
throw new BizException(xmTaskExecuserDB.getUsername()+"已有申请在审判中,不能重复申请结算");
}
if( StringUtils.hasText(xmTaskExecuserDB.getSettleStatus()) && !"0".equals(xmTaskExecuserDB.getSettleStatus()) && !"1".equals(xmTaskExecuserDB.getSettleStatus()) && !"5".equals(xmTaskExecuserDB.getSettleStatus())) {
throw new BizException(xmTaskExecuserDB.getUsername()+"暂时还不能申请结算");
}
BigDecimal settleAmount=NumberUtil.getBigDecimal(xmTaskExecuser.getSettleAmount(), BigDecimal.ZERO);
BigDecimal quoteAmount=NumberUtil.getBigDecimal(xmTaskExecuserDB.getQuoteAmount(), BigDecimal.ZERO);
BigDecimal userActCostAmount=BigDecimal.ZERO;
Map<String, Object> userActCostAmountRow = (Map<String, Object>) actCostAmountMap.get(xmTaskExecuser.getUserid());
if(userActCostAmountRow!=null) {
userActCostAmount=NumberUtil.getBigDecimal(userActCostAmountRow.get("actCostAmount"),BigDecimal.ZERO);
}
if(settleAmount.add(userActCostAmount).compareTo(quoteAmount)>0) {
throw new BizException(xmTaskExecuserDB.getUsername()+"的结算金额不能大于报价金额,剩余"+quoteAmount.subtract(userActCostAmount)+"元可结算");
}
if(settleAmount.add(userActCostAmount).compareTo(taskBudgetAt)>0) {
throw new BizException(xmTaskExecuserDB.getUsername()+"的总结算金额不能大于任务总预算金额");
}
}
if(allActCostAmount.add(addSettleAmount).compareTo(taskBudgetAt)>0) {
throw new BizException(xmTaskDb.getName()+"结算总金额已经超出任务预算");
}
for (XmTaskExecuser xmTaskExecuser : xmTaskExecuserList) {
BigDecimal userActCostAmount=BigDecimal.ZERO;
Map<String, Object> userActCostAmountRow = (Map<String, Object>) actCostAmountMap.get(xmTaskExecuser.getUserid());
if(userActCostAmountRow!=null) {
userActCostAmount=NumberUtil.getBigDecimal(userActCostAmountRow.get("actCostAmount"),BigDecimal.ZERO);
}
XmTaskExecuser xmTaskExecuserDB =xmTaskExecuserDBMap.get(xmTaskExecuser.getUserid());
XmTaskExecuser xmTaskExecuser2=new XmTaskExecuser();
xmTaskExecuser2.setId(xmTaskExecuser.getId());
xmTaskExecuser2.setSettleStatus("4");
xmTaskExecuser2.setSettleAmount(xmTaskExecuser.getSettleAmount().add(userActCostAmount));
xmTaskExecuser2.setSettleWorkload(xmTaskExecuser.getSettleWorkload());
xmTaskExecuser2.setSettleTime(new Date());
this.updateSomeFieldByPk(xmTaskExecuser2);
projectId=xmTaskExecuser.getProjectId();
taskId=xmTaskExecuser.getTaskId();
usernames.add(xmTaskExecuserDB.getUsername());
XmProjectMCostUser costUser=new XmProjectMCostUser();
costUser.setUserid(xmTaskExecuser.getUserid());
costUser.setUsername(xmTaskExecuserDB.getUsername());
costUser.setActCostAmount(xmTaskExecuser.getSettleAmount());
costUser.setActWorkload(xmTaskExecuser.getSettleWorkload());
costUser.setBizDate(DateUtils.getDate());
costUser.setBizMonth(DateUtils.getDate().substring(0, 7));
costUser.setSubjectId(subjectId);
costUser.setSubjectId(subjectName);
costUser.setBizzStartDate(xmTaskExecuser.getStartTime());
costUser.setBizzEndDate(xmTaskExecuser.getEndTime());
costUser.setBizFlowState("0");
costUser.setCostType("1".equals(xmTaskDb.getTaskOut())?"1":"2");
costUser.setTaskId(xmTaskExecuser.getTaskId());
costUser.setTaskName(xmTaskDb.getName());
costUser.setCreateTime(new Date());
costUser.setProjectId(xmTaskExecuser.getProjectId());
costUser.setProjectName(projectName);
costUser.setPhaseId(xmTaskExecuser.getPhaseId());
costUser.setId(this.xmProjectMCostUserService.createKey("id"));
costUser.setExecuserProcInstId(execuserProcInstId);
costUser.setExecuserStatus("0");
this.xmProjectMCostUserService.insert(costUser);
xmRecordService.addXmCostRecord(projectId, taskId, "项目-任务-执行人进行结算", costUser.getUsername()+"提交结算",JSONObject.toJSONString(costUser),null);
this.pushMsgService.pushCssMsg(xmTaskExecuser.getBranchId(), costUser.getUserid(), costUser.getUsername(), costUser.getUsername()+"提交任务【"+xmTaskExecuser.getTaskId()+"-"+xmTaskExecuser.getTaskName()+"】结算");
}
//updateXmTaskExeUseridsAndUsernamesByTaskId(taskId);
String usernamestr=StringUtils.arrayToDelimitedString(usernames.toArray(), ",");
xmRecordService.addXmTaskRecord(projectId, taskId, "项目-任务-执行人进行结算", usernamestr+"提交结算",JSONObject.toJSONString(xmTaskExecuserList),null);
}
public void becomeCandidate(XmTaskExecuser xmTaskExecuser) {
XmTaskExecuser xmTaskExecuserNew=new XmTaskExecuser();
xmTaskExecuserNew.setId(xmTaskExecuser.getId());
xmTaskExecuserNew.setQuoteWeekday(xmTaskExecuser.getQuoteWeekday());
xmTaskExecuserNew.setQuoteWeekday(xmTaskExecuser.getQuoteWeekday());
xmTaskExecuserNew.setQuoteWorkload(xmTaskExecuser.getQuoteWorkload());
xmTaskExecuserNew.setQuoteAmount(xmTaskExecuser.getQuoteAmount());
xmTaskExecuserNew.setQuoteEndTime(xmTaskExecuser.getQuoteEndTime());
@ -384,7 +190,8 @@ public class XmTaskExecuserService extends BaseService {
}
public void quotePrice(XmTaskExecuser xmTaskExecuser) {
XmTaskExecuser xmTaskExecuserNew=new XmTaskExecuser();
xmTaskExecuserNew.setId(xmTaskExecuser.getId());
xmTaskExecuserNew.setTaskId(xmTaskExecuser.getTaskId());
xmTaskExecuserNew.setUserid(xmTaskExecuser.getUserid());
xmTaskExecuserNew.setQuoteWeekday(xmTaskExecuser.getQuoteWeekday());
xmTaskExecuserNew.setQuoteWorkload(xmTaskExecuser.getQuoteWorkload());
xmTaskExecuserNew.setQuoteAmount(xmTaskExecuser.getQuoteAmount());
@ -396,123 +203,7 @@ public class XmTaskExecuserService extends BaseService {
xmRecordService.addXmTaskRecord(xmTaskExecuser.getProjectId(), xmTaskExecuser.getTaskId(), "项目-任务-候选人报价", xmTaskExecuser.getUsername()+"提交报价信息",JSONObject.toJSONString(xmTaskExecuser),null);
}
/**
* 流程审批过程中回调该接口更新业务数据
* 如果发起流程时上送了restUrl则无论流程中是否配置了监听器都会在流程发生以下事件时推送数据过来
* eventName: PROCESS_STARTED 流程启动完成 全局
* PROCESS_COMPLETED 流程正常结束 全局
* PROCESS_CANCELLED 流程删除 全局
* create 人工任务启动
* complete 人工任务完成
* assignment 人工任务分配给了具体的人
* delete 人工任务被删除
* TASK_COMPLETED_FORM_DATA_UPDATE 人工任务提交完成后智能表单数据更新
*
* 其中 create/complete/assignment/delete事件是需要在模型中人工节点上配置了委托代理表达式 ${taskBizCallListener}才会推送过来
* 在人工任务节点上配置 任务监听器 建议事件为 complete,其它assignment/create/complete/delete也可以一般建议在complete,委托代理表达式 ${taskBizCallListener}
*
* @param flowVars {flowBranchId,agree,procInstId,startUserid,assignee,actId,taskName,mainTitle,branchId,bizKey,commentMsg,eventName,modelKey}
* @return 如果tips.isOk==false将影响流程提交
**/
@Transactional
public void processApprova(Map<String, Object> flowVars) {
String eventName=(String) flowVars.get("eventName");
String procInstId=(String) flowVars.get("procInstId");
String agree=(String) flowVars.get("agree");
String bizKey=(String) flowVars.get("bizKey");
XmTaskExecuser bizExecuser=null;
if("xm_task_execuser_settle_approva".equals(bizKey) ) {
if(!flowVars.containsKey("data")) {
throw new BizException("请上送结算业务数据flowVars.data");
}
bizExecuser = BaseUtils.fromMap((Map)flowVars.get("data"), XmTaskExecuser.class);
if(bizExecuser.getSettleAmount()==null || bizExecuser.getSettleAmount().compareTo(BigDecimal.ZERO)==0) {
throw new BizException("结算金额不能为0");
}
if(StringUtils.isEmpty(bizExecuser.getId())) {
throw new BizException("执行编号不能为空");
}
if(StringUtils.isEmpty(bizExecuser.getUserid())) {
throw new BizException("结算人员编号不能为空");
}
if(StringUtils.isEmpty(bizExecuser.getUsername())) {
throw new BizException("结算人员姓名不能为空");
}
if(StringUtils.isEmpty(bizExecuser.getProjectId())) {
throw new BizException("项目编号不能为空");
}
if(StringUtils.isEmpty(bizExecuser.getTaskId())) {
throw new BizException("任务编号不能为空");
}
if(StringUtils.isEmpty(bizExecuser.getBranchId())) {
throw new BizException("机构编号不能为空");
}
flowVars.put("execuserId", bizExecuser.getId());
flowVars.put("projectId", bizExecuser.getProjectId());
}else {
throw new BizException("不支持的业务,请上送业务编码【bizKey】参数");
}
if("complete".equals(eventName)) {
if("1".equals(agree)) {
this.updateFlowStateByProcInst("", flowVars);
}else {
this.updateFlowStateByProcInst("", flowVars);
}
}else {
if("PROCESS_STARTED".equals(eventName)) {
XmTaskExecuser execuser=new XmTaskExecuser();
execuser.setId(bizExecuser.getId());
execuser.setBranchId(bizExecuser.getBranchId());
execuser.setProjectId(bizExecuser.getProjectId());
execuser.setTaskId(bizExecuser.getTaskId());
execuser.setUserid(bizExecuser.getUserid());
execuser.setSettleAmount(bizExecuser.getSettleAmount());
execuser.setSettleWorkload(bizExecuser.getSettleWorkload());
List<XmTaskExecuser> execuserList=new ArrayList<>();
execuserList.add(execuser);
this.batchSettle(procInstId,execuserList);
flowVars.put("id", this.createKey("id"));
this.insert("insertProcessApprova", flowVars);
flowVars.put("settleStatus", "4");
flowVars.put("status","5");
this.updateFlowStateByProcInst("1", flowVars);
}else if("PROCESS_COMPLETED".equals(eventName)) {
if("1".equals(agree)) { //结算通过需要调用财务系统进行记账结算到用户的结算账户中//用户可以通过该账户提现取现金
// 需要调用财务系统进行记账结算到用户的结算账户中用户可以通过该账户提现取现金
cashOperateServie.shopBalancePayToClient(bizExecuser.getBranchId(),"platform",bizExecuser.getId(),bizExecuser.getSettleAmount(),bizExecuser.getTaskName()+"结算费用给执行人",bizExecuser.getUserid(),bizExecuser.getBranchId());
// 需要调用营销系统计算佣金
mkClient.pushActiExecOrder(bizExecuser.getTaskId(), bizExecuser.getUserid(), bizExecuser.getUsername(),bizExecuser.getBranchId(),bizExecuser.getTaskId(),new BigDecimal(1),bizExecuser.getSettleAmount(),bizExecuser.getSettleAmount(),bizExecuser.getSettleWorkload(),bizExecuser.getTaskName());
flowVars.put("settleStatus","6");
flowVars.put("status","6");
this.updateFlowStateByProcInst("2", flowVars);
//结算通过,更新费用表状态未1申请通过
this.xmProjectMCostUserService.updateExecuserStatusByExecuserProcInstId(procInstId,"1");
this.xmTaskService.updateActCostAndActWorkloadAfterSettle(bizExecuser.getTaskId(),"3");
}else {
//结算申请不通过需要删除成本表中相关数据还原执行表中相关数据
flowVars.put("settleStatus", "5");
flowVars.put("status","3");
this.updateFlowStateByProcInst("3", flowVars);
this.xmProjectMCostUserService.deleteByExecuserProcInstId(procInstId);
}
}else if("PROCESS_CANCELLED".equals(eventName)) {
flowVars.put("settleStatus", "0");
flowVars.put("status", "3");
this.updateFlowStateByProcInst("4", flowVars);
this.xmProjectMCostUserService.deleteByExecuserProcInstId(procInstId);
//结算申请不通过需要删除成本表中相关数据还原执行表中相关数据
}
}
}
private void updateFlowStateByProcInstForDeleteSuccess(Map<String, Object> flowVars) {
this.update("updateFlowStateByProcInstForDeleteSuccess", flowVars);
}
public void delete(XmTaskExecuser xmTaskExecuser){
super.deleteByPk(xmTaskExecuser);
@ -525,26 +216,7 @@ public class XmTaskExecuserService extends BaseService {
public void updateXmTaskExeUseridsAndUsernamesByTaskId(String taskId) {
this.update("updateXmTaskExeUseridsAndUsernamesByTaskId", taskId);
}
/**
* 将执行人编号姓名同步到task中的exe_userids,exe_usernames两个字段
* @param taskId
*/
public void updateXmTaskExeUseridsAndUsernamesAndTaskStateByTaskId(String taskId,String targetTaskState) {
Map<String,Object> task=new HashMap<>();
task.put("targetTaskState",targetTaskState);
task.put("taskId",taskId);
this.update("updateXmTaskExeUseridsAndUsernamesAndTaskStateByTaskId", task);
}
public void updateFlowStateByProcInst(String flowState,Map<String, Object> flowVars) {
flowVars.put("flowState", flowState);
flowVars.put("bizFlowState", flowState);
if("1".equals(flowState)) {
flowVars.put("bizProcInstId", flowVars.get("procInstId"));
}
this.update("updateProcessApprova", flowVars);
}
}
Loading…
Cancel
Save