品质异常确认问题修改

This commit is contained in:
z 2025-07-25 17:36:06 +08:00
parent af4680599b
commit 0cab4952e6
15 changed files with 1395 additions and 77 deletions

View File

@ -149,7 +149,15 @@ public class TaskDispatchController {
}
}
@GetMapping("/task-dispatch-detail/list-by-dispatch-id-assembly")
@Operation(summary = "获得派工明细列表")
@Parameter(name = "dispatchId", description = "派工单id",required = true)
@Parameter(name = "dispatchType", description = "派工单类型",required = false)
@PreAuthorize("@ss.hasPermission('heli:task-dispatch:query')")
public CommonResult<List<TaskDispatchDetailDO>> getTaskDispatchDetailListByDispatchIdAssembly(@RequestParam("dispatchId") Long dispatchId) {
return success(taskDispatchService.getTaskDispatchDetailListByDispatchIdAssembly(dispatchId));
}
@DeleteMapping("/task-dispatch-detail/delete")
@Operation(summary = "删除派工单")
@Parameter(name = "id", description = "编号", required = true)

View File

@ -236,6 +236,7 @@ public class TaskDispatchDetailDO extends BaseDO {
private String nickname;
@TableField(exist = false)
private BigDecimal workingHours;
@TableField(exist = false)
private LocalDateTime reportTime;
private Integer reportStatus;
@ -243,4 +244,10 @@ public class TaskDispatchDetailDO extends BaseDO {
private Integer flag;
//是否泡沫 -Y -N
private String isFoam;
@TableField(exist = false)
private BigDecimal workingHour;
@TableField(exist = false)
private Long users;
@TableField(exist = false)
private BigDecimal bgWorkTimes;
}

View File

@ -388,7 +388,28 @@ public interface TaskDispatchDetailMapper extends BaseMapperX<TaskDispatchDetail
.eq(TaskDispatchDetailDO::getDispatchId, dispatchId);
return selectList(query);
}
default List<TaskDispatchDetailDO> selectListByDispatchIdAssembly(Long dispatchId) {
MPJLambdaWrapper<TaskDispatchDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(TaskDispatchDetailDO.class)
.select("a.is_report as is_report,a.code as procedure_code")
.select("count(b.amount) as numAmount")
.select("sum(CASE WHEN b.work_type = 1 THEN b.work_time ELSE 0 END) as workingHours")
// .select("sum(bg.work_time) as bgWorkTime")
.select("(SELECT SUM(bg.work_time) \n" +
" FROM quality_zj_pg_master_line p\n" +
" LEFT JOIN quality_zj_bg_master_line bg ON bg.zj_mx_id = p.id and p.deleted = 0 AND p.tenant_id = 2\n" +
" WHERE p.dispatch_detail_id = t.id) AS bgWorkTime")
.leftJoin(ProcedureDO.class,"a",ProcedureDO::getId,TaskDispatchDetailDO::getProcedureId)
.leftJoin(TaskReportDO.class,"b",TaskReportDO::getDispatchDetailId,TaskDispatchDetailDO::getId)
// .leftJoin(PgMasterLineDO.class,"p",PgMasterLineDO::getDispatchDetailId,TaskDispatchDetailDO::getId)
// .leftJoin("quality_pg_master_line p on p.dispatch_detail_id=t.id and p.deleted=0")
// .leftJoin("quality_bg_master_line bg on bg.zj_mx_id = p.id and bg.deleted=0")
// .leftJoin(BgMasterLineDO.class,"bg",BgMasterLineDO::getZjMxId,PgMasterLineDO::getId)
.disableSubLogicDel()
.groupBy(TaskDispatchDetailDO::getId)
.eq(TaskDispatchDetailDO::getDispatchId, dispatchId);
return selectList(query);
}
default List<TaskDispatchDetailDO> selectListByDispatchIdNew(Long dispatchId) {
MPJLambdaWrapper<TaskDispatchDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(TaskDispatchDetailDO.class)

View File

@ -97,4 +97,6 @@ public interface TaskDispatchService {
boolean judgeHasOver(Long id);
List<TaskDispatchDO> getListJg(Long id, Long projectSubId);
List<TaskDispatchDetailDO> getTaskDispatchDetailListByDispatchIdAssembly(Long dispatchId);
}

View File

@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.chanko.yunxi.mes.framework.common.exception.ErrorCode;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
@ -787,27 +788,30 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
}
}
if (CollUtil.isNotEmpty(dispatchDetailDOHashMap)){
List<HashMap<Long, Long>> hashMaps = taskDispatchDetailMapper.sumAssembleReport(new ArrayList<>(dispatchDetailDOHashMap.keySet()));
HashMap<Long,Long> reportMap = new HashMap<>();
for (HashMap<Long, Long> hashMap : hashMaps) {
reportMap.put(hashMap.get("detailId"),hashMap.get("amount"));
}
for (Long l : dispatchDetailDOHashMap.keySet()) {
if (!reportMap.containsKey(l)){
msg = msg + dispatchDetailDOHashMap.get(l).getOwnerName() + ",";
// List<HashMap<Long, Long>> hashMaps = taskDispatchDetailMapper.sumAssembleReport(new ArrayList<>(dispatchDetailDOHashMap.keySet()));
// HashMap<Long,Long> reportMap = new HashMap<>();
// for (HashMap<Long, Long> hashMap : hashMaps) {
// reportMap.put(hashMap.get("detailId"),hashMap.get("amount"));
// }
// for (Long l : dispatchDetailDOHashMap.keySet()) {
// if (!reportMap.containsKey(l)){
// msg = msg + dispatchDetailDOHashMap.get(l).getOwnerName() + ",";
// allReport = false;
// }
// }
// if (!msg.equals("")){
// msg = msg.substring(0,msg.length()-1) + "还没有报工,请确认";
// }
allReport = false;
}
}
if (!msg.equals("")){
msg = msg.substring(0,msg.length()-1) + "还没有报工,请确认";
}
}
if (!allReport){
throw exception(new ErrorCode(1_009_019,msg));
// throw exception(new ErrorCode(1_009_019,msg));
LambdaUpdateWrapper<TaskDispatchDetailDO> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(TaskDispatchDetailDO::getId,taskDispatchDetailDO.getId());
updateWrapper.set(TaskDispatchDetailDO::getProcedureStatus,TaskDispatchProcedureStatusEnum.COMPLETED.getCode());
taskDispatchDetailMapper.update(updateWrapper);
}
if (allReport){
TaskDispatchDetailOwnerDO taskDispatchDetailOwnerDO = taskDispatchDetailOwnerMapper.selectById(taskDispatchDetailDO.getDetailOwnerId());
@ -1008,6 +1012,33 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
public List<TaskDispatchDO> getListJg(Long id, Long projectSubId) {
return taskDispatchMapper.getListJg(id,projectSubId);
}
@Override
public List<TaskDispatchDetailDO> getTaskDispatchDetailListByDispatchIdAssembly(Long dispatchId) {
List<TaskDispatchDetailDO> taskDispatchDetailDOS = taskDispatchDetailMapper.selectListByDispatchIdAssembly(dispatchId);
List<TaskDispatchDetailDO> result = taskDispatchDetailDOS.stream()
// 按procedureId分组
.collect(Collectors.groupingBy(TaskDispatchDetailDO::getProcedureId))
.values().stream()
// 处理每个分组
.map(group -> {
if (group.size() >= 2) {
// 获取前两个元素
TaskDispatchDetailDO first = group.get(0);
TaskDispatchDetailDO second = group.get(1);
// 将第二个元素的属性赋值给第一个元素
first.setBgWorkTimes(second.getBgWorkTime());
first.setWorkingHour(second.getWorkingHours());
first.setUsers(second.getOwner());
}
// 始终返回每组第一个元素
return group.get(0);
})
.collect(Collectors.toList());
return result; }
private void updateAssembleDetail(OperateTypeEnum operateTypeEnum,Long dispatchId, List<TaskDispatchDetailOwnerDO> list) {
list.forEach(o -> o.setDispatchId(dispatchId));

View File

@ -84,3 +84,7 @@ export const getAssmebleDispatchPage = async() => {
export const judgeHasOver = async(id:number)=>{
return await request.get({url:`/heli/task-dispatch/task-dispatch-detail/judgeHasOver?id=`+id})
}
// 获得派工明细列表
export const getTaskDispatchDetailListByDispatchIdAssembly = async (dispatchId) => {
return await request.get({ url: `/heli/task-dispatch/task-dispatch-detail/list-by-dispatch-id-assembly?dispatchId=` + dispatchId })
}

View File

@ -296,5 +296,6 @@ export enum DICT_TYPE {
MATERIAL_PLAN_BOOM_MPLAN_STATUS='material_plan_boom_mplan_status',
HELI_PROJECT_PURCHASE_ORDER_NO_TYPE = 'heli_project_purchase_order_no_type',//采购单类型
HELI_DISPATCH_PRODUCTION_STATUS = 'heli_dispatch_production_status', // 派工单状态
HELI_STORAGE_IN_STATUS = 'heli_storage_in_status',//入库出库状态
}

View File

@ -382,9 +382,12 @@
</el-row>
</el-card>
</el-form>
<!-- <div class="hl-footer text-center">-->
<!-- -->
<!-- </div>-->
<div class="hl-footer text-center" v-if="active == 'create'">
<el-button @click="goback" size="large" style=""> </el-button>
<el-button @click="submitForm('SAVE')" type="success" :disabled="formLoading" size="large"> </el-button>
</div>
</el-card>
<ProjectOrderDialog ref="projectOrderDialog" @success="handleSelectedProjectOrder" />
<!-- 打印发货单 - 弹框-->

View File

@ -93,9 +93,10 @@
</el-row>
</el-card>
</el-form>
<!-- <div class="text-center hl-footer">-->
<!-- -->
<!-- </div>-->
<div class="text-center hl-footer" v-if="active == 'create'">
<el-button @click="goback" size="large" style=""> </el-button>
<el-button v-if="active != 'detail'" type="primary" @click="submitForm('SAVE')" :disabled="formLoading" size="large"> </el-button>
</div>
</el-card>
<ProjectSubDialog ref="projectSubDialog" @success="handleSelectedProjectOrderSub" />

View File

@ -75,7 +75,7 @@
<el-form-item label="单据状态" prop="status">
<el-select v-model="queryParams.status" placeholder="下拉选择" clearable class="!w-240px">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STORAGE_STATUS)"
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STORAGE_IN_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
@ -153,21 +153,21 @@
:formatter="dateFormatter"
min-width="240"
/>
<el-table-column label="作废人" align="center" prop="cancel" min-width="120">
<template #default="scope">
{{ userList.find((user) => user.id == scope.row.cancel)?.nickname }}
</template>
</el-table-column>
<el-table-column
label="作废时间"
align="center"
prop="cancelTime"
:formatter="dateFormatter"
min-width="240"
/>
<!-- <el-table-column label="作废人" align="center" prop="cancel" min-width="120">-->
<!-- <template #default="scope">-->
<!-- {{ userList.find((user) => user.id == scope.row.cancel)?.nickname }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- label="作废时间"-->
<!-- align="center"-->
<!-- prop="cancelTime"-->
<!-- :formatter="dateFormatter"-->
<!-- min-width="240"-->
<!-- />-->
<el-table-column label="单据状态" align="center" prop="status" min-width="120" fixed="right">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_STORAGE_STATUS" :value="scope.row.status" />
<dict-tag :type="DICT_TYPE.HELI_STORAGE_IN_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" min-width="180" fixed="right">

View File

@ -44,7 +44,7 @@
<!-- 采购单信息 -->
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">采购单信息</span>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">入库单信息</span>
</template>
<el-row>
<el-col>
@ -381,6 +381,7 @@ function doPrint() {
iframe.contentWindow?.print()
setTimeout(() => document.body.removeChild(iframe), 1000)
}
StorageinApi.updateIsPrint(query.id);
}

View File

@ -15,13 +15,13 @@
<td colspan="12">
<span style="font-size: 20px; font-weight: 700">产品工艺流程卡</span>
</td>
<td colspan="3" style="padding: 5px 0">
<td colspan="4" style="padding: 5px 0">
<div style="border-bottom: 1px solid #666; padding-bottom: 5px">项目编号</div>
<div style="padding-top: 5px">{{ formData.projectCode }}</div>
</td>
</tr>
<tr>
<td colspan="18">
<td colspan="19">
<div style="display: flex; justify-content: space-between;padding:0 5px">
<span>子项目编号{{ formData.projectSubCode}}</span>
<span>项目交期{{formatDate(new Date(formData.projectEndTime), 'YYYY-MM-DD')}}
@ -72,6 +72,7 @@
<td colspan="1">磨床</td>
<td colspan="1">数控1</td>
<td colspan="1">数控2</td>
<td colspan="1">线切割</td>
<td colspan="1">火花</td>
<td colspan="1">刻字</td>
<td colspan="1">网格</td>
@ -95,6 +96,7 @@
<td colspan="1" class="hr-dotted">{{item.polishing}}</td>
<td colspan="1" class="hr-dotted">{{item.wire}}</td>
<td colspan="1" class="hr-dotted">{{item.rough}}</td>
<td colspan="1" class="hr-dotted">{{item.cutting}}</td>
<td colspan="1" class="hr-dotted">{{item.fashioning}}</td>
<td colspan="1" class="hr-dotted">{{item.spark}}</td>
<td colspan="1" class="hr-dotted">{{item.lettering}}</td>
@ -104,7 +106,7 @@
</tbody>
<tbody>
<tr>
<td colspan="18">
<td colspan="19">
<div style="display: flex; justify-content: left;">
<span style="font-size: 16px; font-weight: 700">
各工序工艺要点
@ -114,7 +116,7 @@
</tr>
<tr v-for="item in summarylist" :key="item">
<td colspan="3" class="hr-dotted" v-if="item.name">{{item.name}}</td>
<td colspan="15" class="hr-dotted" v-if="item.data">{{item.data}}</td>
<td colspan="16" class="hr-dotted" v-if="item.data">{{item.data}}</td>
</tr>
</tbody>
<tbody>
@ -127,7 +129,7 @@
<td colspan="4">
开单人/日期
</td>
<td colspan="4">
<td colspan="5">
{{formData.userNickname}}
{{ formatDate(new Date(formData.startTime), 'YYYY-MM-DD') }}
</td>
@ -200,6 +202,14 @@ const summarylist = ref([
name: undefined,
data: undefined
},
{
name: undefined,
data: undefined
},
{
name: undefined,
data: undefined
},
{
name: undefined,
data: undefined
@ -224,7 +234,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 2,
@ -243,7 +254,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 3,
@ -262,7 +274,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 4,
@ -281,7 +294,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 5,
@ -300,7 +314,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 6,
@ -319,7 +334,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 7,
@ -339,7 +355,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 8,
@ -358,7 +375,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 9,
@ -378,7 +396,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 10,
@ -398,7 +417,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 11,
@ -418,7 +438,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 12,
@ -645,7 +666,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 2,
@ -664,7 +686,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 3,
@ -683,7 +706,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 4,
@ -702,7 +726,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 5,
@ -721,7 +746,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 6,
@ -740,7 +766,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 7,
@ -760,7 +787,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 8,
@ -779,7 +807,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 9,
@ -799,7 +828,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 10,
@ -819,7 +849,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 11,
@ -839,7 +870,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 12,
@ -1463,6 +1495,45 @@ const open = async (id?: number) => {
if (taskitem.workingHours){
formDataprocess.value.tablename[5].polishing = taskitem.workingHours
}
}else if (Procedure.name == '线切割') {
console.log()
summarylist.value[13].name = Procedure.name
if (!summarylist.value[13].data) {
summarylist.value[13].data = taskitem.summary
} else if (summarylist.value[13].data && taskitem.summary) {
summarylist.value[13].data = summarylist.value[13].data + ',' + taskitem.summary
}
if (!formDataprocess.value.tablename[0].cutting) {
formDataprocess.value.tablename[0].cutting = taskitem.sort
} else if (formDataprocess.value.tablename[0].cutting && taskitem.sort) {
formDataprocess.value.tablename[0].cutting =
formDataprocess.value.tablename[0].cutting + ',' + taskitem.sort
}
Procedata.list.forEach((item: any) => {
if (item.name == Procedure.name) {
formDataprocess.value.tablename[2].cutting = item.standard1Time
formDataprocess.value.tablename[3].cutting = item.standard2Time
}
})
if(taskitem.owner){
const initialUser = await UserApi.getUser(taskitem.owner)
if (!formDataprocess.value.tablename[6].cutting) {
formDataprocess.value.tablename[6].cutting = initialUser.nickname
} else if (
formDataprocess.value.tablename[6].cutting &&
!formDataprocess.value.tablename[8].cutting
) {
formDataprocess.value.tablename[8].cutting = initialUser.nickname
} else {
}
}
if (taskitem.bgWorkTime){
formDataprocess.value.tablename[9].cutting = taskitem.bgWorkTime
}
if (taskitem.workingHours){
formDataprocess.value.tablename[5].cutting = taskitem.workingHours
}
}
})
}
@ -1478,6 +1549,7 @@ const open = async (id?: number) => {
const operateLogs = (await getOperateLogPage(logParams)).list[0]
formData.value.userNickname = operateLogs.userNickname
formData.value.startTime = operateLogs.startTime
console.log(formDataprocess.value.tablename)
}
}
defineExpose({ open }) // open

