生产计划 打印

生产计划 打印
pull/4/head
siontion 8 months ago
parent d880d03bac
commit 7389c5d418

@ -0,0 +1,26 @@
package com.chanko.yunxi.mes.module.heli.enums;
import lombok.Getter;
/**
*
* @author chenxi
* @date 2024-01-18 01:19
*/
@Getter
public enum ProjectPlanStatusEnum {
START(1, "未开始"),
PRODUCING(2, "生产中"),
COMPLETE(3, "已完成"),
TERMINATE(4, "已终止"),
CHANGE(5, "已变更"),
;
private int code;
private String description;
ProjectPlanStatusEnum(int code, String description) {
this.code = code;
this.description = description;
}
}

@ -14,6 +14,8 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.projectorder.vo.Project
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
import com.chanko.yunxi.mes.module.heli.enums.BusinesTypeEnum;
import com.chanko.yunxi.mes.module.heli.service.plan.PlanService;
import com.chanko.yunxi.mes.module.heli.service.plansub.PlanSubService;
import com.chanko.yunxi.mes.module.heli.service.projectorder.ProjectOrderService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@ -43,6 +45,13 @@ public class ProjectOrderController {
@Resource
private ProjectOrderService projectOrderService;
@Resource
private PlanService planService;
@Resource
private PlanSubService planSubService;
@Resource
private OperateLogFrameworkService operateLogFrameworkService;
@ -84,7 +93,13 @@ public class ProjectOrderController {
// 批准、终止记录快照
switch (OperateTypeEnum.valueOf(operateReqVO.getActive())){
case APPROVE:
// 订单批准时创建或者更新生产计划数据
planService.generatePlanByProjectId(operateReqVO.getId());
projectOrderService.createProjectOrderSnapshot(operateReqVO);
break;
case TERMINATE:
// 订单终止时更新生产计划状态
planService.updatePlanStatusToTerminateByProjectId(operateReqVO.getId());
projectOrderService.createProjectOrderSnapshot(operateReqVO);
break;
}

@ -105,7 +105,7 @@ public class PlanDO extends BaseDO {
/**
*
*/
private String changeLastDate;
private LocalDateTime changeLastDate;
@TableField(exist = false)
private String projectCode;

@ -1,55 +1,57 @@
package com.chanko.yunxi.mes.module.heli.service.plan;
import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.plan.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
/**
* Service
*
* @author
*/
public interface PlanService {
/**
*
*
* @param createReqVO
* @return
*/
Long createPlan(@Valid PlanSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updatePlan(@Valid PlanSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deletePlan(Long id);
/**
*
*
* @param id
* @return
*/
PlanDO getPlan(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<PlanDO> getPlanPage(PlanPageReqVO pageReqVO);
}
package com.chanko.yunxi.mes.module.heli.service.plan;
import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.plan.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
/**
* Service
*
* @author
*/
public interface PlanService {
/**
*
*
* @param createReqVO
* @return
*/
Long createPlan(@Valid PlanSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updatePlan(@Valid PlanSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deletePlan(Long id);
/**
*
*
* @param id
* @return
*/
PlanDO getPlan(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<PlanDO> getPlanPage(PlanPageReqVO pageReqVO);
void generatePlanByProjectId(Long projectId);
void updatePlanStatusToTerminateByProjectId(Long projectId);
}

@ -1,15 +1,27 @@
package com.chanko.yunxi.mes.module.heli.service.plan;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.plansub.PlanSubMapper;
import com.chanko.yunxi.mes.module.heli.enums.CodeEnum;
import com.chanko.yunxi.mes.module.heli.enums.ProjectPlanStatusEnum;
import com.chanko.yunxi.mes.module.heli.service.projectorder.ProjectOrderService;
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
import com.github.dadiyang.equator.FieldInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import com.chanko.yunxi.mes.module.heli.controller.admin.plan.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
@ -28,6 +40,7 @@ import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
*
* @author
*/
@Slf4j
@Service
@Validated
public class PlanServiceImpl implements PlanService {
@ -35,6 +48,12 @@ public class PlanServiceImpl implements PlanService {
@Resource
private PlanMapper planMapper;
@Resource
private PlanSubMapper planSubMapper;
@Resource
private ProjectOrderService projectOrderService;
@Resource
private SerialNumberService serialNumberService;
@ -90,4 +109,66 @@ public class PlanServiceImpl implements PlanService {
return planMapper.selectPage(pageReqVO);
}
@Override
public void generatePlanByProjectId(Long projectId){
// 查询最近归档历史并对比变化字段
try {
PlanDO planDO = planMapper.selectOne(new LambdaQueryWrapper<PlanDO>() {{
eq(PlanDO::getProjectId, projectId);
orderByDesc(PlanDO::getId);
last("LIMIT 1");
}});
if(planDO != null){
// 设置项目更新次数
planDO.setChangeNum(planDO.getChangeNum()+1);
// 设置项目更新时间
planDO.setChangeLastDate(LocalDateTime.now());
// 设置生产计划状态
planDO.setStatus(ProjectPlanStatusEnum.CHANGE.getCode());
planMapper.updateById(planDO);
}else{
planDO = new PlanDO();
// 设置项目更新次数
planDO.setChangeNum(0);
// 设置生产计划状态
planDO.setStatus(ProjectPlanStatusEnum.START.getCode());
planMapper.insert(planDO);
// 生成生产计划子项目信息
List<ProjectOrderSubDO> projectOrderSubDOs = projectOrderService.getProjectOrderSubListByProjectOrderId(projectId);
for(ProjectOrderSubDO item : projectOrderSubDOs){
PlanSubDO planSubDO = new PlanSubDO();
planSubDO.setProjectPlanId(planDO.getId());
planSubDO.setProjectId(projectId);
planSubDO.setProjectSubId(item.getId());
planSubMapper.insert(planSubDO);
}
}
}catch (Exception e){
log.error("base projectId to generate planDo error, id: {}, exception: {}", projectId, e.getMessage(), e);
}
}
@Override
public void updatePlanStatusToTerminateByProjectId(Long projectId){
// 查询最近归档历史并对比变化字段
try {
PlanDO planDO = planMapper.selectOne(new LambdaQueryWrapper<PlanDO>() {{
eq(PlanDO::getProjectId, projectId);
orderByDesc(PlanDO::getId);
last("LIMIT 1");
}});
if(planDO != null){
// 设置项目更新次数
planDO.setChangeNum(planDO.getChangeNum()+1);
// 设置项目更新时间
planDO.setChangeLastDate(LocalDateTime.now());
// 设置生产计划状态
planDO.setStatus(ProjectPlanStatusEnum.TERMINATE.getCode());
planMapper.updateById(planDO);
}
}catch (Exception e){
log.error("base projectId to update planDo's status error, id: {}, exception: {}", projectId, e.getMessage(), e);
}
}
}

@ -419,7 +419,10 @@
<template #header> 责任人 </template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.owner`" class="mb-0px!">
<el-input v-model="row.owner" placeholder="责任人" />
<el-select class="!w-265px" v-model="row.owner" filterable >
<el-option v-for="dict in userInit" :key="dict.id"
:label="dict.nickname" :value="dict.id" />
</el-select>
</el-form-item>
</template>
</el-table-column>

@ -23,7 +23,7 @@
<tr>
<td colspan="2"> 客户名称 </td>
<td colspan="5">
<span>{{ formData.customer.name }}</span>
<span>{{ formData.customerName }}</span>
</td>
<td colspan="1">{{ formData.customer.brief }}</td>
<td> 编码 </td>
@ -52,8 +52,8 @@
<td colspan="1">{{ getDictLabel(DICT_TYPE.HELI_COMMON_IS_OR_NOT, formData.isUrgency) }} </td>
</tr>
<tr>
<td colspan="2"> 项目负责: </td>
<td colspan="2">{{ `111` }} </td>
<td colspan="2"> 项目负责: </td>
<td colspan="2">{{ userInit.find((user) => user.id == planData.projectOwner)?.nickname }} </td>
<td colspan="2">
<div style="width: 100%; display: flex; justify-content: center; font-size: 12px">
<div>
@ -88,14 +88,14 @@
</td>
</tr>
<tr>
<td colspan="2">是否要工:</td>
<td>{{ `` }}</td>
<td colspan="2">是否要工:</td>
<td>{{ getDictLabel(DICT_TYPE.HELI_COMMON_IS_OR_NOT, planData.property) }}</td>
<td>开始日期</td>
<td>{{ `2024/1/15` }}</td>
<td>{{ formatDate(new Date(planData.craftStartDate), 'YYYY-MM-DD') }}</td>
<td>结束日期</td>
<td>{{ `2024/1/15` }}</td>
<td>{{ formatDate(new Date(planData.craftEndDate), 'YYYY-MM-DD') }}</td>
<td>负责人</td>
<td colspan="2">{{ `2024/1/15` }}</td>
<td colspan="2">{{ userInit.find((user) => user.id == planData.craftOwner)?.nickname }}</td>
</tr>
<tbody>
@ -119,8 +119,8 @@
<td colspan="3" style="padding: 0 0">
<div style="display: flex; flex-direction: column; justify-content: space-between">
<span style="border-bottom: 1px solid #666"> {{item.name}} </span>
<span v-if="!item.deviceModel">&nbsp;</span>
<span v-else>{{item.deviceModel}}</span>
<span v-if="!item.projectSubShortName">&nbsp;</span>
<span v-else>{{item.projectSubShortName}}</span>
</div>
</td>
<td>{{item.compositionName}} </td>
@ -357,6 +357,7 @@
</template>
<script setup lang="ts">
// import { ref, reactive } from 'vue'
import * as UserApi from '@/api/system/user'
import * as PlanApi from '@/api/heli/plan'
import * as PlanSubApi from '@/api/heli/plansub'
import * as ProjectOrderApi from '@/api/heli/projectorder'
@ -461,7 +462,7 @@ const outopen = () => {
const queryParams: any = ref({
code: undefined
})
const isSelected = ref([1, 3])
const isSelected = ref([2, 3])
const formData = ref({
id: undefined,
@ -534,8 +535,11 @@ const planData = ref({
craftInfos: [],
craftContent: undefined
})
const userInit = ref()
/** 打开弹窗 */
const open = async (id: number) => {
//
userInit.value = await UserApi.getSimpleUserList()
//
// LogoBase64URL
const logoImage = new Image()

Loading…
Cancel
Save