修改提交

This commit is contained in:
z 2025-05-15 14:43:34 +08:00
parent d003a4a9aa
commit df4bc39ad9
9 changed files with 126 additions and 63 deletions

View File

@ -56,7 +56,9 @@ public class TaskReportRespVO {
@Schema(description = "报工人") @Schema(description = "报工人")
@ExcelProperty("报工人") @ExcelProperty("报工人")
private String ownerName; private String ownerName;
@Schema(description = "原因说明")
@ExcelProperty("原因说明")
private String remark;
@Schema(description = "报工工序") @Schema(description = "报工工序")
@ExcelProperty("报工工序") @ExcelProperty("报工工序")
private String procedureName; private String procedureName;

View File

@ -52,5 +52,7 @@ public class TaskReportSaveReqVO {
@Schema(description = "报工工时", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "报工工时", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "报工工时不能为空") @NotNull(message = "报工工时不能为空")
private BigDecimal workTime; private BigDecimal workTime;
@Schema(description = "原因说明", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "原因说明不能为空")
private String remark;
} }

View File

@ -81,6 +81,7 @@ public class TaskDispatchDetailDO extends BaseDO {
private LocalDateTime endTime; private LocalDateTime endTime;
private Long dispatchType; private Long dispatchType;
private String postId; private String postId;
private String isOutsourcing;
/** /**
* 工序状态 默认 已提交 已完成 0 1 2 * 工序状态 默认 已提交 已完成 0 1 2
*/ */

View File

@ -69,6 +69,8 @@ public class TaskReportDO extends BaseDO {
*/ */
private BigDecimal workTime; private BigDecimal workTime;
private String workType;
private String remark;
@TableField(exist = false) @TableField(exist = false)
private String projectName; private String projectName;

View File

@ -163,7 +163,7 @@ public interface TaskDispatchMapper extends BaseMapperX<TaskDispatchDO> {
query.selectAll(TaskDispatchDO.class) query.selectAll(TaskDispatchDO.class)
.select("z.name as materialName", "z.procedure_type as materialType", "SUM(COALESCE(d.work_time, 0)) as amount") .select("z.name as materialName", "z.procedure_type as materialType", "SUM(COALESCE(d.work_time, 0)) as amount")
.select("p.grade_cost as shiJiMoney","u1.nickname as ownerName","p.name as name") .select("p.grade_cost as shiJiMoney","u1.nickname as ownerName","p.name as name")
.select(" ROUND(SUM(COALESCE(d.work_time, 0)) * p.grade_cost, 2) as zanGuMoney") .select(" ROUND(SUM(CASE WHEN d.work_type = 1 THEN COALESCE(d.work_time, 0) * p.grade_cost ELSE COALESCE(d.work_time, 0) END), 2) as zanGuMoney")
.leftJoin(TaskDispatchDetailDO.class, "x", TaskDispatchDetailDO::getDispatchId,TaskDispatchDO::getId) .leftJoin(TaskDispatchDetailDO.class, "x", TaskDispatchDetailDO::getDispatchId,TaskDispatchDO::getId)
.leftJoin(ProcedureDO.class, "z", ProcedureDO::getId, TaskDispatchDetailDO::getProcedureId) .leftJoin(ProcedureDO.class, "z", ProcedureDO::getId, TaskDispatchDetailDO::getProcedureId)
.leftJoin(TaskReportDO.class, "d", TaskReportDO::getDispatchDetailId,TaskDispatchDetailDO::getId) .leftJoin(TaskReportDO.class, "d", TaskReportDO::getDispatchDetailId,TaskDispatchDetailDO::getId)

View File

@ -37,6 +37,8 @@ import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService
import com.chanko.yunxi.mes.module.heli.service.zjpgmaster.ZjPgMasterService; import com.chanko.yunxi.mes.module.heli.service.zjpgmaster.ZjPgMasterService;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO; import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
import com.chanko.yunxi.mes.module.system.service.user.AdminUserService; import com.chanko.yunxi.mes.module.system.service.user.AdminUserService;
import io.minio.messages.Item;
import org.checkerframework.checker.units.qual.N;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -501,6 +503,11 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
}else{ }else{
lastReportDO.setOwner(taskDispatchDetailDO.getOwner()); lastReportDO.setOwner(taskDispatchDetailDO.getOwner());
} }
if ("Y".equals(taskDispatchDetailDO.getIsOutsourcing())){
lastReportDO.setWorkType("2");
}else {
lastReportDO.setWorkType("1");
}
//更新生产计划单 //更新生产计划单
if (planDO.getStatus() != 2 && planDO.getStatus()!=3){ if (planDO.getStatus() != 2 && planDO.getStatus()!=3){
planDO.setStatus(2); planDO.setStatus(2);
@ -513,6 +520,11 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
taskReportMapper.updateById(lastReportDO); taskReportMapper.updateById(lastReportDO);
break; break;
case SUBMIT: case SUBMIT:
if ("Y".equals(taskDispatchDetailDO.getIsOutsourcing())){
lastReportDO.setWorkType("2");
}else {
lastReportDO.setWorkType("1");
}
lastReportDO.setAmount(operateReqVO.getAmount()) lastReportDO.setAmount(operateReqVO.getAmount())
.setWorkTime(operateReqVO.getWorkTime()) .setWorkTime(operateReqVO.getWorkTime())
.setReportTime(now) .setReportTime(now)
@ -685,7 +697,18 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
} }
private void createTaskDispatchDetailList(Long dispatchId, List<TaskDispatchDetailDO> list) { private void createTaskDispatchDetailList(Long dispatchId, List<TaskDispatchDetailDO> list) {
list.forEach(o -> o.setDispatchId(dispatchId)); // list.forEach(o -> o.setDispatchId(dispatchId));
list = list.stream()
.peek(item -> {
item.setDispatchId(dispatchId);
if ("true".equals(item.getIsOutsourcing())) {
// 外协处理逻辑
item.setIsOutsourcing("Y");
}else {
item.setIsOutsourcing("N");
}
})
.collect(Collectors.toList());
// 分组更新与插入 // 分组更新与插入
List<TaskDispatchDetailDO> updateList = list.stream().filter(o -> o.getId() != null).collect(Collectors.toList()); List<TaskDispatchDetailDO> updateList = list.stream().filter(o -> o.getId() != null).collect(Collectors.toList());
List<TaskDispatchDetailDO> insertList = list.stream().filter(o -> o.getId() == null).collect(Collectors.toList()); List<TaskDispatchDetailDO> insertList = list.stream().filter(o -> o.getId() == null).collect(Collectors.toList());

View File

@ -10,6 +10,7 @@ export interface TaskReportVO {
reportTime: Date reportTime: Date
hasReport: number hasReport: number
status: number status: number
remark:string
} }
// 查询任务报工分页 // 查询任务报工分页

View File

@ -190,7 +190,9 @@ class="!w-260px" v-model="formData.createTime" type="date" value-format="x"
<el-checkbox label="刻字" size="large" border /> <el-checkbox label="刻字" size="large" border />
<el-checkbox label="电焊" size="large" border /> <el-checkbox label="电焊" size="large" border />
<el-checkbox label="钻孔" size="large" border /> <el-checkbox label="钻孔" size="large" border />
<el-checkbox label="装配" size="large" border /> <!-- <el-checkbox label="装配" size="large" border />-->
<el-checkbox label="编程" size="large" border />
<el-checkbox label="开粗" size="large" border />
</el-checkbox-group> </el-checkbox-group>
<!-- <el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem">新增</el-button> --> <!-- <el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem">新增</el-button> -->
</el-col> </el-col>
@ -201,7 +203,12 @@ class="!w-260px" v-model="formData.createTime" type="date" value-format="x"
v-loading="subFormLoading" label-width="0"> v-loading="subFormLoading" label-width="0">
<el-table :data="formData.taskDispatchDetails" height="250" > <el-table :data="formData.taskDispatchDetails" height="250" >
<el-table-column fixed label="顺序号" align="center" prop="sort" width="145px" > <el-table-column fixed label="是否外协" align="center" width="100">
<template #default="{ row }">
<el-checkbox v-model="row.isOutsourcing" @change="handleOutsourcingChange(row)" :disabled="detailDisabled||row.beginProduce != 0 || row.procedureStatus != 0"/>
</template>
</el-table-column>
<el-table-column fixed label="顺序号" align="center" prop="sort" width="120px" >
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-form-item :prop="`${$index}.sort`" :rules="subFormRules.sort" class="mb-0px!"> <el-form-item :prop="`${$index}.sort`" :rules="subFormRules.sort" class="mb-0px!">
<el-input-number <el-input-number
@ -241,7 +248,7 @@ class="!w-260px" v-model="formData.createTime" type="date" value-format="x"
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed label="派工类型" align="center" prop="dispatchType" width="145px"> <el-table-column fixed label="派工类型" align="center" prop="dispatchType" width="145px">
<template #header> <span class="hl-table_header">*</span>派工类型</template> <template #header>派工类型</template>
<template #default="{ row }"> <template #default="{ row }">
<el-radio-group size="small" :disabled="detailDisabled||row.beginProduce != 0 || row.procedureStatus != 0" v-model="row.dispatchType" @change="()=>dispatchTypeHasChange(row)"> <el-radio-group size="small" :disabled="detailDisabled||row.beginProduce != 0 || row.procedureStatus != 0" v-model="row.dispatchType" @change="()=>dispatchTypeHasChange(row)">
<el-radio-button :label="1">人员</el-radio-button> <el-radio-button :label="1">人员</el-radio-button>
@ -256,7 +263,7 @@ class="!w-260px" v-model="formData.createTime" type="date" value-format="x"
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="负责人" align="center" prop="owner" width="135px"> <el-table-column label="负责人" align="center" prop="owner" width="135px">
<template #header> <span class="hl-table_header">*</span>负责人</template> <template #header>负责人</template>
<template #default="{ row , $index}"> <template #default="{ row , $index}">
<el-form-item :prop="`${$index}.owner`" class="mb-0px!"> <el-form-item :prop="`${$index}.owner`" class="mb-0px!">
<el-select :disabled="detailDisabled||row.beginProduce != 0 || row.procedureStatus != 0" clearable filterable v-if="row.dispatchType==1 " v-model="row.owner" placeholder="请选择负责人" style="max-width: 110px"> <el-select :disabled="detailDisabled||row.beginProduce != 0 || row.procedureStatus != 0" clearable filterable v-if="row.dispatchType==1 " v-model="row.owner" placeholder="请选择负责人" style="max-width: 110px">
@ -292,9 +299,9 @@ v-model="row.owner" :disabled="detailDisabled || row.procedureStatus != 0"
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="预计开始日期" min-width="170px"> <el-table-column label="预计开始日期" min-width="170px">
<template #header> <span class="hl-table_header">*</span>预计开始日期</template> <template #header> 预计开始日期</template>
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-form-item :prop="`${$index}.startTime`" :rules="subFormRules.startTime" class="mb-0px!"> <el-form-item :prop="`${$index}.startTime`" class="mb-0px!">
<el-date-picker <el-date-picker
:disabled="detailDisabled " v-model="row.startTime" :disabled="detailDisabled " v-model="row.startTime"
type="date" value-format="x" placeholder="选择预计开始日期" @change="changePrepTime('START',$index,row)" /> type="date" value-format="x" placeholder="选择预计开始日期" @change="changePrepTime('START',$index,row)" />
@ -302,9 +309,9 @@ v-model="row.owner" :disabled="detailDisabled || row.procedureStatus != 0"
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="预计结束日期" min-width="170px"> <el-table-column label="预计结束日期" min-width="170px">
<template #header> <span class="hl-table_header">*</span>预计结束日期</template> <template #header>预计结束日期</template>
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-form-item :prop="`${$index}.endTime`" :rules="subFormRules.endTime" class="mb-0px!"> <el-form-item :prop="`${$index}.endTime`" class="mb-0px!">
<el-date-picker <el-date-picker
:disabled=" detailDisabled" v-model="row.endTime" :disabled=" detailDisabled" v-model="row.endTime"
type="date" value-format="x" placeholder="选择预计结束日期" @change="changePrepTime('END',$index,row)"/> type="date" value-format="x" placeholder="选择预计结束日期" @change="changePrepTime('END',$index,row)"/>
@ -312,9 +319,9 @@ v-model="row.owner" :disabled="detailDisabled || row.procedureStatus != 0"
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="预计工时" align="center" prop="workTime" width="145px"> <el-table-column label="预计工时" align="center" prop="workTime" width="145px">
<template #header> <span class="hl-table_header">*</span>预计工时</template> <template #header> 预计工时</template>
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-form-item :prop="`${$index}.workTime`" :rules="subFormRules.workTime" class="mb-0px!"> <el-form-item :prop="`${$index}.workTime`" class="mb-0px!">
<el-input-number <el-input-number
min="0" :precision="2" class="!w-240px" min="0" :precision="2" class="!w-240px"
:disabled="detailDisabled " v-model="row.workTime" :disabled="detailDisabled " v-model="row.workTime"
@ -323,9 +330,9 @@ min="0" :precision="2" class="!w-240px"
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="派工数量" align="center" prop="amount" width="145px"> <el-table-column label="派工数量" align="center" prop="amount" width="145px">
<template #header> <span class="hl-table_header">*</span>派工数量</template> <template #header>派工数量</template>
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-form-item :prop="`${$index}.amount`" :rules="subFormRules.amount" class="mb-0px!"> <el-form-item :prop="`${$index}.amount`" class="mb-0px!">
<el-input-number <el-input-number
min="0" :max="formData.amount" :precision="0" class="!w-240px" min="0" :max="formData.amount" :precision="0" class="!w-240px"
:disabled="detailDisabled" v-model="row.amount" :disabled="detailDisabled" v-model="row.amount"
@ -343,12 +350,12 @@ v-model="row.deviceModel"
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="工序要点" prop="summary" min-width="130px"> <el-table-column label="备注" prop="summary" min-width="130px">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-form-item :prop="`${$index}.summary`" class="mb-0px!"> <el-form-item :prop="`${$index}.summary`" class="mb-0px!">
<el-input <el-input
:disabled="detailDisabled ||row.beginProduce != 0 || row.procedureStatus != 0" v-model="row.summary" :disabled="detailDisabled ||row.beginProduce != 0 || row.procedureStatus != 0" v-model="row.summary"
placeholder="请输入工序要点" /> placeholder="请输入备注" />
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
@ -1193,6 +1200,11 @@ const queryData = async (id?: number) => {
checkList.value = []; checkList.value = [];
if(formData.value.taskDispatchDetails!=null){ if(formData.value.taskDispatchDetails!=null){
formData.value.taskDispatchDetails.forEach(item=>{ formData.value.taskDispatchDetails.forEach(item=>{
if ("Y"==item.isOutsourcing){
item.isOutsourcing=true
}else{
item.isOutsourcing=false
}
procedureList.value.forEach(items =>{ procedureList.value.forEach(items =>{
if(items.id == item.procedureId){ if(items.id == item.procedureId){
checkList.value.push(items.name) checkList.value.push(items.name)
@ -1268,6 +1280,18 @@ const submitForm = async (operate) => {
} }
var ownerIsNull = false; var ownerIsNull = false;
for(var i = 0 ; i < formData.value.taskDispatchDetails.length ; i++){ for(var i = 0 ; i < formData.value.taskDispatchDetails.length ; i++){
if( formData.value.taskDispatchDetails[i].startTime == undefined || formData.value.taskDispatchDetails[i].startTime == null ||formData.value.taskDispatchDetails[i].startTime == ''){
message.error("第"+(i+1)+'行预计开始日期为空,请确认')
return
}
if( formData.value.taskDispatchDetails[i].endTime == undefined || formData.value.taskDispatchDetails[i].endTime == null ||formData.value.taskDispatchDetails[i].endTime == ''){
message.error("第"+(i+1)+'行预计结束日期为空,请确认')
return
}
if( formData.value.taskDispatchDetails[i].amount == undefined || formData.value.taskDispatchDetails[i].amount == null ||formData.value.taskDispatchDetails[i].amount == ''){
message.error("第"+(i+1)+'行派工数量为空,请确认')
return
}
if(formData.value.taskDispatchDetails[i].dispatchType ==2){ if(formData.value.taskDispatchDetails[i].dispatchType ==2){
if( formData.value.taskDispatchDetails[i].postId == undefined || formData.value.taskDispatchDetails[i].postId == null ||formData.value.taskDispatchDetails[i].postId == ''){ if( formData.value.taskDispatchDetails[i].postId == undefined || formData.value.taskDispatchDetails[i].postId == null ||formData.value.taskDispatchDetails[i].postId == ''){
message.error('请选择岗位!') message.error('请选择岗位!')
@ -1461,6 +1485,9 @@ const onDeleteItem = async (row,index) => {
let id = row.id let id = row.id
if (id) await TaskDispatchApi.deleteTaskDispatchDetail(id) if (id) await TaskDispatchApi.deleteTaskDispatchDetail(id)
message.success(t('common.delSuccess')) message.success(t('common.delSuccess'))
}
const handleOutsourcingChange= async (row: any) => {
} }
const handleSelectedProcedure = async (row: any) => { const handleSelectedProcedure = async (row: any) => {
console.log(row); console.log(row);

View File

@ -13,6 +13,9 @@
<el-form-item label="报工数量" prop="amount"> <el-form-item label="报工数量" prop="amount">
<el-input v-model="formData.amount" placeholder="请输入报工数量" /> <el-input v-model="formData.amount" placeholder="请输入报工数量" />
</el-form-item> </el-form-item>
<el-form-item label="原因说明" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入原因说明" />
</el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button> <el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
@ -42,10 +45,12 @@ const formData = ref({
hasReport: undefined, hasReport: undefined,
status: undefined, status: undefined,
workTime: undefined, workTime: undefined,
remark:undefined,
}) })
const formRules = reactive({ const formRules = reactive({
amount: [{ required: true, message: '报工数量不能为空', trigger: 'blur' }], amount: [{ required: true, message: '报工数量不能为空', trigger: 'blur' }],
workTime: [{ required: true, message: '报工工时不能为空', trigger: 'blur' }], workTime: [{ required: true, message: '报工工时不能为空', trigger: 'blur' }],
remark: [{ required: true, message: '原因说明不能为空', trigger: 'blur' }],
}) })
const formRef = ref() // Ref const formRef = ref() // Ref