近期更新

This commit is contained in:
z 2026-03-16 10:16:12 +08:00
parent 74fbc6edda
commit 117d9f50a5
13 changed files with 166 additions and 36 deletions

View File

@ -95,8 +95,8 @@ public class ProcessDetailController {
@Operation(summary = "获得进度")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('heli:process-detail:query')")
public CommonResult<List<ProcessDetailDO>> searchProgress(@RequestParam("type") Integer type) {
List<ProcessDetailDO> list= processDetailService.searchProgress(type);
public CommonResult<List<ProcessDetailDO>> searchProgress(@RequestParam("type") Integer type,@RequestParam("condition") String condition) {
List<ProcessDetailDO> list= processDetailService.searchProgress(type,condition);
return success(list);
}

View File

@ -150,10 +150,9 @@ public class ScreenController {
/**
* 定时任务更新大屏数据
*/
// @Scheduled(cron = "0 0 * * * ?")
// @Scheduled(cron = "0 0/5 * * * ?")
// @PostConstruct
@Scheduled(cron = "0 0 1 * * ?")
@Operation(summary = "定时任务更新大屏数据")
@Scheduled(cron = "0 */30 * * * ?")
public void updateLargeScreenData(){
screenService.updateLargeScreenData();
}

View File

@ -50,6 +50,22 @@ public class FoundDO extends BaseDO {
* 今日到岗人数
*/
private Integer numPresent;
/**
* 与昨天相比到岗人数
*/
private String relativetoyesterdayPresent;
/**
* 与昨日相比出差人数
*/
private String relativetoyesterdayBusinessTrip;
/**
* 与昨日相比设计项目数量
*/
private String relativetoyesterdayDesign;
/**
* 与昨日相比在制项目数量
*/
private String relativetoyesterdayInProcess;
/**
* 今日出差人数
*/

View File

@ -36,12 +36,15 @@ public interface FoundMapper extends BaseMapperX<FoundDO> {
default FoundDO searchUnfinished(){
// return selectList(new LambdaQueryWrapperX<FoundDO>().eq(FoundDO::getDate, DateUtil.formatDate(new Date())));
return selectOne(new LambdaQueryWrapperX<FoundDO>().last("limit 1"));
return selectOne(new LambdaQueryWrapperX<FoundDO>().eq(FoundDO::getDate, DateUtil.formatDate(new Date())).last("limit 1"));
}
default FoundDO selectAll(){
return selectOne(new LambdaQueryWrapperX<FoundDO>().last("limit 1"));
return selectOne(new LambdaQueryWrapperX<FoundDO>().eq(FoundDO::getDate, DateUtil.formatDate(new Date())).last("limit 1"));
}
default FoundDO theDayBefore(){
return selectOne(new LambdaQueryWrapperX<FoundDO>().eq(FoundDO::getDate, DateUtil.formatDate(DateUtil.offsetDay(new Date(), -1))).last("limit 1")); }
}

View File

@ -2,12 +2,15 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.processdetail;
import java.util.*;
import cn.hutool.core.util.ObjectUtil;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.process.ProcessDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdetail.ProcessDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
@ -60,11 +63,15 @@ public interface ProcessDetailMapper extends BaseMapperX<ProcessDetailDO> {
@Delete("delete from screen_process_detail where process_id = #{id}")
void deleteByProcessId(@Param("id") Long id);
default List<ProcessDetailDO> searchProgress(Integer type){
default List<ProcessDetailDO> searchProgress(Integer type,String condition){
MPJLambdaWrapper<ProcessDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(ProcessDetailDO.class)
.leftJoin(ProcessDO.class, "a", ProcessDO::getId, ProcessDetailDO::getProcessId)
.leftJoin(ProjectOrderDO.class, "b", ProjectOrderDO::getId, ProcessDetailDO::getProjectId)
.leftJoin(CustomerDO.class, "c", CustomerDO::getId, ProjectOrderDO::getCustomerId)
.eq(ProcessDO::getProcessType,type)
.and(ObjectUtil.isNotEmpty(condition),i->i.like(ProjectOrderDO::getProjectName,condition).or().like(ProjectOrderDO::getProjectNameSim,condition).or().like(CustomerDO::getName,condition).or().like(CustomerDO::getBrief,condition))
.orderByDesc(ProcessDetailDO::getIsSelect)
.orderByDesc(ProcessDetailDO::getOrdDate);
return selectList(query);

View File

@ -185,5 +185,9 @@ public interface ProjectOrderMapper extends BaseMapperX<ProjectOrderDO> {
.ge(ProjectOrderDO::getCreateTime,startTime)
);
// return selectList(new LambdaQueryWrapper<ProjectOrderDO>()
// .eq(ProjectOrderDO::getId,968)
//
// );
}
}

View File

@ -55,6 +55,30 @@ public class FoundServiceImpl implements FoundService {
if (ObjectUtil.isEmpty(updateObj.getDeliRate())){
updateObj.setDeliRate(BigDecimal.ZERO);
}
FoundDO dayBefore = foundMapper.theDayBefore();
if (ObjectUtil.isNotEmpty(dayBefore)){
if (ObjectUtil.isNotEmpty(dayBefore.getNumPresent())){
int difference = updateObj.getNumPresent() - dayBefore.getNumPresent();
if (difference>=0){
updateObj.setRelativetoyesterdayPresent("较昨日增加"+difference);
}else {
updateObj.setRelativetoyesterdayPresent("较昨日减少"+Math.abs(difference));
}
}else {
updateObj.setRelativetoyesterdayDesign("较昨日增加0");
}
if (ObjectUtil.isNotEmpty(dayBefore.getNumBusinessTrip())){
int difference = updateObj.getNumBusinessTrip() - dayBefore.getNumBusinessTrip();
if (difference>=0){
updateObj.setRelativetoyesterdayBusinessTrip("较昨日增加"+difference);
}else {
updateObj.setRelativetoyesterdayBusinessTrip("较昨日减少"+Math.abs(difference));
}
}else {
updateObj.setRelativetoyesterdayInProcess("较昨日增加0");
}
}
foundMapper.updateById(updateObj);
}

View File

@ -52,7 +52,7 @@ public interface ProcessDetailService {
*/
PageResult<ProcessDetailDO> getProcessDetailPage(ProcessDetailPageReqVO pageReqVO);
List<ProcessDetailDO> searchProgress(Integer type);
List<ProcessDetailDO> searchProgress(Integer type,String condition);
void update(List<ProcessDetailDO> list);
}

View File

@ -75,8 +75,8 @@ public class ProcessDetailServiceImpl implements ProcessDetailService {
}
@Override
public List<ProcessDetailDO> searchProgress(Integer type) {
return processDetailMapper.searchProgress(type);
public List<ProcessDetailDO> searchProgress(Integer type,String condition) {
return processDetailMapper.searchProgress(type,condition);
}
@Override

View File

@ -396,7 +396,7 @@ public class ScreenServiceImpl implements ScreenService {
processDetailDO.setProjectEndTime(projectOrderDO.getProjectEndTime());
processDetailDO.setDeliveryStatus(projectOrderDO.getDeliveryStatus());
processDetailDO.setProcessId(process.getId());
if (LocalDateTime.now().toLocalDate().isAfter(projectOrderDO.getOrderTime().toLocalDate())) {
if (LocalDateTime.now().toLocalDate().isAfter(projectOrderDO.getProjectEndTime().toLocalDate())) {
processDetailDO.setIsExten("1");
}
Long id = projectOrderDO.getId();
@ -436,6 +436,7 @@ public class ScreenServiceImpl implements ScreenService {
BigDecimal currentTime = calculateCurrentTime(collect);
for (ProcessDesignDO processDesignDO : collect1) {
PlanSubDO subDO = planSubMapper.selectPlanSub(processDesignDO.getPlanId(), processDesignDO.getProjectSubId());
if (ObjectUtil.isNotEmpty(subDO)){
if ("BLUEPRINT_3D".equals(processDesignDO.getProcessDesignType())) {
if (ObjectUtil.isNotEmpty(subDO.getThreeDimNum())) {
currentTime = currentTime.add(new BigDecimal(subDO.getThreeDimNum().toString()));
@ -454,6 +455,7 @@ public class ScreenServiceImpl implements ScreenService {
totalWorkTime = totalWorkTime.add(new BigDecimal(subDO.getTwoDimNum().toString()).multiply(new BigDecimal("8")));
}
}
}
}
currentTime = currentTime.multiply(new BigDecimal("8"));
// 计算完成百分比
@ -487,9 +489,11 @@ public class ScreenServiceImpl implements ScreenService {
BigDecimal currentTime = BigDecimal.ZERO;
for (ProcessDesignDO processDesignDO : collect) {
PlanSubDO subDO = planSubMapper.selectPlanSub(processDesignDO.getPlanId(), processDesignDO.getProjectSubId());
if (ObjectUtil.isNotEmpty(subDO)){
if ("BLUEPRINT_3D".equals(processDesignDO.getProcessDesignType())){
if (ObjectUtil.isNotEmpty(subDO.getThreeDimNum())) {
currentTime = currentTime.add(new BigDecimal(subDO.getThreeDimNum().toString()));
}
}
if ("BLUEPRINT_WORKBLANK".equals(processDesignDO.getProcessDesignType())){
@ -502,6 +506,7 @@ public class ScreenServiceImpl implements ScreenService {
currentTime = currentTime.add(new BigDecimal(subDO.getTwoDimNum().toString()));
}
}
}
}
return currentTime;
}
@ -582,7 +587,7 @@ public class ScreenServiceImpl implements ScreenService {
processDetailDO.setProjectEndTime(projectOrderDO.getProjectEndTime());
processDetailDO.setDeliveryStatus(projectOrderDO.getDeliveryStatus());
processDetailDO.setProcessId(process.getId());
if (LocalDateTime.now().toLocalDate().isAfter(projectOrderDO.getOrderTime().toLocalDate())) {
if (LocalDateTime.now().toLocalDate().isAfter(projectOrderDO.getProjectEndTime().toLocalDate())) {
processDetailDO.setIsExten("1");
}
Long id = projectOrderDO.getId();
@ -673,7 +678,7 @@ public class ScreenServiceImpl implements ScreenService {
processDetailDO.setProjectEndTime(projectOrderDO.getProjectEndTime());
processDetailDO.setDeliveryStatus(projectOrderDO.getDeliveryStatus());
processDetailDO.setProcessId(process.getId());
if (LocalDateTime.now().toLocalDate().isAfter(projectOrderDO.getOrderTime().toLocalDate())) {
if (LocalDateTime.now().toLocalDate().isAfter(projectOrderDO.getProjectEndTime().toLocalDate())) {
processDetailDO.setIsExten("1");
}
Long id = projectOrderDO.getId();
@ -771,13 +776,20 @@ public class ScreenServiceImpl implements ScreenService {
boolean flag=false;
//获得当前修改数据
FoundDO foundDO = foundMapper.selectAll();
FoundDO dayBefore = foundMapper.theDayBefore();
if (ObjectUtil.isEmpty(foundDO)){
foundDO=new FoundDO();
foundDO.setNumPresent(0);
foundDO.setNumBusinessTrip(0);
foundDO.setOpenMock(0);
if (ObjectUtil.isNotEmpty(dayBefore)) {
foundDO.setOpenMock(dayBefore.getOpenMock());
foundDO.setDeliRate(dayBefore.getDeliRate());
}else{
foundDO.setOpenMock(0);
}
flag=true;
}
foundDO.setDate(LocalDate.now());
//未完成设计的子项目数量
Integer unfinished= projectOrderSubMapper.searchUnfinished();
@ -785,6 +797,28 @@ public class ScreenServiceImpl implements ScreenService {
Integer notDispatched =projectOrderSubMapper.searchNotDispatched();
foundDO.setNumDesign(unfinished);
foundDO.setNumInProcess(notDispatched);
if (ObjectUtil.isNotEmpty(dayBefore)){
if (ObjectUtil.isNotEmpty(dayBefore.getNumDesign())){
int difference = unfinished - dayBefore.getNumDesign();
if (difference>=0){
foundDO.setRelativetoyesterdayDesign("较昨日增加"+difference);
}else {
foundDO.setRelativetoyesterdayDesign("较昨日减少"+Math.abs(difference));
}
}else {
foundDO.setRelativetoyesterdayDesign("较昨日增加0");
}
if (ObjectUtil.isNotEmpty(dayBefore.getNumInProcess())){
int difference = notDispatched - dayBefore.getNumInProcess();
if (difference>=0){
foundDO.setRelativetoyesterdayInProcess("较昨日增加"+difference);
}else {
foundDO.setRelativetoyesterdayInProcess("较昨日减少"+Math.abs(difference));
}
}else {
foundDO.setRelativetoyesterdayInProcess("较昨日增加0");
}
}
if (0==foundDO.getOpenMock()){
//订单交付准时率
Map<String, BigDecimal> onTimeCompletionRate = projectOrderMapper.getOnTimeCompletionRate();

View File

@ -47,8 +47,8 @@ export const exportProcessDetail = async (params) => {
return await request.download({ url: `/heli/process-detail/export-excel`, params })
}
// 查询大屏-设计、装配、加工进度子详情
export const searchProgress = async (type: number) => {
return await request.get({ url: `/heli/process-detail/searchProgress?type=` + type })
export const searchProgress = async (type: number,condition: string) => {
return await request.get({ url: `/heli/process-detail/searchProgress?type=` + type +"&condition="+condition})
}
// 修改大屏-设计、装配、加工进度子
export const update = async (data: ProcessDetailVO) => {

View File

@ -36,7 +36,7 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="订单交付准时率" label-width="160px">
<el-form-item label="质量合格率" label-width="160px">
<el-input class="!w-200px" v-model="formData.deliRate" :disabled="formData.openMock==0?true:false" placeholder="请输入" />
</el-form-item>
</el-col>
@ -154,6 +154,15 @@
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">设计进度信息</span>
<el-button @click="submitForm3(1)" style="margin-left:20px" type="primary" size="large"> </el-button>
<el-button @click="clearOutForm(1)" style="margin-left:20px" type="primary" size="large"> </el-button>
<span class="hl-card-info-text" style="margin-left: 30px;margin-right: 10px">筛选条件</span>
<el-input
v-model="queryParams.condition"
placeholder="请输入筛选条件"
clearable
@keyup.enter="searchProgress(1)"
class="!w-240px"
/>
<el-button @click="searchProgress(1)" type="primary" style="margin-left: 10px"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
</template>
<el-table border class="hl-table" :data="formData2" height="500px"
@ -176,9 +185,9 @@
<el-table-column align="center" label="项目开始时间" width="135" prop="projectStartTime" :formatter="dateFormatter2" />
<el-table-column align="center" label="项目结束时间" width="135" prop="projectEndTime" :formatter="dateFormatter2" />
<el-table-column align="center" label="项目进度" prop="projectProcess" width="100" />
<el-table-column label="货状态" align="center" prop="deliveryStatus" fixed="right" width="100">
<el-table-column label="货状态" align="center" prop="deliveryStatus" fixed="right" width="100">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_PURCHASE_RECEIVING_STATUS" :value="scope.row.deliveryStatus" />
<dict-tag :type="DICT_TYPE.HELI_DELIVERY_STATUS" :value="scope.row.deliveryStatus" />
</template>
</el-table-column>
<el-table-column label="是否延期" align="center" prop="deliveryStatus" fixed="right" width="100">
@ -194,6 +203,15 @@
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">生产进度信息</span>
<el-button @click="submitForm3(2)" style="margin-left:20px" type="primary" size="large"> </el-button>
<el-button @click="clearOutForm(2)" style="margin-left:20px" type="primary" size="large"> </el-button>
<span class="hl-card-info-text" style="margin-left: 30px;margin-right: 10px">筛选条件</span>
<el-input
v-model="queryParams1.condition"
placeholder="请输入筛选条件"
clearable
@keyup.enter="searchProgress(2)"
class="!w-240px"
/>
<el-button @click="searchProgress(2)" type="primary" style="margin-left: 10px"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
</template>
<el-table border class="hl-table" :data="formData3" height="500px"
@ -216,9 +234,9 @@
<el-table-column align="center" label="项目开始时间" width="135" prop="projectStartTime" :formatter="dateFormatter2" />
<el-table-column align="center" label="项目结束时间" width="135" prop="projectEndTime" :formatter="dateFormatter2" />
<el-table-column align="center" label="项目进度" prop="projectProcess" width="100" />
<el-table-column label="货状态" align="center" prop="deliveryStatus" fixed="right" width="100">
<el-table-column label="货状态" align="center" prop="deliveryStatus" fixed="right" width="100">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_PURCHASE_RECEIVING_STATUS" :value="scope.row.deliveryStatus" />
<dict-tag :type="DICT_TYPE.HELI_DELIVERY_STATUS" :value="scope.row.deliveryStatus" />
</template>
</el-table-column>
<el-table-column label="是否延期" align="center" prop="deliveryStatus" fixed="right" width="100">
@ -233,9 +251,18 @@
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">装配进度信息</span>
<el-button @click="submitForm3(3)" style="margin-left:20px" type="primary" size="large"> </el-button>
<el-button @click="clearOutForm(3)" style="margin-left:20px" type="primary" size="large"> </el-button>
<span class="hl-card-info-text" style="margin-left: 30px;margin-right: 10px">筛选条件</span>
<el-input
v-model="queryParams2.condition"
placeholder="请输入筛选条件"
clearable
@keyup.enter="searchProgress(3)"
class="!w-240px"
/>
<el-button @click="searchProgress(3)" type="primary" style="margin-left: 10px"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
</template>
<el-table border class="hl-table" :data="formData2" height="500px"
<el-table border class="hl-table" :data="formData4" height="500px"
:virtual-scroll="true"
:scrollbar-always-on="true"
row-key="id" >
@ -255,9 +282,9 @@
<el-table-column align="center" label="项目开始时间" width="135" prop="projectStartTime" :formatter="dateFormatter2" />
<el-table-column align="center" label="项目结束时间" width="135" prop="projectEndTime" :formatter="dateFormatter2" />
<el-table-column align="center" label="项目进度" prop="projectProcess" width="100" />
<el-table-column label="货状态" align="center" prop="deliveryStatus" fixed="right" width="100">
<el-table-column label="货状态" align="center" prop="deliveryStatus" fixed="right" width="100">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_PURCHASE_RECEIVING_STATUS" :value="scope.row.deliveryStatus" />
<dict-tag :type="DICT_TYPE.HELI_DELIVERY_STATUS" :value="scope.row.deliveryStatus" />
</template>
</el-table-column>
<el-table-column label="是否延期" align="center" prop="deliveryStatus" fixed="right" width="100">
@ -291,6 +318,15 @@ const formData4: any = ref([])
// const selectResult: any = ref([])
// const selectResult1: any = ref([])
// const selectResult2: any = ref([])
const queryParams = reactive({
condition:""
})
const queryParams1 = reactive({
condition:""
})
const queryParams2 = reactive({
condition:""
})
const formRules = reactive({
})
const formRules1 = reactive({
@ -351,11 +387,11 @@ const clearOutForm = async (type) => {
};
// type selectResult
const selectResultMap = {
1: selectResult,
2: selectResult1,
3: selectResult2
};
// const selectResultMap = {
// 1: selectResult,
// 2: selectResult1,
// 3: selectResult2
// };
try {
const targetFormData = formDataMap[type];
if (targetFormData?.value) {
@ -365,13 +401,14 @@ const clearOutForm = async (type) => {
})
}
}
const targetSelectResult = selectResultMap[type];
if (targetFormData?.value) {
targetSelectResult.value=[]
}
// const targetSelectResult = selectResultMap[type];
// if (targetFormData?.value) {
// targetSelectResult.value=[]
// }
} finally {
}
};
//
const searchUnfinished = async () => {
formData.value= await ScreenApi.searchUnfinished()
@ -382,7 +419,13 @@ const searchOrderByYear = async () => {
}
//
const searchProgress = async (type) => {
var list = await ProcessDetailApi.searchProgress(type);
const queryMap = {
1: queryParams,
2: queryParams1,
3: queryParams2
};
const queryParamsData = queryMap[type];
var list = await ProcessDetailApi.searchProgress(type,queryParamsData.condition);
list.forEach(item=>{
item.isSelect=Number(item.isSelect)
})

View File

@ -10,4 +10,4 @@
// export const serviceDomain = 'https://star.hz-hl.com'
// export const serviceDomain = 'http://222.71.165.187:9010'
// export const serviceDomain = 'http://localhost:8080'
export const serviceDomain = 'https://nxhs.cjyx.cc'
export const serviceDomain = 'https://nxhs.cjyx.cc:45456'