File diff suppressed because it is too large Load Diff

View File

@ -530,12 +530,8 @@ import {
import {
getOperateLogPage
} from "@/api/system/operatelog";
import ProcedureSelect from "@/views/heli/hlvuestyle/procedureSelect.vue";
import UserSelect from '@/views/heli/hlvuestyle/userSelect.vue'
import EquipSelect from "@/views/heli/hlvuestyle/equipSelect.vue";
import EquipmentSelect from "@/views/heli/hlvuestyle/equipmentSelect.vue";
import ProductProcessPrint from "./ProductProcessPrint.vue";
import * as EquipManufactureApi from '@/api/heli/equipmanufacture';
import {
ElDialog,
ElTable,

View File

@ -3,7 +3,7 @@ import { toRaw, ref, computed } from 'vue'
import { formatDate } from '@/utils/index'
import { onLoad, onShow } from '@dcloudio/uni-app'
import { useLoginStore } from '@/stores/modules/login'
import { getNotificationDetailAPI, operateWx } from '@/services/unqualifiedNotification'
import {confirm, getNotificationDetailAPI, operateWx} from '@/services/unqualifiedNotification'
import { serviceDomain } from '@/services/constants'
const popup = ref<UniHelper.UniPopupInstance>()
const userStore = useLoginStore()
@ -173,7 +173,7 @@ const submitForm = async () => {
status: 1,
notificationStatus: 3
}
await operateWx(params);
await confirm(params);
} catch (error) {
uni.showToast({
icon: 'none',