修改提交

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 = "报工人")
@ExcelProperty("报工人")
private String ownerName;
@Schema(description = "原因说明")
@ExcelProperty("原因说明")
private String remark;
@Schema(description = "报工工序")
@ExcelProperty("报工工序")
private String procedureName;

View File

@ -52,5 +52,7 @@ public class TaskReportSaveReqVO {
@Schema(description = "报工工时", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "报工工时不能为空")
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 Long dispatchType;
private String postId;
private String isOutsourcing;
/**
* 工序状态 默认 已提交 已完成 0 1 2
*/

View File

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

View File

@ -163,7 +163,7 @@ public interface TaskDispatchMapper extends BaseMapperX<TaskDispatchDO> {
query.selectAll(TaskDispatchDO.class)
.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(" 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(ProcedureDO.class, "z", ProcedureDO::getId, TaskDispatchDetailDO::getProcedureId)
.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.system.dal.dataobject.user.AdminUserDO;
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.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
@ -501,6 +503,11 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
}else{
lastReportDO.setOwner(taskDispatchDetailDO.getOwner());
}
if ("Y".equals(taskDispatchDetailDO.getIsOutsourcing())){
lastReportDO.setWorkType("2");
}else {
lastReportDO.setWorkType("1");
}
//更新生产计划单
if (planDO.getStatus() != 2 && planDO.getStatus()!=3){
planDO.setStatus(2);
@ -513,6 +520,11 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
taskReportMapper.updateById(lastReportDO);
break;
case SUBMIT:
if ("Y".equals(taskDispatchDetailDO.getIsOutsourcing())){
lastReportDO.setWorkType("2");
}else {
lastReportDO.setWorkType("1");
}
lastReportDO.setAmount(operateReqVO.getAmount())
.setWorkTime(operateReqVO.getWorkTime())
.setReportTime(now)
@ -685,7 +697,18 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
}
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> insertList = list.stream().filter(o -> o.getId() == null).collect(Collectors.toList());

View File

@ -1,43 +1,44 @@
import request from '@/config/axios'
export interface TaskReportVO {
id: number
dispatchDetailId: number
owner: number
amount: number
startTime: Date
endTime: Date
reportTime: Date
hasReport: number
status: number
}
// 查询任务报工分页
export const getTaskReportPage = async (params) => {
return await request.get({ url: `/heli/task-report/page`, params })
}
// 查询任务报工详情
export const getTaskReport = async (id: number) => {
return await request.get({ url: `/heli/task-report/get?id=` + id })
}
// 新增任务报工
export const createTaskReport = async (data: TaskReportVO) => {
return await request.post({ url: `/heli/task-report/create`, data })
}
// 修改任务报工
export const updateTaskReport = async (data: TaskReportVO) => {
return await request.put({ url: `/heli/task-report/update`, data })
}
// 删除任务报工
export const deleteTaskReport = async (id: number) => {
return await request.delete({ url: `/heli/task-report/delete?id=` + id })
}
// 导出任务报工 Excel
export const exportTaskReport = async (params) => {
return await request.download({ url: `/heli/task-report/export-excel`, params })
}
import request from '@/config/axios'
export interface TaskReportVO {
id: number
dispatchDetailId: number
owner: number
amount: number
startTime: Date
endTime: Date
reportTime: Date
hasReport: number
status: number
remark:string
}
// 查询任务报工分页
export const getTaskReportPage = async (params) => {
return await request.get({ url: `/heli/task-report/page`, params })
}
// 查询任务报工详情
export const getTaskReport = async (id: number) => {
return await request.get({ url: `/heli/task-report/get?id=` + id })
}
// 新增任务报工
export const createTaskReport = async (data: TaskReportVO) => {
return await request.post({ url: `/heli/task-report/create`, data })
}
// 修改任务报工
export const updateTaskReport = async (data: TaskReportVO) => {
return await request.put({ url: `/heli/task-report/update`, data })
}
// 删除任务报工
export const deleteTaskReport = async (id: number) => {
return await request.delete({ url: `/heli/task-report/delete?id=` + id })
}
// 导出任务报工 Excel
export const exportTaskReport = async (params) => {
return await request.download({ url: `/heli/task-report/export-excel`, params })
}

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-group>
<!-- <el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem">新增</el-button> -->
</el-col>
@ -201,7 +203,12 @@ class="!w-260px" v-model="formData.createTime" type="date" value-format="x"
v-loading="subFormLoading" label-width="0">
<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 }">
<el-form-item :prop="`${$index}.sort`" :rules="subFormRules.sort" class="mb-0px!">
<el-input-number
@ -241,7 +248,7 @@ class="!w-260px" v-model="formData.createTime" type="date" value-format="x"
</template>
</el-table-column>
<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 }">
<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>
@ -256,7 +263,7 @@ class="!w-260px" v-model="formData.createTime" type="date" value-format="x"
</template>
</el-table-column>
<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}">
<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">
@ -292,9 +299,9 @@ v-model="row.owner" :disabled="detailDisabled || row.procedureStatus != 0"
</template>
</el-table-column>
<el-table-column label="预计开始日期" min-width="170px">
<template #header> <span class="hl-table_header">*</span>预计开始日期</template>
<template #header> 预计开始日期</template>
<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
:disabled="detailDisabled " v-model="row.startTime"
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>
</el-table-column>
<el-table-column label="预计结束日期" min-width="170px">
<template #header> <span class="hl-table_header">*</span>预计结束日期</template>
<template #header>预计结束日期</template>
<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
:disabled=" detailDisabled" v-model="row.endTime"
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>
</el-table-column>
<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 }">
<el-form-item :prop="`${$index}.workTime`" :rules="subFormRules.workTime" class="mb-0px!">
<el-form-item :prop="`${$index}.workTime`" class="mb-0px!">
<el-input-number
min="0" :precision="2" class="!w-240px"
:disabled="detailDisabled " v-model="row.workTime"
@ -323,9 +330,9 @@ min="0" :precision="2" class="!w-240px"
</template>
</el-table-column>
<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 }">
<el-form-item :prop="`${$index}.amount`" :rules="subFormRules.amount" class="mb-0px!">
<el-form-item :prop="`${$index}.amount`" class="mb-0px!">
<el-input-number
min="0" :max="formData.amount" :precision="0" class="!w-240px"
:disabled="detailDisabled" v-model="row.amount"
@ -343,12 +350,12 @@ v-model="row.deviceModel"
</el-form-item>
</template>
</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 }">
<el-form-item :prop="`${$index}.summary`" class="mb-0px!">
<el-input
:disabled="detailDisabled ||row.beginProduce != 0 || row.procedureStatus != 0" v-model="row.summary"
placeholder="请输入工序要点" />
placeholder="请输入备注" />
</el-form-item>
</template>
</el-table-column>
@ -892,7 +899,7 @@ const judge =(item1,item2)=>{
const nextItem = async (type) => {
if(formData.value.dispatchStatus == 1 && !(!formData.value.taskDispatchDetails || formData.value.taskDispatchDetails.length == 0)){
await subFormRef.value.validate()
var hasChange = false;
var hasChange = false;
if(dispatchListTemp.value != null && dispatchListTemp.value.length > 0){
const dispatchListMap = new Map();
dispatchListTemp.value.forEach(item => {
@ -927,7 +934,7 @@ const nextItem = async (type) => {
break;
}
}
}
}else{
hasChange = true;
@ -1193,6 +1200,11 @@ const queryData = async (id?: number) => {
checkList.value = [];
if(formData.value.taskDispatchDetails!=null){
formData.value.taskDispatchDetails.forEach(item=>{
if ("Y"==item.isOutsourcing){
item.isOutsourcing=true
}else{
item.isOutsourcing=false
}
procedureList.value.forEach(items =>{
if(items.id == item.procedureId){
checkList.value.push(items.name)
@ -1268,6 +1280,18 @@ const submitForm = async (operate) => {
}
var ownerIsNull = false;
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].postId == undefined || formData.value.taskDispatchDetails[i].postId == null ||formData.value.taskDispatchDetails[i].postId == ''){
message.error('请选择岗位!')
@ -1461,6 +1485,9 @@ const onDeleteItem = async (row,index) => {
let id = row.id
if (id) await TaskDispatchApi.deleteTaskDispatchDetail(id)
message.success(t('common.delSuccess'))
}
const handleOutsourcingChange= async (row: any) => {
}
const handleSelectedProcedure = async (row: any) => {
console.log(row);

View File

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