Commit 96a24bf9 authored by chicheng's avatar chicheng

报表相关调整

撤销排产后回写工单状态:已发布
parent 854d585d
...@@ -99,6 +99,10 @@ public class ProFeedbackController extends BaseController { ...@@ -99,6 +99,10 @@ public class ProFeedbackController extends BaseController {
query.between(StringUtils.isNotEmpty(proFeedback.getCreateStartTime()) && StringUtils.isNotEmpty(proFeedback.getCreateEndTime()), "f.update_time", proFeedback.getCreateStartTime(), proFeedback.getCreateEndTime()); query.between(StringUtils.isNotEmpty(proFeedback.getCreateStartTime()) && StringUtils.isNotEmpty(proFeedback.getCreateEndTime()), "f.update_time", proFeedback.getCreateStartTime(), proFeedback.getCreateEndTime());
query.like(StringUtils.isNotEmpty(proFeedback.getNickName()), "f.nick_name", proFeedback.getNickName()); query.like(StringUtils.isNotEmpty(proFeedback.getNickName()), "f.nick_name", proFeedback.getNickName());
query.notIn("tw.status", TaskWorkunitStatusEnum.CLOSE.getStatus()); query.notIn("tw.status", TaskWorkunitStatusEnum.CLOSE.getStatus());
query.like(StringUtils.isNotEmpty(proFeedbackCheckListDto.getProcessName()), "f.process_name", proFeedbackCheckListDto.getProcessName());
query.eq(StringUtils.isNotEmpty(proFeedbackCheckListDto.getTaskBatch()), "SUBSTRING_INDEX(ta.task_batch, '-', -1)", proFeedbackCheckListDto.getTaskBatch());
query.between(proFeedbackCheckListDto.getFeedbackTimeStart() != null && proFeedbackCheckListDto.getFeedbackTimeEnd() != null,
"f.feedback_time", proFeedbackCheckListDto.getFeedbackTimeStart(), proFeedbackCheckListDto.getFeedbackTimeEnd());
query.orderByAsc("f.feedback_time"); query.orderByAsc("f.feedback_time");
startPage(); startPage();
List<ProFeedbackVo> list = proFeedbackService.queryProFeedbackListJoinTaskWorkUnit(query); List<ProFeedbackVo> list = proFeedbackService.queryProFeedbackListJoinTaskWorkUnit(query);
...@@ -158,6 +162,10 @@ public class ProFeedbackController extends BaseController { ...@@ -158,6 +162,10 @@ public class ProFeedbackController extends BaseController {
query.between(StringUtils.isNotEmpty(proFeedback.getCreateStartTime()) && StringUtils.isNotEmpty(proFeedback.getCreateEndTime()), "f.update_time", proFeedback.getCreateStartTime(), proFeedback.getCreateEndTime()); query.between(StringUtils.isNotEmpty(proFeedback.getCreateStartTime()) && StringUtils.isNotEmpty(proFeedback.getCreateEndTime()), "f.update_time", proFeedback.getCreateStartTime(), proFeedback.getCreateEndTime());
query.like(StringUtils.isNotEmpty(proFeedback.getNickName()), "f.nick_name", proFeedback.getNickName()); query.like(StringUtils.isNotEmpty(proFeedback.getNickName()), "f.nick_name", proFeedback.getNickName());
query.notIn("tw.status", TaskWorkunitStatusEnum.CLOSE.getStatus()); query.notIn("tw.status", TaskWorkunitStatusEnum.CLOSE.getStatus());
query.like(StringUtils.isNotEmpty(proFeedbackCheckListDto.getProcessName()), "f.process_name", proFeedbackCheckListDto.getProcessName());
query.eq(StringUtils.isNotEmpty(proFeedbackCheckListDto.getTaskBatch()), "SUBSTRING_INDEX(ta.task_batch, '-', -1)", proFeedbackCheckListDto.getTaskBatch());
query.between(proFeedbackCheckListDto.getFeedbackTimeStart() != null && proFeedbackCheckListDto.getFeedbackTimeEnd() != null,
"f.feedback_time", proFeedbackCheckListDto.getFeedbackTimeStart(), proFeedbackCheckListDto.getFeedbackTimeEnd());
query.orderByAsc("f.feedback_time"); query.orderByAsc("f.feedback_time");
List<ProFeedbackVo> list = proFeedbackService.queryProFeedbackListJoinTaskWorkUnit(query); List<ProFeedbackVo> list = proFeedbackService.queryProFeedbackListJoinTaskWorkUnit(query);
List<ProFeedbackVo> proFeedbackVoList = new ArrayList<>(); List<ProFeedbackVo> proFeedbackVoList = new ArrayList<>();
...@@ -181,7 +189,7 @@ public class ProFeedbackController extends BaseController { ...@@ -181,7 +189,7 @@ public class ProFeedbackController extends BaseController {
ExcelUtil<ProFeedbackVo> util = new ExcelUtil<>(ProFeedbackVo.class); ExcelUtil<ProFeedbackVo> util = new ExcelUtil<>(ProFeedbackVo.class);
util.exportExcel(response, list, "生产报工记录列表","生产报工记录列表"); util.exportExcel(response, proFeedbackVoList, "生产报工记录列表","生产报工记录列表");
} }
/** /**
* 查询生产报工记录列表 * 查询生产报工记录列表
......
...@@ -382,6 +382,11 @@ public class ProWorkorder extends TreeEntity { ...@@ -382,6 +382,11 @@ public class ProWorkorder extends TreeEntity {
@TableField(exist = false) @TableField(exist = false)
private String combinationCode; private String combinationCode;
/** 工单工艺路线首道工序名称(列表展示用) */
@TableField(exist = false)
@ApiModelProperty("工单首工序名称")
private String firstProcessName;
@TableField(exist = false) @TableField(exist = false)
private String workorderIds; private String workorderIds;
......
...@@ -233,6 +233,12 @@ public class ProTaskWorkunit extends BaseEntity { ...@@ -233,6 +233,12 @@ public class ProTaskWorkunit extends BaseEntity {
@Excel(name = "排产次数") @Excel(name = "排产次数")
private String taskBatch; private String taskBatch;
@TableField(exist = false)
@ApiModelProperty("排产日期")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "排产日期", width = 20, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date scheduleDocCreateTime;
@ApiModelProperty("标准工时") @ApiModelProperty("标准工时")
private BigDecimal stdWorkingTime; private BigDecimal stdWorkingTime;
......
...@@ -106,6 +106,12 @@ public class ProFeedbackVo { ...@@ -106,6 +106,12 @@ public class ProFeedbackVo {
@Excel(name = "生产任务编号") @Excel(name = "生产任务编号")
private String taskCode; private String taskCode;
/**
* 排产次数
*/
@Excel(name = "排产次数")
private String taskBatch;
/** /**
* 产品物料ID * 产品物料ID
*/ */
......
package com.ximai.mes.pro.domain.vo;
import lombok.Data;
/**
* 工单首工序名称(待排产列表等)
*/
@Data
public class WorkorderFirstProcessNameVo {
private Long workorderId;
private String firstProcessName;
}
package com.ximai.mes.pro.domain.vo;
import lombok.Data;
/**
* 工单首道未完成工序名称(生产进度等)
*/
@Data
public class WorkorderFirstUnfinishedProcessVo {
private String workorderCode;
private String firstUnfinishedProcessName;
}
...@@ -69,6 +69,14 @@ public class ProTaskWorkunitQuery extends BaseEntity { ...@@ -69,6 +69,14 @@ public class ProTaskWorkunitQuery extends BaseEntity {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date scheduleEndDateTo; private Date scheduleEndDateTo;
@ApiModelProperty("排产日期-开始")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date scheduleDocCreateTimeFrom;
@ApiModelProperty("排产日期-结束")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date scheduleDocCreateTimeTo;
@ApiModelProperty("工作中心Id") @ApiModelProperty("工作中心Id")
private Long workCenterId; private Long workCenterId;
......
package com.ximai.mes.pro.dto; package com.ximai.mes.pro.dto;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ximai.mes.pro.domain.ProFeedback; import com.ximai.mes.pro.domain.ProFeedback;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.Date;
@Data @Data
public class ProFeedbackCheckListDto extends ProFeedback { public class ProFeedbackCheckListDto extends ProFeedback {
Boolean isCheckUser = false; Boolean isCheckUser = false;
...@@ -16,4 +19,18 @@ public class ProFeedbackCheckListDto extends ProFeedback { ...@@ -16,4 +19,18 @@ public class ProFeedbackCheckListDto extends ProFeedback {
@ApiModelProperty("产品图号") @ApiModelProperty("产品图号")
@TableField(exist = false) @TableField(exist = false)
private String customerDrawingNo; private String customerDrawingNo;
@ApiModelProperty("排产次数")
private String taskBatch;
@ApiModelProperty("工序名称")
private String processName;
@ApiModelProperty("报工时间-开始")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date feedbackTimeStart;
@ApiModelProperty("报工时间-结束")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date feedbackTimeEnd;
} }
...@@ -58,7 +58,9 @@ public interface ProFeedbackMapper { ...@@ -58,7 +58,9 @@ public interface ProFeedbackMapper {
"\t workorder.order_code,\n" + "\t workorder.order_code,\n" +
"\t workorder.order_serial,\n" + "\t workorder.order_serial,\n" +
"\t workorder.customer_drawing_no,\n" + "\t workorder.customer_drawing_no,\n" +
"\tit.sap_item_code,ta.arrange_code \n" + "\tit.sap_item_code,\n" +
"\tta.arrange_code,\n" +
"\tSUBSTRING_INDEX(ta.task_batch, '-', -1) AS task_batch \n" +
"FROM\n" + "FROM\n" +
"\tpro_feedback f\n" + "\tpro_feedback f\n" +
"\tLEFT JOIN pro_task_workunit tw ON tw.task_workunit_id = f.task_workunit_id\n" + "\tLEFT JOIN pro_task_workunit tw ON tw.task_workunit_id = f.task_workunit_id\n" +
......
...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; ...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ximai.mes.pro.domain.proWorkOrder.ProWorkOrderProcess; import com.ximai.mes.pro.domain.proWorkOrder.ProWorkOrderProcess;
import com.ximai.mes.pro.domain.proWorkOrder.ProWorkOrderProcessItem; import com.ximai.mes.pro.domain.proWorkOrder.ProWorkOrderProcessItem;
import com.ximai.mes.pro.domain.vo.ProWorkOrderProcessVo; import com.ximai.mes.pro.domain.vo.ProWorkOrderProcessVo;
import com.ximai.mes.pro.domain.vo.WorkorderFirstProcessNameVo;
import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
...@@ -26,6 +27,11 @@ public interface ProWorkOrderProcessMapper { ...@@ -26,6 +27,11 @@ public interface ProWorkOrderProcessMapper {
*/ */
List<ProWorkOrderProcessVo> selectProWorkOrderProcessByWorkOrderId(Long workorderId); List<ProWorkOrderProcessVo> selectProWorkOrderProcessByWorkOrderId(Long workorderId);
/**
* 批量查询工单工艺路线首道工序名称(按 idx 升序取第一条)
*/
List<WorkorderFirstProcessNameVo> selectFirstProcessNameByWorkorderIds(@Param("workorderIds") List<Long> workorderIds);
/** /**
* 查询所属所有工序 * 查询所属所有工序
......
...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; ...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ximai.mes.pro.domain.task.ProTask; import com.ximai.mes.pro.domain.task.ProTask;
import com.ximai.mes.pro.domain.vo.ProTaskVo; import com.ximai.mes.pro.domain.vo.ProTaskVo;
import com.ximai.mes.pro.domain.vo.WorkorderFirstUnfinishedProcessVo;
import com.ximai.mes.report.response.WorkOrderProgressProcessListResponse; import com.ximai.mes.report.response.WorkOrderProgressProcessListResponse;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
...@@ -203,4 +204,9 @@ public interface ProTaskMapper extends BaseMapper<ProTask> { ...@@ -203,4 +204,9 @@ public interface ProTaskMapper extends BaseMapper<ProTask> {
void deleteByTaskBatch(@Param("taskBatch")String taskBatch); void deleteByTaskBatch(@Param("taskBatch")String taskBatch);
List<WorkOrderProgressProcessListResponse> getProcessList(@Param("workorderCode")String workorderCode); List<WorkOrderProgressProcessListResponse> getProcessList(@Param("workorderCode")String workorderCode);
/**
* 批量查询工单首道未完成工序名称(按 idx 升序,与生产进度工序状态判定一致)
*/
List<WorkorderFirstUnfinishedProcessVo> selectFirstUnfinishedProcessNameByWorkorderCodes(@Param("workorderCodes") List<String> workorderCodes);
} }
...@@ -152,7 +152,7 @@ public interface ProTaskWorkunitMapper extends BaseMapper<ProTaskWorkunit> { ...@@ -152,7 +152,7 @@ public interface ProTaskWorkunitMapper extends BaseMapper<ProTaskWorkunit> {
"\t, t.client_id, t.client_code, t.client_name, t.client_nick, t.is_last_process, ptw.schedule_start_date\n" + "\t, t.client_id, t.client_code, t.client_name, t.client_nick, t.is_last_process, ptw.schedule_start_date\n" +
"\t, t.duration, ptw.schedule_end_date, t.color_code, t.request_date\n" + "\t, t.duration, ptw.schedule_end_date, t.color_code, t.request_date\n" +
"\t, t.attr1, t.attr2, t.attr3, t.attr4\n" + "\t, t.attr1, t.attr2, t.attr3, t.attr4\n" +
"\t, t.create_time, t.update_by, t.update_time, ptw.STATUS, ptw.quantity_qualify, ptw.remark\n" + "\t, t.create_time as schedule_doc_create_time, t.update_by, t.update_time, ptw.STATUS, ptw.quantity_qualify, ptw.remark\n" +
"\t,ptw.source_task_workunit_id, ptw.quantity_unqualify, ptw.outsource_unit_price,ptw.outsourced, ptw.vendor_id,ptw.vendor_name, mw.workunit_id, mw.workunit_code, mw.workunit_name, ptw.std_working_time,ptw.std_working_time_uom, wo.workorder_code\n" + "\t,ptw.source_task_workunit_id, ptw.quantity_unqualify, ptw.outsource_unit_price,ptw.outsourced, ptw.vendor_id,ptw.vendor_name, mw.workunit_id, mw.workunit_code, mw.workunit_name, ptw.std_working_time,ptw.std_working_time_uom, wo.workorder_code\n" +
"\t, (case ptw.STATUS when 'BEGINNING' then 1 when 'PREPARE' then 2 when 'PAUSE' then 3 when 'ERROR_STOP' then 4 end) statusIndex\n" + "\t, (case ptw.STATUS when 'BEGINNING' then 1 when 'PREPARE' then 2 when 'PAUSE' then 3 when 'ERROR_STOP' then 4 end) statusIndex\n" +
"from pro_task_workunit ptw\n" + "from pro_task_workunit ptw\n" +
......
...@@ -1475,8 +1475,8 @@ public class ProTaskServiceImpl implements IProTaskService, ApplicationContextAw ...@@ -1475,8 +1475,8 @@ public class ProTaskServiceImpl implements IProTaskService, ApplicationContextAw
if(params.getTaskBatchList() == null || params.getTaskBatchList().size() < 1) if(params.getTaskBatchList() == null || params.getTaskBatchList().size() < 1)
return; return;
params.setTaskBatchList(params.getTaskBatchList().stream().distinct().collect(Collectors.toList())); params.setTaskBatchList(params.getTaskBatchList().stream().distinct().collect(Collectors.toList()));
Set<String> affectedWorkorderCodes = new HashSet<>();
//1.pro_task 2.pro_task_workorder ,3.pro_task_workunit 4.pro_product_qrcode_record 5.pro_workorder //1.pro_task 2.pro_task_workorder ,3.pro_task_workunit 4.pro_product_qrcode_record 5.pro_workorder
//获取该批次下所有数据
for (String taskBatch : params.getTaskBatchList()){ for (String taskBatch : params.getTaskBatchList()){
ProTask proTaskCheck = new ProTask(); ProTask proTaskCheck = new ProTask();
proTaskCheck.setTaskBatch(taskBatch); proTaskCheck.setTaskBatch(taskBatch);
...@@ -1486,12 +1486,45 @@ public class ProTaskServiceImpl implements IProTaskService, ApplicationContextAw ...@@ -1486,12 +1486,45 @@ public class ProTaskServiceImpl implements IProTaskService, ApplicationContextAw
ExceptionUtil.checkTrueThrowException(proTasks.stream().filter(proTask -> !proTask.getStatus().equals("NORMARL")).count() > 0, MessageUtils.message("rollback.schedule.status.err",taskBatch)); ExceptionUtil.checkTrueThrowException(proTasks.stream().filter(proTask -> !proTask.getStatus().equals("NORMARL")).count() > 0, MessageUtils.message("rollback.schedule.status.err",taskBatch));
ExceptionUtil.checkTrueThrowException(proFeedbackMapper.selectCount(proTasks.stream().map(proTask -> proTask.getTaskId()).collect(Collectors.toList())) > 0, MessageUtils.message("rollback.schedule.status.err",taskBatch)); ExceptionUtil.checkTrueThrowException(proFeedbackMapper.selectCount(proTasks.stream().map(proTask -> proTask.getTaskId()).collect(Collectors.toList())) > 0, MessageUtils.message("rollback.schedule.status.err",taskBatch));
proTaskMapper.deleteByTaskBatch(taskBatch); proTaskMapper.deleteByTaskBatch(taskBatch);
proTaskWorkunitMapper.deleteByTaskIds(proTasks.stream().map(proTask -> proTask.getTaskId()).collect(Collectors.toList())); proTaskWorkunitMapper.deleteByTaskIds(proTasks.stream().map(ProTask::getTaskId).collect(Collectors.toList()));
proTaskWorkorderMapper.deleteByTaskIds(proTasks.stream().map(proTask -> proTask.getTaskId()).collect(Collectors.toList())); proTaskWorkorderMapper.deleteByTaskIds(proTasks.stream().map(ProTask::getTaskId).collect(Collectors.toList()));
proProductQrcodeRecordMapper.deleteProProductQrcodeRecordByTaskBatch(taskBatch); proProductQrcodeRecordMapper.deleteProProductQrcodeRecordByTaskBatch(taskBatch);
proWorkorderMapper.rollBACKschedule(proTasks.get(0).getArrangeCode(),proTasks.get(0).getQuantity(),SecurityUtils.getUsername()); String workorderCode = proTasks.get(0).getArrangeCode();
proWorkorderMapper.rollBACKschedule(workorderCode, proTasks.get(0).getQuantity(), SecurityUtils.getUsername());
affectedWorkorderCodes.add(workorderCode);
} }
for (String workorderCode : affectedWorkorderCodes) {
resetWorkorderToPublishedIfAllScheduleCancelled(workorderCode);
}
}
/**
* 工单下排产任务已全部取消时,回写工单状态为已发布并清零已排产数量
*/
private void resetWorkorderToPublishedIfAllScheduleCancelled(String workorderCode) {
if (StringUtils.isEmpty(workorderCode)) {
return;
}
ProTask taskQuery = new ProTask();
taskQuery.setArrangeCode(workorderCode);
if (proTaskMapper.selectProTaskList(taskQuery).size() > 0) {
return;
}
ProWorkorder workorder = proWorkorderMapper.selectProWorkorderWorderCode(workorderCode);
if (workorder == null) {
return;
}
String status = workorder.getStatus();
if (!WorkorderStatusEnum.SCHEDULED.getValue().equals(status)
&& !WorkorderStatusEnum.ISSUED.getValue().equals(status)
&& !WorkorderStatusEnum.PRODUCING.getValue().equals(status)) {
return;
}
workorder.setStatus(WorkorderStatusEnum.PUBLISHED.getValue());
workorder.setQuantityScheduled(BigDecimal.ZERO);
workorder.setUpdateBy(SecurityUtils.getUsername());
workorder.setUpdateTime(DateUtils.getNowDate());
proWorkorderService.updateProWorkorder(workorder);
} }
@Override @Override
......
...@@ -444,8 +444,10 @@ public class ProTaskWorkunitServiceImpl implements IProTaskWorkunitService { ...@@ -444,8 +444,10 @@ public class ProTaskWorkunitServiceImpl implements IProTaskWorkunitService {
query.like(StringUtils.isNotEmpty(proTaskWorkunit.getProcessName()), "t.process_name", proTaskWorkunit.getProcessName()); query.like(StringUtils.isNotEmpty(proTaskWorkunit.getProcessName()), "t.process_name", proTaskWorkunit.getProcessName());
query.gt(proTaskWorkunit.getScheduleStartDateFrom() != null, "ptw.schedule_start_date", proTaskWorkunit.getScheduleStartDateFrom()); query.gt(proTaskWorkunit.getScheduleStartDateFrom() != null, "ptw.schedule_start_date", proTaskWorkunit.getScheduleStartDateFrom());
query.le(proTaskWorkunit.getScheduleStartDateTo() != null, "ptw.schedule_start_date", proTaskWorkunit.getScheduleStartDateTo()); query.le(proTaskWorkunit.getScheduleStartDateTo() != null, "ptw.schedule_start_date", proTaskWorkunit.getScheduleStartDateTo());
query.gt(proTaskWorkunit.getScheduleEndDateFrom() != null, "ptw.schedule_start_date", proTaskWorkunit.getScheduleEndDateFrom()); query.gt(proTaskWorkunit.getScheduleEndDateFrom() != null, "ptw.schedule_end_date", proTaskWorkunit.getScheduleEndDateFrom());
query.le(proTaskWorkunit.getScheduleEndDateTo() != null, "ptw.schedule_start_date", proTaskWorkunit.getScheduleEndDateTo()); query.le(proTaskWorkunit.getScheduleEndDateTo() != null, "ptw.schedule_end_date", proTaskWorkunit.getScheduleEndDateTo());
query.ge(proTaskWorkunit.getScheduleDocCreateTimeFrom() != null, "t.create_time", proTaskWorkunit.getScheduleDocCreateTimeFrom());
query.le(proTaskWorkunit.getScheduleDocCreateTimeTo() != null, "t.create_time", proTaskWorkunit.getScheduleDocCreateTimeTo());
query.eq(StringUtils.isNotEmpty(proTaskWorkunit.getArrangeCode()), "t.arrange_code", proTaskWorkunit.getArrangeCode()); query.eq(StringUtils.isNotEmpty(proTaskWorkunit.getArrangeCode()), "t.arrange_code", proTaskWorkunit.getArrangeCode());
query.eq(proTaskWorkunit.getOutsourced()!=null, "ptw.outsourced", proTaskWorkunit.getOutsourced()); query.eq(proTaskWorkunit.getOutsourced()!=null, "ptw.outsourced", proTaskWorkunit.getOutsourced());
query.eq(StringUtils.isNotEmpty(proTaskWorkunit.getCustomerProjectNo()), "wo.customer_project_no", proTaskWorkunit.getCustomerProjectNo()); query.eq(StringUtils.isNotEmpty(proTaskWorkunit.getCustomerProjectNo()), "wo.customer_project_no", proTaskWorkunit.getCustomerProjectNo());
......
...@@ -49,11 +49,13 @@ public class WorkOrderProgressController extends BaseController { ...@@ -49,11 +49,13 @@ public class WorkOrderProgressController extends BaseController {
@PostMapping("/getList/export") @PostMapping("/getList/export")
public void export(HttpServletResponse response, WorkOrderProgressRequest workOrderProgressRequest) { public void export(HttpServletResponse response, WorkOrderProgressRequest workOrderProgressRequest) {
List<WorkOrderProgressListResponse> workOrderProgressListResponses = workOrderProgressService.getList(workOrderProgressRequest); List<WorkOrderProgressListResponse> workOrderProgressListResponses = workOrderProgressService.getList(workOrderProgressRequest);
workOrderProgressListResponses.stream().forEach(workOrderProgressListResponse ->{ workOrderProgressListResponses.forEach(workOrderProgressListResponse -> {
workOrderProgressListResponse.setStatus(WorkorderStatusEnum.get(workOrderProgressListResponse.getStatus()).getEnumName()); WorkorderStatusEnum statusEnum = WorkorderStatusEnum.get(workOrderProgressListResponse.getStatus());
if (statusEnum != null) {
workOrderProgressListResponse.setStatus(statusEnum.getEnumName());
}
workOrderProgressListResponse.setWorkorderType(dictDataService.getDictLabel("mes_workorder_type", workOrderProgressListResponse.getWorkorderType())); workOrderProgressListResponse.setWorkorderType(dictDataService.getDictLabel("mes_workorder_type", workOrderProgressListResponse.getWorkorderType()));
});
} );
ExcelUtil<WorkOrderProgressListResponse> util = new ExcelUtil<>(WorkOrderProgressListResponse.class); ExcelUtil<WorkOrderProgressListResponse> util = new ExcelUtil<>(WorkOrderProgressListResponse.class);
util.exportExcel(response, workOrderProgressListResponses, "生产进度-明细界面导出"); util.exportExcel(response, workOrderProgressListResponses, "生产进度-明细界面导出");
} }
......
...@@ -24,6 +24,12 @@ public class FeedbackRequest { ...@@ -24,6 +24,12 @@ public class FeedbackRequest {
@ApiModelProperty("订单单号") @ApiModelProperty("订单单号")
private String orderCode; private String orderCode;
@ApiModelProperty("订单序号")
private String orderSerial;
@ApiModelProperty("排产次数")
private String taskBatch;
/** /**
* 工单编码 * 工单编码
*/ */
...@@ -119,6 +125,14 @@ public class FeedbackRequest { ...@@ -119,6 +125,14 @@ public class FeedbackRequest {
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd")
private Date endDate; private Date endDate;
@ApiModelProperty("计划开始时间-开始")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date scheduleStartDateFrom;
@ApiModelProperty("计划开始时间-结束")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date scheduleStartDateTo;
@ApiModelProperty("是否筛查不良") @ApiModelProperty("是否筛查不良")
private Boolean defectStatus; private Boolean defectStatus;
......
package com.ximai.mes.report.request; package com.ximai.mes.report.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ximai.common.annotation.Excel; import com.ximai.common.annotation.Excel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.Date;
import java.util.List; import java.util.List;
@Data @Data
...@@ -52,4 +54,12 @@ public class WorkOrderProgressRequest { ...@@ -52,4 +54,12 @@ public class WorkOrderProgressRequest {
private String orderSerial; private String orderSerial;
@ApiModelProperty("排产次数") @ApiModelProperty("排产次数")
private String taskBatch; private String taskBatch;
@ApiModelProperty("排产日期-开始")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date scheduleDateFrom;
@ApiModelProperty("排产日期-结束")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date scheduleDateTo;
} }
...@@ -170,6 +170,11 @@ public class FeedbackResponse extends ProFeedback { ...@@ -170,6 +170,11 @@ public class FeedbackResponse extends ProFeedback {
@Excel(name = "实际工时") @Excel(name = "实际工时")
private String machineTime; private String machineTime;
@ApiModelProperty("计划开始时间")
@Excel(name = "计划开始时间", dateFormat = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date scheduleStartDate;
/** /**
* 预计结束时间 * 预计结束时间
*/ */
......
...@@ -153,6 +153,11 @@ public class FeedbackResponseExportByList { ...@@ -153,6 +153,11 @@ public class FeedbackResponseExportByList {
// @ApiModelProperty("实际工时") // @ApiModelProperty("实际工时")
// @Excel(name = "实际工时") // @Excel(name = "实际工时")
private BigDecimal machineTimeBigDecimal; private BigDecimal machineTimeBigDecimal;
@ApiModelProperty("计划开始时间")
@Excel(name = "计划开始时间", dateFormat = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date scheduleStartDate;
/** /**
* 预计结束时间 * 预计结束时间
*/ */
......
...@@ -33,7 +33,12 @@ public class WorkOrderProgressListResponse { ...@@ -33,7 +33,12 @@ public class WorkOrderProgressListResponse {
private String lineName; private String lineName;
@ApiModelProperty("工单状态") @ApiModelProperty("工单状态")
@Excel(name = "工单状态")
private String status; private String status;
@ApiModelProperty("生产中状态:首道未完成工序名")
@Excel(name = "生产中状态:首道未完成工序名")
private String firstUnfinishedProcessName;
/** /**
* 工单类型 * 工单类型
*/ */
...@@ -83,5 +88,10 @@ public class WorkOrderProgressListResponse { ...@@ -83,5 +88,10 @@ public class WorkOrderProgressListResponse {
@ApiModelProperty("排产次数") @ApiModelProperty("排产次数")
@Excel(name = "排产次数") @Excel(name = "排产次数")
private String taskBatch; private String taskBatch;
@ApiModelProperty("排产日期")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "排产日期", width = 20, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date scheduleDate;
} }
package com.ximai.mes.report.service.impl; package com.ximai.mes.report.service.impl;
import com.ximai.common.utils.data.StringUtils;
import com.ximai.mes.constant.TaskStatusEnum; import com.ximai.mes.constant.TaskStatusEnum;
import com.ximai.mes.constant.WorkorderStatusEnum;
import com.ximai.mes.pro.domain.ProFeedback; import com.ximai.mes.pro.domain.ProFeedback;
import com.ximai.mes.pro.domain.proWorkOrder.ProWorkorder; import com.ximai.mes.pro.domain.proWorkOrder.ProWorkorder;
import com.ximai.mes.pro.domain.task.ProTask; import com.ximai.mes.pro.domain.task.ProTask;
import com.ximai.mes.pro.domain.task.ProTaskWorkunit; import com.ximai.mes.pro.domain.task.ProTaskWorkunit;
import com.ximai.mes.pro.domain.vo.WorkorderFirstUnfinishedProcessVo;
import com.ximai.mes.pro.mapper.ProFeedbackMapper; import com.ximai.mes.pro.mapper.ProFeedbackMapper;
import com.ximai.mes.pro.mapper.proWorkOrder.ProWorkorderMapper; import com.ximai.mes.pro.mapper.proWorkOrder.ProWorkorderMapper;
import com.ximai.mes.pro.mapper.task.ProTaskMapper; import com.ximai.mes.pro.mapper.task.ProTaskMapper;
...@@ -23,6 +26,8 @@ import java.math.BigDecimal; ...@@ -23,6 +26,8 @@ import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.text.NumberFormat; import java.text.NumberFormat;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service @Service
public class WorkOrderProgressServiceImp implements WorkOrderProgressService { public class WorkOrderProgressServiceImp implements WorkOrderProgressService {
...@@ -53,9 +58,38 @@ public class WorkOrderProgressServiceImp implements WorkOrderProgressService { ...@@ -53,9 +58,38 @@ public class WorkOrderProgressServiceImp implements WorkOrderProgressService {
} }
} }
fillFirstUnfinishedProcessName(workOrderProgressListResponses);
return workOrderProgressListResponses; return workOrderProgressListResponses;
} }
/**
* 生产中工单填充首道未完成工序名(与工序明细状态判定一致)
*/
private void fillFirstUnfinishedProcessName(List<WorkOrderProgressListResponse> list) {
if (list == null || list.isEmpty()) {
return;
}
List<String> producingCodes = list.stream()
.filter(r -> WorkorderStatusEnum.PRODUCING.getValue().equals(r.getStatus()))
.map(WorkOrderProgressListResponse::getWorkorderCode)
.filter(StringUtils::isNotEmpty)
.distinct()
.collect(Collectors.toList());
if (producingCodes.isEmpty()) {
return;
}
List<WorkorderFirstUnfinishedProcessVo> rows = proTaskMapper.selectFirstUnfinishedProcessNameByWorkorderCodes(producingCodes);
Map<String, String> nameMap = rows.stream().collect(Collectors.toMap(
WorkorderFirstUnfinishedProcessVo::getWorkorderCode,
WorkorderFirstUnfinishedProcessVo::getFirstUnfinishedProcessName,
(a, b) -> a));
for (WorkOrderProgressListResponse item : list) {
if (WorkorderStatusEnum.PRODUCING.getValue().equals(item.getStatus())) {
item.setFirstUnfinishedProcessName(nameMap.get(item.getWorkorderCode()));
}
}
}
@Override @Override
public List<WorkOrderProgressProcessListResponse> getProcessList(String workorderCode) { public List<WorkOrderProgressProcessListResponse> getProcessList(String workorderCode) {
List<WorkOrderProgressProcessListResponse> workOrderProgressProcessListResponses = proTaskMapper.getProcessList(workorderCode); List<WorkOrderProgressProcessListResponse> workOrderProgressProcessListResponses = proTaskMapper.getProcessList(workorderCode);
......
...@@ -93,6 +93,28 @@ ...@@ -93,6 +93,28 @@
parameterType="Long" resultMap="ProWorkOrderProcessResult"> parameterType="Long" resultMap="ProWorkOrderProcessResult">
<include refid="selectProWorkOrderProcessVo"/> <include refid="selectProWorkOrderProcessVo"/>
where pwop.workorder_id = #{workorderId} where pwop.workorder_id = #{workorderId}
order by pwop.idx asc
</select>
<select id="selectFirstProcessNameByWorkorderIds"
resultType="com.ximai.mes.pro.domain.vo.WorkorderFirstProcessNameVo">
SELECT workorder_id, process_name AS first_process_name
FROM (
SELECT pwop.workorder_id,
pp.process_name,
ROW_NUMBER() OVER (PARTITION BY pwop.workorder_id ORDER BY pwop.idx ASC, pwop.workorder_process_id ASC) AS rn
FROM pro_work_order_process pwop
LEFT JOIN pro_process pp ON pwop.process_id = pp.process_id
<where>
<if test="workorderIds != null and workorderIds.size() > 0">
AND pwop.workorder_id IN
<foreach collection="workorderIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
</where>
) t
WHERE t.rn = 1
</select> </select>
<select id="selectProWorkOrderProcessByWorkorderProcessId" parameterType="Long" <select id="selectProWorkOrderProcessByWorkorderProcessId" parameterType="Long"
......
...@@ -267,6 +267,7 @@ ...@@ -267,6 +267,7 @@
pw.erp_update_time , pw.erp_update_time ,
item.line_name, item.line_name,
SUBSTRING_INDEX(task.task_batch, '-', -1) task_batch, SUBSTRING_INDEX(task.task_batch, '-', -1) task_batch,
MIN(task.create_time) schedule_date,
sum(case task.is_last_process when 0 THEN 0 ELSE fe.quantity_qualify + fe.quantity_unqualify END) as quantity_produced sum(case task.is_last_process when 0 THEN 0 ELSE fe.quantity_qualify + fe.quantity_unqualify END) as quantity_produced
FROM FROM
pro_workorder pw pro_workorder pw
...@@ -368,6 +369,9 @@ ...@@ -368,6 +369,9 @@
pw.erp_update_time, pw.erp_update_time,
SUBSTRING_INDEX(task.task_batch, '-', -1) , SUBSTRING_INDEX(task.task_batch, '-', -1) ,
item.line_name item.line_name
<if test="scheduleDateFrom != null">
HAVING MIN(task.create_time) &gt;= #{scheduleDateFrom} AND MIN(task.create_time) &lt;= #{scheduleDateTo}
</if>
</select> </select>
<!-- 进度报表:主表列表,按工单排产时间降序。工序数/报工和用 JOIN 聚合表一次算出,避免每行相关子查询 --> <!-- 进度报表:主表列表,按工单排产时间降序。工序数/报工和用 JOIN 聚合表一次算出,避免每行相关子查询 -->
...@@ -721,7 +725,11 @@ ...@@ -721,7 +725,11 @@
where workorder_id = #{workorderId} where workorder_id = #{workorderId}
</update> </update>
<update id="rollBACKschedule"> <update id="rollBACKschedule">
update pro_workorder set quantity_scheduled = quantity_scheduled - #{quantity} , update_By = #{quantity}, update_time = now() where workorder_code = #{workorderCode} update pro_workorder
set quantity_scheduled = quantity_scheduled - #{quantity},
update_by = #{username},
update_time = now()
where workorder_code = #{workorderCode}
</update> </update>
<delete id="deleteProWorkorderByWorkorderId" parameterType="Long"> <delete id="deleteProWorkorderByWorkorderId" parameterType="Long">
......
...@@ -473,6 +473,29 @@ ...@@ -473,6 +473,29 @@
select * from pro_task where arrange_code = #{workorderCode} order by task_id select * from pro_task where arrange_code = #{workorderCode} order by task_id
</select> </select>
<select id="selectFirstUnfinishedProcessNameByWorkorderCodes"
resultType="com.ximai.mes.pro.domain.vo.WorkorderFirstUnfinishedProcessVo">
SELECT arrange_code AS workorder_code, process_name AS first_unfinished_process_name
FROM (
SELECT t.arrange_code,
t.process_name,
ROW_NUMBER() OVER (PARTITION BY t.arrange_code ORDER BY t.idx ASC, t.task_id ASC) AS rn
FROM pro_task t
WHERE t.arrange_code IN
<foreach collection="workorderCodes" item="code" open="(" separator="," close=")">
#{code}
</foreach>
AND (
NOT EXISTS (SELECT 1 FROM pro_task_workunit tw WHERE tw.task_id = t.task_id)
OR (
(SELECT COUNT(*) FROM pro_task_workunit tw WHERE tw.task_id = t.task_id)
&gt; (SELECT COUNT(*) FROM pro_task_workunit tw WHERE tw.task_id = t.task_id AND tw.status = 'FINISHED')
)
)
) x
WHERE x.rn = 1
</select>
<insert id="insertProTask" parameterType="ProTask" useGeneratedKeys="true" keyProperty="taskId"> <insert id="insertProTask" parameterType="ProTask" useGeneratedKeys="true" keyProperty="taskId">
insert into pro_task insert into pro_task
<trim prefix="(" suffix=")" suffixOverrides=","> <trim prefix="(" suffix=")" suffixOverrides=",">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment