package com.example.erp.service.pp;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
|
import com.example.erp.common.Constants;
|
import com.example.erp.entity.pp.DamageDetails;
|
import com.example.erp.entity.pp.FlowCard;
|
import com.example.erp.entity.pp.ReportingWork;
|
import com.example.erp.entity.pp.ReportingWorkDetail;
|
import com.example.erp.entity.sd.Order;
|
import com.example.erp.entity.sd.OrderDetail;
|
import com.example.erp.entity.sd.OrderProcessDetail;
|
import com.example.erp.exception.ServiceException;
|
import com.example.erp.mapper.pp.*;
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
import com.example.erp.mapper.sd.OrderMapper;
|
import com.example.erp.mapper.sd.OrderProcessDetailMapper;
|
import com.example.erp.service.sd.OrderProcessDetailService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
|
@Service
|
@DS("pp")
|
public class ReportingWorkService {
|
final
|
ReportingWorkMapper reportingWorkMapper;
|
final
|
BasicDateProduceMapper basicDateProduceMapper;
|
final
|
DamageDetailsMapper damageDetailsMapper;
|
final
|
OrderProcessDetailMapper orderProcessDetailMapper;
|
final
|
ReportingWorkDetailMapper
|
reportingWorkDetailMapper;
|
final OrderMapper
|
orderMapper;
|
|
final
|
FlowCardMapper flowCardMapper;
|
|
final
|
OrderProcessDetailService orderProcessDetailService;
|
|
|
|
public ReportingWorkService(ReportingWorkMapper reportingWorkMapper, BasicDateProduceMapper basicDateProduceMapper, DamageDetailsMapper damageDetailsMapper, ReportingWorkDetailMapper reportingWorkDetailMapper, OrderProcessDetailMapper orderProcessDetailMapper, OrderProcessDetailService orderProcessDetailService, OrderMapper orderMapper, FlowCardMapper flowCardMapper) {
|
this.reportingWorkMapper = reportingWorkMapper;
|
this.basicDateProduceMapper = basicDateProduceMapper;
|
this.damageDetailsMapper = damageDetailsMapper;
|
this.reportingWorkDetailMapper = reportingWorkDetailMapper;
|
this.orderProcessDetailMapper = orderProcessDetailMapper;
|
this.orderProcessDetailService = orderProcessDetailService;
|
this.orderMapper = orderMapper;
|
this.flowCardMapper = flowCardMapper;
|
}
|
|
public Map<String, Object> AddSelectLastWorkSv(String processIdStr, String technologyStr, String process) {
|
Map<String, Object> map = new HashMap<>();
|
//查询流程卡工艺流程
|
String technologicalProcess = reportingWorkMapper.SelectTechnologicalProcess(processIdStr);
|
|
int index = technologicalProcess.indexOf("-");
|
//获取工艺流程第一个工序
|
String interceptProcess = technologicalProcess.substring(0, index);
|
String[] processList = technologicalProcess.split("->");
|
int length = processList.length;
|
|
//定义当前工序上下工序
|
String previousProcess = "";
|
String nextProcess = "";
|
|
//循环该流程卡工艺流程
|
for (int i = 0; i < length; i++) {
|
//当到当前工序时
|
if (processList[i].equals(process)) {
|
//获取当前工序的上一道工序
|
if (i - 1 < 0) {
|
previousProcess = "";
|
} else {
|
previousProcess = processList[i - 1];
|
}
|
//获取当前工序的下一道工序
|
if (i + 1 > length - 1) {
|
nextProcess = "";
|
} else {
|
nextProcess = processList[i + 1];
|
}
|
//System.out.println("当前工序:" + process + " 上一道工序:" + previousProcess + " 下一道工序:" + nextProcess);
|
//查询当前工序的表头数据
|
//System.out.println(reportingWorkMapper.AddSelectLastWorkMp(processIdStr, technologyStr,previousProcess,nextProcess,process));
|
map.put("data", reportingWorkMapper.AddSelectLastWorkMp(processIdStr, technologyStr,previousProcess,nextProcess,process));
|
map.put("thisProcess", processList);
|
break;
|
}
|
}
|
|
//设备下拉框
|
map.put("device", reportingWorkMapper.SelectWorkBasicDeviceMp(process));
|
//班组下拉框
|
map.put("teams", reportingWorkMapper.SelectWorkBasicTeamsMp(process));
|
|
map.put("breakageType",reportingWorkMapper.selectBasicNameByType("breakagetype"));
|
map.put("breakageReason",reportingWorkMapper.selectBasicNameByType("breakagereason"));
|
|
//查询本工序报工需要哪几层,上工序是什么
|
String obtainTechnology = reportingWorkMapper.SelectWorkTechnologyMp(processIdStr);
|
|
//判断本工序是不是第一道工序
|
if (interceptProcess.equals(process)) {
|
//是第一道工序,查询流程卡数据
|
map.put("Detail", reportingWorkMapper.SelectTechnologicalNumMp(processIdStr,technologyStr,process));
|
}
|
else {
|
//不是第一道工序,查询报工数据
|
map.put("Detail", reportingWorkMapper.SelectReworlDetailMp(processIdStr,technologyStr,process));
|
}
|
|
// 第一道工序(流程卡数+补片数量-完工数-次破数-返工未完成数-禁用数量)
|
|
// 后续工序(上工序报工数-完工数-次破数-返工未完成数)
|
|
//获取该流程卡号历史报工工序
|
String historyProcess =reportingWorkMapper.historyProcessMp(processIdStr);
|
//历史报工工序设备
|
map.put("historyDevice",reportingWorkMapper.historyDeviceMp(historyProcess,process));
|
//历史报工工序班组
|
map.put("historyTeams",reportingWorkMapper.historyTeamsMp(processIdStr,process));
|
//历史工序
|
map.put("historyProcess",reportingWorkMapper.SelectHistoryProcessMp(historyProcess,process));
|
|
|
|
return map;
|
}
|
|
public Map<String, Object> SelectProcessSv() {
|
Map<String, Object> map = new HashMap<>();
|
map.put("process", reportingWorkMapper.SelectProcessMp());
|
return map;
|
}
|
|
//报工新增
|
@Transactional(rollbackFor = Exception.class)
|
public boolean SaveReportingWorkSv(Map<String, Object> reportingWorkMap) {
|
//接收解析主附表信息
|
JSONObject reportingWorkJson = new JSONObject(reportingWorkMap);
|
ReportingWork reportingWork = JSONObject.parseObject(JSONObject.toJSONString(reportingWorkJson.get("title")), ReportingWork.class);
|
List<ReportingWorkDetail> reportingWorkDetails = JSONArray.parseArray(JSONObject.toJSONString(reportingWorkJson.get("detail")), ReportingWorkDetail.class);
|
//获取当前最大报工单号生成报工单号
|
String formattedNumber = String.format("%04d", reportingWorkMapper.selectMaxReportingWorkId()+1);
|
//格式化当前日期
|
Date currentDate = new Date();
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMdd");
|
String formattedDate = dateFormat.format(currentDate);
|
String reportingWorkId = "BG"+formattedDate+formattedNumber;
|
reportingWork.setReportingWorkId(reportingWorkId);
|
reportingWork.setProcessId(reportingWork.getProcessId().substring(0,13));
|
|
int reviewState = (int) reportingWorkJson.get("type");
|
if(reviewState==1){
|
reportingWork.setReviewed(reportingWork.getCreator());
|
reportingWork.setReviewedState(1);
|
}else{
|
reportingWork.setReviewedState(0);
|
}
|
//主表插入
|
reportingWorkMapper.insert(reportingWork);
|
|
//副表循环插入,并且插入次破信息表。再根据次破信息修改订单玻璃流程表的完工数量与刺破数量
|
reportingWorkDetails.forEach(reportingWorkDetail -> {
|
reportingWorkDetail.setReportingWorkId(reportingWorkId);
|
List<DamageDetails> damageDetails = reportingWorkDetail.getDamageDetails();
|
if(damageDetails!=null && !damageDetails.isEmpty()){
|
damageDetails.forEach(damageDetail ->{
|
damageDetail.setReportingWorkId(reportingWorkId);
|
damageDetail.setOrderNumber(reportingWorkDetail.getOrderNumber());
|
damageDetail.setProcessId(reportingWork.getProcessId());
|
damageDetail.setTechnologyNumber(reportingWorkDetail.getTechnologyNumber());
|
damageDetailsMapper.insert(damageDetail);
|
});
|
}
|
//查询流程卡工艺流程
|
String technologicalProcess = reportingWorkMapper.SelectTechnologicalProcess(reportingWork.getProcessId());
|
|
int index = technologicalProcess.indexOf("-");
|
//获取工艺流程第一个工序
|
String interceptProcess = technologicalProcess.substring(0, index);
|
|
//判断当前工序是否为第一道工序工序,使用流程卡表数量或者小片流程表上工序数量
|
int processNum = 0;
|
if (interceptProcess.equals(reportingWork.getThisProcess())) {
|
processNum = reportingWorkMapper.selectFlowCardNum(
|
reportingWorkDetail.getOrderNumber(),
|
reportingWorkDetail.getTechnologyNumber(),
|
reportingWork.getProcessId(),
|
reportingWork.getThisProcess()
|
);
|
}else{
|
processNum = reportingWorkMapper.selectGlassProcessNum(
|
reportingWorkDetail.getOrderNumber(),
|
reportingWorkDetail.getTechnologyNumber(),
|
reportingWork.getProcessId(),
|
reportingWork.getThisProcess()
|
);
|
}
|
|
|
//判断是否大于当前数量并且抛出异常
|
if(processNum<(reportingWorkDetail.getBreakageQuantity()+reportingWorkDetail.getCompletedQuantity())){
|
Map<String,Object> map = new HashMap<>();
|
map.put("orderNumber",reportingWorkDetail.getOrderNumber());
|
map.put("technologyNumber",reportingWorkDetail.getOrderNumber());
|
map.put("processNum",processNum);
|
map.put("sumNum",reportingWorkDetail.getBreakageQuantity()+reportingWorkDetail.getCompletedQuantity());
|
String msg = JSON.toJSONString(map);
|
throw new ServiceException(Constants.Code_600,msg);
|
}
|
|
OrderProcessDetail orderProcessDetail = new OrderProcessDetail();
|
orderProcessDetail.setBrokenNum(reportingWorkDetail.getBreakageQuantity());
|
orderProcessDetail.setReportingWorkNum(reportingWorkDetail.getCompletedQuantity());
|
orderProcessDetail.setReportingWorkNumCount(reportingWorkDetail.getCompletedQuantity());
|
|
//根据订单id,订单序号,以及小片序号 更新小片流程的完工数量以及刺破数量
|
LambdaUpdateWrapper<OrderProcessDetail> updateWrapper = new LambdaUpdateWrapper<>();
|
updateWrapper.eq(OrderProcessDetail::getOrderNumber, reportingWorkDetail.getOrderNumber())
|
.eq(OrderProcessDetail::getProcessId, reportingWork.getProcessId().substring(0,13))
|
.eq(OrderProcessDetail::getOrderId, reportingWork.getOrderId())
|
.eq(OrderProcessDetail::getProcess, reportingWork.getThisProcess())
|
.eq(OrderProcessDetail::getTechnologyNumber, reportingWorkDetail.getTechnologyNumber())
|
.setSql("reporting_work_num_count = reporting_work_num_count +"+orderProcessDetail.getReportingWorkNum())
|
.setSql("reporting_work_num =reporting_work_num +"+orderProcessDetail.getReportingWorkNum())
|
.setSql("broken_num =broken_num +"+orderProcessDetail.getBrokenNum());
|
orderProcessDetailMapper.update(null,updateWrapper);
|
reportingWorkDetailMapper.insert(reportingWorkDetail);
|
//更新流程卡表的报工数量
|
if(Objects.equals(reportingWork.getNextProcess(), "")){
|
LambdaUpdateWrapper<FlowCard> flowCardLambdaUpdateWrapper =
|
new LambdaUpdateWrapper<>();
|
flowCardLambdaUpdateWrapper
|
.eq(FlowCard::getProcessId, reportingWork.getProcessId())
|
.eq(FlowCard::getOrderNumber, reportingWorkDetail.getOrderNumber())
|
.eq(FlowCard::getTechnologyNumber, reportingWorkDetail.getTechnologyNumber())
|
.setSql("inventory_quantity = inventory_quantity +"+orderProcessDetail.getReportingWorkNum());
|
flowCardMapper.update(null,flowCardLambdaUpdateWrapper);
|
}
|
|
|
});
|
return true;
|
}
|
|
//下工序审核方法
|
public boolean ReviewReportingWorkSv(Map<String, String> reportingWork) {
|
|
String processId = reportingWork.get("processId");
|
|
LambdaUpdateWrapper
|
<ReportingWork> updateWrapper = new LambdaUpdateWrapper<>();
|
updateWrapper
|
.eq(ReportingWork::getProcessId, processId.substring(0,13))
|
.eq(ReportingWork::getThisProcess,reportingWork.get("process"))
|
.eq(ReportingWork::getReviewedState,0)
|
.setSql("reviewed_state =1");
|
reportingWorkMapper.update(null,updateWrapper);
|
|
|
return true;
|
}
|
|
public Map<String,Object> selectUpdateReportingWorkSv(String reportingWorkId) {
|
ReportingWork reportingWork =reportingWorkMapper.selectOne(new LambdaQueryWrapper<ReportingWork>()
|
.eq(ReportingWork::getReportingWorkId,reportingWorkId));
|
reportingWork.setOrder(
|
orderMapper.selectOne(new LambdaQueryWrapper<Order>()
|
.eq(Order::getOrderId,reportingWork.getOrderId())));
|
reportingWork.setFlowCard(new FlowCard());
|
|
List<ReportingWorkDetail> reportingWorkDetails = reportingWorkDetailMapper.selectByreportingWorkId(reportingWorkId);
|
|
|
Map<String,Object> map = new HashMap<>();
|
map.put("reportingWork",reportingWork);
|
map.put("reportingWorkDetails",reportingWorkDetails);
|
return map;
|
|
}
|
}
|