装配派工:

1.人员组件bug
2.提示词
This commit is contained in:
Ledo 2025-05-17 13:44:07 +08:00
parent d41e4e2c61
commit 68c24314f5
10 changed files with 111 additions and 36 deletions

View File

@ -109,7 +109,7 @@ public interface ErrorCodeConstants {
ErrorCode TASK_DISPATCH_TASK_NO_PERMISSION_FOR_OPERATE = new ErrorCode(1_009_005, "任务不满足操作条件"); ErrorCode TASK_DISPATCH_TASK_NO_PERMISSION_FOR_OPERATE = new ErrorCode(1_009_005, "任务不满足操作条件");
ErrorCode TASK_DISPATCH_TASK_IS_OVER = new ErrorCode(1_009_007, "报工数量已完成"); ErrorCode TASK_DISPATCH_TASK_IS_OVER = new ErrorCode(1_009_007, "报工数量已完成");
ErrorCode TASK_DISPATCH_TASK_REPORT_AMOUNT_EXCESS = new ErrorCode(1_009_006, "无法超额报工"); ErrorCode TASK_DISPATCH_TASK_REPORT_AMOUNT_EXCESS = new ErrorCode(1_009_006, "无法超额报工");
ErrorCode TASK_REPORT_OTHER_PERSON_NO_SUBMIT = new ErrorCode(1_009_008, "其他人员尚未报工,无法结束生产"); ErrorCode TASK_REPORT_OTHER_PERSON_NO_SUBMIT = new ErrorCode(1_009_020, "其他人员尚未报工,无法结束生产");
/*************质量管理***********/ /*************质量管理***********/
ErrorCode UNQUALIFIED_NOTIFICATION_NOT_EXISTS = new ErrorCode(1_010_001, "品质异常通知单审核不存在"); ErrorCode UNQUALIFIED_NOTIFICATION_NOT_EXISTS = new ErrorCode(1_010_001, "品质异常通知单审核不存在");
ErrorCode QUALITY_FEEDBACK_NOT_EXISTS = new ErrorCode(1_010_002, "客户反馈质量不存在"); ErrorCode QUALITY_FEEDBACK_NOT_EXISTS = new ErrorCode(1_010_002, "客户反馈质量不存在");

View File

@ -1,10 +1,9 @@
package com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesignprogress; package com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesignprogress;
import lombok.*; import lombok.*;
import java.util.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.*;
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO; import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;

View File

@ -138,6 +138,8 @@ public class TaskDispatchDetailDO extends BaseDO {
private String procdureName; private String procdureName;
@TableField(exist = false) @TableField(exist = false)
private String type; private String type;
@TableField(exist = false)
private String ownerName;
/** /**
* 预计工时 * 预计工时
*/ */

View File

@ -18,6 +18,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatch
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatchdetailowner.TaskDispatchDetailOwnerDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatchdetailowner.TaskDispatchDetailOwnerDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskreport.TaskReportDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskreport.TaskReportDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -58,6 +59,12 @@ public interface TaskDispatchDetailMapper extends BaseMapperX<TaskDispatchDetail
} }
return dateRange; return dateRange;
} }
default List<TaskDispatchDetailDO> selectListByDeitalOwnerId(Long detailOwnerId){
MPJLambdaWrapper<TaskDispatchDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(TaskDispatchDetailDO.class)
.select("a.nickname as ownerName").leftJoin(AdminUserDO.class,"a",AdminUserDO::getId,TaskDispatchDetailDO::getOwner).eq(TaskDispatchDetailDO::getDetailOwnerId,detailOwnerId);
return selectList(query);
}
/*public static void main(String[] args) { /*public static void main(String[] args) {
// 示例假设传入的时间戳代表 2024 2 11 // 示例假设传入的时间戳代表 2024 2 11
LocalDate exampleDate = LocalDate.of(2025, 2, 13); LocalDate exampleDate = LocalDate.of(2025, 2, 13);
@ -133,7 +140,10 @@ public interface TaskDispatchDetailMapper extends BaseMapperX<TaskDispatchDetail
} }
default int updateByOwner(TaskDispatchDetailOwnerDO taskDispatchDetailOwnerDO, Set<String> owner){ default int updateByOwner(TaskDispatchDetailOwnerDO taskDispatchDetailOwnerDO, Set<String> owner){
UpdateWrapper<TaskDispatchDetailDO> wrapper = new UpdateWrapper(); UpdateWrapper<TaskDispatchDetailDO> wrapper = new UpdateWrapper();
wrapper.eq("detail_owner_id",taskDispatchDetailOwnerDO.getId()).in("owner",owner); wrapper.eq("detail_owner_id",taskDispatchDetailOwnerDO.getId());
if (CollUtil.isNotEmpty(owner)){
wrapper.in("owner",owner);
}
if (taskDispatchDetailOwnerDO.getProcedureId() != null) { if (taskDispatchDetailOwnerDO.getProcedureId() != null) {
wrapper.set("procedure_id", taskDispatchDetailOwnerDO.getProcedureId()); wrapper.set("procedure_id", taskDispatchDetailOwnerDO.getProcedureId());
} }

View File

@ -568,7 +568,10 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
.ne(TaskReportDO::getAmount, 0); .ne(TaskReportDO::getAmount, 0);
}}); }});
int historyReportAmount = historyReportList.stream().mapToInt(TaskReportDO::getAmount).sum(); int historyReportAmount = historyReportList.stream().mapToInt(TaskReportDO::getAmount).sum();
if (!taskDispatchDO.getDispatchType().equals("ASSEMBLE") && taskDispatchDetailDO.getAmount() <= historyReportAmount){ // if (!taskDispatchDO.getDispatchType().equals("ASSEMBLE") && taskDispatchDetailDO.getAmount() <= historyReportAmount){
// throw exception(TASK_DISPATCH_TASK_IS_OVER);
// }
if ( taskDispatchDetailDO.getAmount() <= historyReportAmount){
throw exception(TASK_DISPATCH_TASK_IS_OVER); throw exception(TASK_DISPATCH_TASK_IS_OVER);
} }
} }
@ -587,10 +590,16 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
.ne(TaskReportDO::getAmount, 0); .ne(TaskReportDO::getAmount, 0);
}}); }});
int historyReportAmount = historyReportList.stream().mapToInt(TaskReportDO::getAmount).sum(); int historyReportAmount = historyReportList.stream().mapToInt(TaskReportDO::getAmount).sum();
if (!taskDispatchDO.getDispatchType().equals("ASSEMBLE") && taskDispatchDetailDO.getAmount() <= historyReportAmount){ // if (!taskDispatchDO.getDispatchType().equals("ASSEMBLE") && taskDispatchDetailDO.getAmount() <= historyReportAmount){
// throw exception(TASK_DISPATCH_TASK_IS_OVER);
// }
// if(!taskDispatchDO.getDispatchType().equals("ASSEMBLE") && taskDispatchDetailDO.getAmount() < (historyReportAmount + operateReqVO.getAmount())){
// throw exception(TASK_DISPATCH_TASK_REPORT_AMOUNT_EXCESS);
// }
if ( taskDispatchDetailDO.getAmount() <= historyReportAmount){
throw exception(TASK_DISPATCH_TASK_IS_OVER); throw exception(TASK_DISPATCH_TASK_IS_OVER);
} }
if(!taskDispatchDO.getDispatchType().equals("ASSEMBLE") && taskDispatchDetailDO.getAmount() < (historyReportAmount + operateReqVO.getAmount())){ if( taskDispatchDetailDO.getAmount() < (historyReportAmount + operateReqVO.getAmount())){
throw exception(TASK_DISPATCH_TASK_REPORT_AMOUNT_EXCESS); throw exception(TASK_DISPATCH_TASK_REPORT_AMOUNT_EXCESS);
} }
} }
@ -643,37 +652,48 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
taskDispatchDetailDO.setProcedureStatus(TaskDispatchProcedureStatusEnum.COMPLETED.getCode()); taskDispatchDetailDO.setProcedureStatus(TaskDispatchProcedureStatusEnum.COMPLETED.getCode());
//装配看看是不是多人如果是多人判断一下 //装配看看是不是多人如果是多人判断一下
boolean allReport = true;
HashMap<Long,TaskDispatchDetailDO> dispatchDetailDOHashMap = new HashMap<>();
String msg = "";
if (taskDispatchDO.getDispatchType().equals("ASSEMBLE")){ if (taskDispatchDO.getDispatchType().equals("ASSEMBLE")){
List<TaskDispatchDetailDO> taskDispatchDetailDOS = taskDispatchDetailMapper.selectList(new LambdaQueryWrapperX<TaskDispatchDetailDO>().eq(TaskDispatchDetailDO::getDetailOwnerId, taskDispatchDetailDO.getDetailOwnerId())); List<TaskDispatchDetailDO> taskDispatchDetailDOS = taskDispatchDetailMapper.selectListByDeitalOwnerId(taskDispatchDetailDO.getDetailOwnerId());
List<Long> dispatchDetailId = new ArrayList<>();
for (TaskDispatchDetailDO dispatchDetailDO : taskDispatchDetailDOS) { for (TaskDispatchDetailDO dispatchDetailDO : taskDispatchDetailDOS) {
if (!dispatchDetailDO.getId().equals(taskDispatchDetailDO.getId()) && !(dispatchDetailDO.getProcedureStatus() == TaskDispatchProcedureStatusEnum.COMPLETED.getCode())){ if (!dispatchDetailDO.getId().equals(taskDispatchDetailDO.getId()) && !(dispatchDetailDO.getProcedureStatus() == TaskDispatchProcedureStatusEnum.COMPLETED.getCode())){
dispatchDetailId.add(dispatchDetailDO.getId()); dispatchDetailDOHashMap.put(dispatchDetailDO.getId(),dispatchDetailDO);
} }
} }
boolean allReport = true; if (CollUtil.isNotEmpty(dispatchDetailDOHashMap)){
if (CollUtil.isNotEmpty(dispatchDetailId)){ List<HashMap<Long, Long>> hashMaps = taskDispatchDetailMapper.sumAssembleReport(new ArrayList<>(dispatchDetailDOHashMap.keySet()));
List<HashMap<Long, Long>> hashMaps = taskDispatchDetailMapper.sumAssembleReport(dispatchDetailId);
HashMap<Long,Long> reportMap = new HashMap<>(); HashMap<Long,Long> reportMap = new HashMap<>();
for (HashMap<Long, Long> hashMap : hashMaps) { for (HashMap<Long, Long> hashMap : hashMaps) {
reportMap.putAll(hashMap); reportMap.put(hashMap.get("detailId"),hashMap.get("amount"));
} }
for (Long l : dispatchDetailDOHashMap.keySet()) {
for (Long l : dispatchDetailId) {
if (!reportMap.containsKey(l)){ if (!reportMap.containsKey(l)){
msg = msg + dispatchDetailDOHashMap.get(l).getOwnerName() + ",";
allReport = false; allReport = false;
break;
} }
} }
if (!msg.equals("")){
msg = msg.substring(0,msg.length()-1) + "还没有报工,请确认";
}
} }
if (!allReport){ if (!allReport){
throw exception(TASK_REPORT_OTHER_PERSON_NO_SUBMIT); throw exception(new ErrorCode(1_009_019,msg));
} }
if (allReport){ if (allReport){
TaskDispatchDetailOwnerDO taskDispatchDetailOwnerDO = taskDispatchDetailOwnerMapper.selectById(taskDispatchDetailDO.getDetailOwnerId()); TaskDispatchDetailOwnerDO taskDispatchDetailOwnerDO = taskDispatchDetailOwnerMapper.selectById(taskDispatchDetailDO.getDetailOwnerId());
taskDispatchDetailOwnerDO.setProcedureStatus(TaskDispatchProcedureStatusEnum.COMPLETED.getCode()); taskDispatchDetailOwnerDO.setProcedureStatus(TaskDispatchProcedureStatusEnum.COMPLETED.getCode());
taskDispatchDetailOwnerMapper.updateById(taskDispatchDetailOwnerDO); taskDispatchDetailOwnerMapper.updateById(taskDispatchDetailOwnerDO);
TaskDispatchDetailOwnerDO ownerDO = new TaskDispatchDetailOwnerDO();
ownerDO.setId(taskDispatchDetailOwnerDO.getId());
ownerDO.setProcedureStatus(TaskDispatchProcedureStatusEnum.COMPLETED.getCode());
taskDispatchDetailMapper.updateByOwner(ownerDO,null);
} }
} }
//子项目装配是否完成 //子项目装配是否完成
@ -700,9 +720,13 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
} }
} }
if (CollUtil.isNotEmpty(productionList)){ if (CollUtil.isNotEmpty(productionList)){
if (CollUtil.isNotEmpty(dispatchDetailDOHashMap)){
productionList = productionList.stream().filter((e -> !dispatchDetailDOHashMap.keySet().contains(e.getId()))).collect(Collectors.toList());
}
for (TaskDispatchDetailDO dispatchDetailDO : productionList) { for (TaskDispatchDetailDO dispatchDetailDO : productionList) {
if (!dispatchDetailDO.getId().equals(taskDispatchDetailDO.getId()) && if (!dispatchDetailDO.getId().equals(taskDispatchDetailDO.getId()) && dispatchDetailDO.getProcedureStatus() !=TaskDispatchProcedureStatusEnum.COMPLETED.getCode()){
dispatchDetailDO.getProcedureStatus() !=TaskDispatchProcedureStatusEnum.COMPLETED.getCode()){
//如果其他的有未完成的 //如果其他的有未完成的
isProjectSubAssembleOver = false; isProjectSubAssembleOver = false;
break; break;
@ -718,9 +742,11 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
bdgzsomthingMapper.updateById(bdgzsomthingDO); bdgzsomthingMapper.updateById(bdgzsomthingDO);
} }
} }
if (taskDispatchDO.getDispatchType().equals("PRODUCTION") && isBomDetailProductionOver){ if (taskDispatchDO.getDispatchType().equals("PRODUCTION") && isBomDetailProductionOver){
pgMasterService.insertPgList(planDO.getId(),planDO.getProjectId(),taskDispatchDO.getBomDetailId()); pgMasterService.insertPgList(planDO.getId(),planDO.getProjectId(),taskDispatchDO.getBomDetailId());
}else if (taskDispatchDO.getDispatchType().equals("ASSEMBLE") && isProjectSubAssembleOver){ }else if (taskDispatchDO.getDispatchType().equals("ASSEMBLE") && isProjectSubAssembleOver ){
zjPgMasterService.insertZjList(planDO.getId(),planDO.getProjectId(),taskDispatchDO.getProjectSubId()); zjPgMasterService.insertZjList(planDO.getId(),planDO.getProjectId(),taskDispatchDO.getProjectSubId());
} }
// // TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectById(taskDispatchDetailDO.getDispatchId()); // // TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectById(taskDispatchDetailDO.getDispatchId());

View File

@ -103,7 +103,7 @@
GROUP BY t.id GROUP BY t.id
</select> </select>
<select id="sumAssembleReport" parameterType="java.util.List"> <select id="sumAssembleReport" parameterType="java.util.List">
select t.dispatch_detail_id,count(t.id) from pro_task_report t where t.dispatch_detail_id in select t.dispatch_detail_id as detailId,count(t.id) as amount from pro_task_report t where t.dispatch_detail_id in
<foreach collection="list" item="id" open="(" separator="," close=")"> <foreach collection="list" item="id" open="(" separator="," close=")">
#{id} #{id}
</foreach> </foreach>

View File

@ -314,6 +314,7 @@ v-for="dict in userInit" :key="dict.id"
readonly readonly
:disabled="detailDisabled || row.beginProduce != 0 " :disabled="detailDisabled || row.beginProduce != 0 "
@click.prevent="handleClick(row.owners,$index)" @click.prevent="handleClick(row.owners,$index)"
:title="row.ownerNames"
> >
<template #append <template #append
><el-button ><el-button

View File

@ -121,7 +121,7 @@ const getList = async () => {
loading.value = true loading.value = true
// //
try { try {
postList.value = []; // postList.value = [];
list.value = [] list.value = []
var hasSet = new Set; var hasSet = new Set;
const data = await UserApi.getUserPage(queryParams) const data = await UserApi.getUserPage(queryParams)
@ -150,8 +150,12 @@ const getList = async () => {
beforeOwnerList.value.forEach(item =>{ beforeOwnerList.value.forEach(item =>{
list.value.forEach(item1 =>{ list.value.forEach(item1 =>{
if(item == item1.id){ if(item == item1.id){
multipleSelection.value.push(item1); var id = multipleSelection.value. some(item2 => item2.id === item)
if(!id){
multipleSelection.value.push(item1);
}
multipleTable.value.toggleRowSelection(item1, true) multipleTable.value.toggleRowSelection(item1, true)
} }
}) })
}) })
@ -161,12 +165,28 @@ const getList = async () => {
total.value = 0 total.value = 0
} }
hasSet.forEach(item =>{ if(!arrayEmpty(multipleSelection.value)){
postList.value.push({ let seenIds = new Set();
label:item, let uniqueItems = multipleSelection.value.filter(item => {
value:item // id false true
}) if (seenIds.has(item.id)) {
}) return false;
} else {
seenIds.add(item.id);
return true;
}
});
multipleSelection.value = uniqueItems
}
// if(arrayEmpty(postList.value)){
// hasSet.forEach(item =>{
// postList.value.push({
// label:item,
// value:item
// })
// })
// }
}else{ }else{
list.value = [] list.value = []
total.value = 0 total.value = 0
@ -300,6 +320,15 @@ const faindex =ref()
const open = async (owners,index) => { const open = async (owners,index) => {
multipleSelection.value=[] multipleSelection.value=[]
console.log(owners) console.log(owners)
postList.value = []
postList.value.push({
label:'4',
value:'4'
})
postList.value.push({
label:'5',
value:'5'
})
beforeOwnerList.value = owners; beforeOwnerList.value = owners;
faindex.value=index faindex.value=index
dialogVisible.value = true dialogVisible.value = true

View File

@ -138,8 +138,12 @@ const handleComplate = async () => {
id: detailInfo.value?.id, id: detailInfo.value?.id,
active: 'FINISH', active: 'FINISH',
} }
const data = await postOperateAPI(params) try {
isLoading.value = false const data = await postOperateAPI(params);
} catch (error) {
} finally {
isLoading.value = false;
}
const url = `/pages/productionReport/productionReport-detail?id=${detailInfo.value.id}` const url = `/pages/productionReport/productionReport-detail?id=${detailInfo.value.id}`
uni.redirectTo({ uni.redirectTo({
url, url,

View File

@ -136,8 +136,12 @@ const handleComplate = async () => {
id: detailInfo.value?.id, id: detailInfo.value?.id,
active: 'FINISH', active: 'FINISH',
} }
const data = await postOperateAPI(params) try {
isLoading.value = false const data = await postOperateAPI(params);
} catch (error) {
} finally {
isLoading.value = false;
}
const url = `/pages/productionReport/productionReport-detail?id=${detailInfo.value.id}` const url = `/pages/productionReport/productionReport-detail?id=${detailInfo.value.id}`
uni.redirectTo({ uni.redirectTo({
url, url,