操作者加工完成报表加用工属性(正式/临时)、派工增加完成查询方法、PDA主界面增加

master
yangwl 3 years ago
parent ed5861ac3d
commit d2e9078a3e

@ -816,6 +816,10 @@
<if test="completeEndDateTime != null and completeEndDateTime != ''">
AND zsd.ACTUAL_COMPLETE_DATE &lt;= TO_DATE(#{completeEndDateTime}|| '15:59:59','YYYY-MM-DD HH24:MI:SS')
</if>
<if test="temporaryUser != null and temporaryUser != ''">
AND ZUR.TEMPORARY_USER= #{temporaryUser}
</if>
</where>
</select>

@ -24,6 +24,8 @@ public interface SfcDispatchMapper extends BaseMapper<SfcDispatch> {
List<SfcDispatch> findSfcDispatch(@Param("site") String site, @Param("sfc") String sfc, @Param("operation") String operation, @Param("stepId") String stepId);
SfcDispatch findsfcComplete(@Param("site") String site, @Param("stepId") String stepId, @Param("shopOrder") String shopOrder);
/**
*
*

@ -31,6 +31,17 @@ public interface SfcDispatchService extends IService<SfcDispatch> {
*/
List<SfcDispatch> findSfcDispatch(String site, String sfc, String operation, String stepId);
/**
*
* @param site
* @param stepId
* @param shopOrder
* @return
*/
SfcDispatch findsfcComplete(String site,String stepId, String shopOrder);
/**
*
*

@ -28,7 +28,9 @@ import com.foreverwin.modular.core.exception.BaseException;
import com.foreverwin.modular.core.exception.BusinessException;
import com.foreverwin.modular.core.util.CommonMethods;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.net.ftp.FTPClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -86,11 +88,18 @@ public class SfcDispatchServiceImpl extends ServiceImpl<SfcDispatchMapper, SfcDi
private ProductionCalendarService productionCalendarService;
@Autowired
private SfcDispatchEmployeeService sfcDispatchEmployeeService;
private Logger logger = LoggerFactory.getLogger(SfcDispatchServiceImpl.class);
@Override
public List<SfcDispatch> findSfcDispatch(String site, String sfc, String operation, String stepId) {
return sfcDispatchMapper.findSfcDispatch(site, sfc, operation, stepId);
}
@Override
public SfcDispatch findsfcComplete(String site, String stepId, String shopOrder) {
return sfcDispatchMapper.findsfcComplete(site,stepId,shopOrder);
}
@Override
public List<SfcDispatchDto> findSfcDispatchList(Map paramMap) throws IOException {
List<SfcDispatchDto> list = sfcDispatchMapper.findSfcDispatchList(paramMap);
@ -153,6 +162,8 @@ public class SfcDispatchServiceImpl extends ServiceImpl<SfcDispatchMapper, SfcDi
@Override
public Boolean releaseDispatch(String site, String user, StringBuffer message, List<SfcDispatchDto> sfcDispatchList) {
Boolean flag = this.sfcDispatch(site, user, DispatchStatusEnum.RELEASE.getCode(), message, sfcDispatchList);
if (flag) {
@ -591,6 +602,10 @@ public class SfcDispatchServiceImpl extends ServiceImpl<SfcDispatchMapper, SfcDi
}
}
if (employees==null){
logger.info("工单号:"+sfcDispatchDto.getShopOrder()+"操作人员工号:"+employees+"操作人员名字:"+sfcDispatchDto.getEmployeeDescription());
}
//校验操作者与资源是否匹配
if (StringUtil.notBlank(employees)) {
//资源、计划时间必输
@ -634,7 +649,7 @@ public class SfcDispatchServiceImpl extends ServiceImpl<SfcDispatchMapper, SfcDi
continue;
}
}
logger.info("工单号:"+sfcDispatchDto.getShopOrder()+"操作人员工号2"+employees+"操作人员名字2"+sfcDispatchDto.getEmployeeDescription());
sfcDispatch.setResrce(resource);
sfcDispatch.setEmployee(employees);
sfcDispatch.setEmployeeDescription(sfcDispatchDto.getEmployeeDescription());

@ -2,6 +2,7 @@ package com.foreverwin.mesnac.dispatch.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.foreverwin.mesnac.common.constant.Constants;
import com.foreverwin.mesnac.common.dto.SfcDispatchDto;
import com.foreverwin.mesnac.common.enums.HandleEnum;
import com.foreverwin.mesnac.common.ftp.CappFtpClient;
import com.foreverwin.mesnac.common.util.ExceptionUtil;
@ -20,6 +21,7 @@ import com.foreverwin.mesnac.meapi.util.StringUtils;
import com.foreverwin.modular.core.exception.BaseException;
import com.foreverwin.modular.core.exception.BusinessException;
import com.foreverwin.modular.core.meext.MEServices;
import com.foreverwin.modular.core.util.CommonMethods;
import com.sap.me.demand.ReleaseShopOrderRequest;
import com.sap.me.demand.ReleaseShopOrderResponse;
import com.sap.me.demand.ReleasedSfc;
@ -35,6 +37,7 @@ import java.io.IOException;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import static com.foreverwin.modular.core.meext.PapiServiceEnum.NCProductionService;
@ -306,7 +309,7 @@ public class ShopOrderReleaseServiceImpl implements ShopOrderReleaseService {
sfcDispatchModel.setDispatchNo(dispatchNo);
sfcDispatchModel.setDispatchStatus(Constants.STATUS_NEW);
sfcDispatchModel.setDrawingsNo("");
sfcDispatchModel.setDrawingsRevision(GetDrawingVersionUtil.GetDrawingVerson(itemBo, connect));
// sfcDispatchModel.setDrawingsRevision(GetDrawingVersionUtil.GetDrawingVerson(itemBo, connect));
// sfcDispatchModel.setDrawingsRevision("");
sfcDispatchModel.setIsLock(Constants.STATUS_N);
sfcDispatchModel.setRouterBo(routerBo);
@ -457,7 +460,24 @@ public class ShopOrderReleaseServiceImpl implements ShopOrderReleaseService {
List<SfcDispatch> addSfcDispatchList = new ArrayList<>();
List<SfcDispatch> updateSfcDispatchList = new ArrayList<>();
//先删除所有新建状态的派工单
// //先删除所有新建状态的派工单
/**
* 1.SfcDispatch list
* 2.
*/
Map paramMap=new HashMap();
paramMap.put("site", CommonMethods.getSite());
paramMap.put("sfc",sfc);
paramMap.put("dispatchStatus",Constants.STATUS_NEW);
List<SfcDispatchDto> sfcDispatchDtoList=new ArrayList<>();
try {
sfcDispatchDtoList=sfcDispatchService.findSfcDispatchList(paramMap);
}catch (Exception e){
throw BusinessException.build("查询新建派工单错误");
}
QueryWrapper<SfcDispatch> queryWrapper = new QueryWrapper<>();
SfcDispatch deleteSfcDispatch = new SfcDispatch();
deleteSfcDispatch.setSite(site);
@ -504,7 +524,9 @@ public class ShopOrderReleaseServiceImpl implements ShopOrderReleaseService {
//SFC+Operation+stepID是否已经存在派工数据
List<SfcDispatch> list = sfcDispatchService.findSfcDispatch(site, sfc, operation, stepId);
List<SfcDispatchDto> dispatchDtoList = sfcDispatchDtoList.stream().filter(s -> routerDTO.getStepId().equals(s.getStepId())&&routerDTO.getOperation().equals(s.getOperation())).collect(Collectors.toList());
if (list == null || list.size() <= 0) {
//工艺路线新增的工序,直接增加派工数据
String dispatchNo = sfc + "-" + stepId;
@ -527,8 +549,13 @@ public class ShopOrderReleaseServiceImpl implements ShopOrderReleaseService {
sfcDispatchModel.setDispatchQty(sfcModel.getQty());
sfcDispatchModel.setProdHours(prodHours);
sfcDispatchModel.setTurnOperation("false");
//sfcDispatchModel.setPlannedStartDate(plannedStartDate);
//sfcDispatchModel.setPlannedCompleteDate(plannedCompleteDate);
if (!dispatchDtoList.isEmpty()){
sfcDispatchModel.setPlannedStartDate(dispatchDtoList.get(0).getPlannedStartDate());
sfcDispatchModel.setPlannedCompDate(dispatchDtoList.get(0).getPlannedCompDate());
sfcDispatchModel.setEmployee(dispatchDtoList.get(0).getEmployee());
sfcDispatchModel.setEmployeeDescription(dispatchDtoList.get(0).getEmployeeDescription());
sfcDispatchModel.setResrce(dispatchDtoList.get(0).getResrce());
}
sfcDispatchModel.setSoReleasedDate(nowDate);
sfcDispatchModel.setIsDispatch(Constants.BOOL_FALSE);
sfcDispatchModel.setIsImport(Constants.BOOL_FALSE);
@ -540,7 +567,9 @@ public class ShopOrderReleaseServiceImpl implements ShopOrderReleaseService {
sfcDispatchModel.setOther1("false");
addSfcDispatchList.add(sfcDispatchModel);
} else {
//已经存在的更新
/**
*
*/
SfcDispatch sfcDispatchModel = list.get(0);
sfcDispatchModel.setDispatchSeq((m + 1)+"");
sfcDispatchModel.setModifyUser(user);

File diff suppressed because it is too large Load Diff

@ -4,6 +4,18 @@ import com.foreverwin.mesnac.meapi.model.Sfc;
public class SfcDto extends Sfc {
private String handle;
@Override
public String getHandle() {
return handle;
}
@Override
public void setHandle(String handle) {
this.handle = handle;
}
private String shopOrder;
private String status;
private String item;

@ -67,7 +67,7 @@
<dependency>
<groupId>com.foreverwin.modular</groupId>
<artifactId>modular-core</artifactId>
<version>1.1.4-SNAPSHOT.standlone-hana</version>
<version>1.0-SNAPSHOT.standlone-hana</version>
</dependency>
<dependency>
@ -97,31 +97,31 @@
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.17.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>1.7.26</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.26</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.apache.logging.log4j</groupId>-->
<!-- <artifactId>log4j-slf4j-impl</artifactId>-->
<!-- <version>2.17.0</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.logging.log4j</groupId>-->
<!-- <artifactId>log4j-api</artifactId>-->
<!-- <version>2.17.0</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.logging.log4j</groupId>-->
<!-- <artifactId>log4j-core</artifactId>-->
<!-- <version>2.17.0</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.slf4j</groupId>-->
<!-- <artifactId>jul-to-slf4j</artifactId>-->
<!-- <version>1.7.26</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.slf4j</groupId>-->
<!-- <artifactId>jcl-over-slf4j</artifactId>-->
<!-- <version>1.7.26</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.apache.activemq</groupId>

@ -71,6 +71,7 @@ public class PodTemplateController {
sfcDtoList = mapper.convertValue(sfcDtoList, new TypeReference<List<SfcDto>>() {
});
String resrce = (String) map.get("resrce");
String shoporder = (String) map.get("shopOrder");
if (sfcDtoList == null || sfcDtoList.size() < 1) {
throw new BaseException("作业列表不能为空");
}
@ -80,7 +81,7 @@ public class PodTemplateController {
ArrayList<String> sfcList = new ArrayList<>();
try {
for (SfcDto sfcDto : sfcDtoList) {
String completeSfc = podTemplateService.sfcComplete(sfcDto, resrce);
String completeSfc = podTemplateService.sfcComplete(sfcDto, resrce,shoporder);
sfcList.add(completeSfc);
}
}catch (Exception e){

@ -16,7 +16,7 @@ public interface PodTemplateService {
void sfcStart(Map<String, Object> map);
String sfcComplete(SfcDto sfcDto, String resrce);
String sfcComplete(SfcDto sfcDto, String resrce,String shoporder);
void sendErp(String sfc, String stepId, BigDecimal qty, BigDecimal scrapQty, BigDecimal workHour);

@ -2,6 +2,7 @@ package com.foreverwin.mesnac.production.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.foreverwin.mesnac.common.constant.Constants;
@ -23,7 +24,9 @@ import com.foreverwin.mesnac.common.util.ERPAPI;
import com.foreverwin.mesnac.common.util.ExceptionUtil;
import com.foreverwin.mesnac.common.util.StringUtil;
import com.foreverwin.mesnac.dispatch.model.SfcDispatch;
import com.foreverwin.mesnac.dispatch.model.UserResource;
import com.foreverwin.mesnac.dispatch.service.SfcDispatchService;
import com.foreverwin.mesnac.dispatch.service.UserResourceService;
import com.foreverwin.mesnac.integration.model.IntegrationLog;
import com.foreverwin.mesnac.integration.service.IntegrationLogService;
import com.foreverwin.mesnac.meapi.dto.BomComponentDto;
@ -44,6 +47,7 @@ import com.foreverwin.modular.core.exception.BaseException;
import com.foreverwin.modular.core.exception.BusinessException;
import com.foreverwin.modular.core.meext.MEServices;
import com.foreverwin.modular.core.util.CommonMethods;
import com.foreverwin.modular.core.util.R;
import com.sap.me.production.AssembleComponentsRequest;
import com.sap.me.production.AssemblyComponent;
import com.sap.me.production.AssemblyDataField;
@ -57,9 +61,12 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;
@Service
@ -107,6 +114,9 @@ public class PodTemplateServiceImpl implements PodTemplateService {
private ResrceMapper resrceMapper;
@Autowired
private SfcDispatchService sfcDispatchService;
@Autowired
private UserResourceService userResourceService;
@Override
@ -165,9 +175,34 @@ public class PodTemplateServiceImpl implements PodTemplateService {
if (resultMap == null) {
throw new BaseException("根据当前资源未找到条码[" + sfc + "]的基本信息!");
}
if(resultMap.get("EMPLOYEE_DESCRIPTION")==null||resultMap.get("EMPLOYEE_DESCRIPTION").equals("")||resultMap.get("EMPLOYEE")==null||resultMap.get("EMPLOYEE").equals("")){
if(resultMap.get("EMPLOYEE_DESCRIPTION")==null||resultMap.get("EMPLOYEE_DESCRIPTION").equals("")){
throw new BaseException("产品条码[" + sfc + "]的操作人员为空!请联系调度人员维护!");
}
/**
*
*/
if(resultMap.get("EMPLOYEE")==null||resultMap.get("EMPLOYEE").equals("")){
//获取操作者
String EMPLOYEE_DESCRIPTION = resultMap.get("EMPLOYEE_DESCRIPTION").toString();
//员工资源对应关系
List<UserResource> userResourceList = userResourceService.findEnableList(site, sfcDto.getResrce(), null);
Map<String, List<UserResource>> usMap = userResourceList.stream().collect(Collectors.groupingBy(UserResource::getUserDescription));
List<UserResource> singleUserResourceList = usMap.get(EMPLOYEE_DESCRIPTION);
if ( CollectionUtils.isNotEmpty(singleUserResourceList)){
//更新派工单的操作员编号
SfcDispatch sfcDispatch = new SfcDispatch();
sfcDispatch.setHandle(resultMap.get("SFC_DISPATCH_DETAIL_BO").toString());
sfcDispatch.setEmployee(singleUserResourceList.get(0).getUserId());
sfcDispatchService.updateById(sfcDispatch);
}
}
//List<Map<String, Object>> substepList = sfcCrossMapper.querySfcStep(site, sfc, operationBySfcBo.getOperation());
List<Map<String, Object>> substepList = new ArrayList<>();
resultMap.put("SFC_STEP_LIST", substepList);
@ -270,7 +305,7 @@ public class PodTemplateServiceImpl implements PodTemplateService {
}
@Override
public String sfcComplete(SfcDto sfcDto, String resrce) {
public String sfcComplete(SfcDto sfcDto, String resrce,String shoporder) {
String site = CommonMethods.getSite();
String operation = sfcDto.getOperation();
Operation currentRevisionRef = operationService.getCurrentRevisionRef(site, operation);
@ -309,6 +344,22 @@ public class PodTemplateServiceImpl implements PodTemplateService {
}
}
}
//相同工序不同SFC相同工单号不能在一分钟之内点完成拆单重复吸收原材料
/**
* 1.
* 2.
*/
SfcDispatch sfcDispatchDto = sfcDispatchService.findsfcComplete(site,sfcDto.getStepId(),shoporder);
if (sfcDispatchDto!=null){
LocalDateTime now = LocalDateTime.now();
Duration duration = Duration.between(sfcDispatchDto.getActualCompleteDate(),now);
long minutes = duration.toMinutes();//相差的分钟数
if (minutes<1){
throw new BaseException("拆单后同一工序不能一分钟内点两次完成!");
}
}
//物料消耗
materialConsumption(site, operation, HandleEnum.SFC.getHandle(site, sfc), stepId, resrce);
//专检创建
@ -498,10 +549,8 @@ public class PodTemplateServiceImpl implements PodTemplateService {
struIn.setIsm06(workHour);
ins[0] = struIn;
TableOfZprodordconfStruInHolder inHolder = new TableOfZprodordconfStruInHolder(ins);
//返回对象
ZprodordconfStruOut[] outs = new ZprodordconfStruOut[1];
ZprodordconfStruOut struOut = new ZprodordconfStruOut();
struOut.setAufnr(ins[0].getAufnr());
struOut.setVornr(ins[0].getVornr());

@ -94,7 +94,7 @@
CASE WHEN ST.STATUS='403' AND SS.QTY_IN_QUEUE > 0 THEN N'402' ELSE ST.STATUS END STATUS,
OP.OPERATION, OT.DESCRIPTION OPERATION_DESC,OP.OPERATION||'/'||RS.STEP_ID OPERATION_STEP,
RO_CF2.VALUE TOOL ,SOD.HANDLE SFC_DISPATCH_DETAIL_BO,SOD.WORK_CENTER,SOD.PROD_HOURS,
S.SFC,S.QTY SFC_QTY,RS.STEP_ID, SOD.DISPATCH_NO,SOD.EMPLOYEE_DESCRIPTION,SOD.EMPLOYEE,
S.SFC,S.QTY SFC_QTY,RS.STEP_ID, SOD.DISPATCH_NO,SOD.EMPLOYEE_DESCRIPTION,SOD.EMPLOYEE,SOD.BLANKING_SIZE,
TO_CHAR( SOD.PLANNED_START_DATE + INTERVAL '8' HOUR,'yyyy-mm-dd hh24:mi:ss')START_DATE,
TO_CHAR(SOD.PLANNED_COMP_DATE + INTERVAL '8' HOUR ,'yyyy-mm-dd hh24:mi:ss')COMP_DATE,
TO_CHAR((SOD.PLANNED_COMP_DATE - SOD.PLANNED_START_DATE )*24,'fm9999999990.00')||'H' ADD_DATE,
@ -117,13 +117,13 @@
INNER JOIN ITEM I ON I.HANDLE = S.ITEM_BO
LEFT JOIN ITEM_T IT ON IT.ITEM_BO = I.HANDLE AND IT.LOCALE =#{locale}
INNER JOIN (
SELECT SD.HANDLE, SD.SFC,SD.RESRCE,SD.OPERATION,SD.STEP_ID,SD.PLANNED_COMP_DATE, SD.PLANNED_START_DATE,SD.DISPATCH_NO,SD.WORK_CENTER,SD.PROD_HOURS,SD.EMPLOYEE_DESCRIPTION,SD.EMPLOYEE
SELECT SD.HANDLE, SD.SFC,SD.RESRCE,SD.OPERATION,SD.STEP_ID,SD.PLANNED_COMP_DATE, SD.PLANNED_START_DATE,SD.DISPATCH_NO,SD.WORK_CENTER,SD.PROD_HOURS,SD.EMPLOYEE_DESCRIPTION,SD.EMPLOYEE,SD.BLANKING_SIZE
FROM Z_PROD_READY_TASK RB
INNER JOIN Z_SFC_DISPATCH SD ON SD.HANDLE = RB.SFC_DISPATCH_BO
WHERE RB.SITE =#{site} AND RB.STATUS = 'FINISH' AND RB."RESULT"='OK'
) SOD ON SOD.RESRCE =#{dto.resrce} AND SOD.SFC= S.SFC AND SOD.OPERATION = OP.OPERATION and SS.STEP_ID=SOD.STEP_ID
WHERE S.SITE = #{site} AND S.SFC = #{dto.sfc} AND ROWNUM=1
GROUP BY SO.SHOP_ORDER, SO_CF.VALUE , I.ITEM, IT.DESCRIPTION ,SOD.WORK_CENTER,SO_CF2.VALUE,SOD.PROD_HOURS,SOD.EMPLOYEE_DESCRIPTION,SOD.EMPLOYEE,
GROUP BY SO.SHOP_ORDER, SO_CF.VALUE , I.ITEM, IT.DESCRIPTION ,SOD.WORK_CENTER,SO_CF2.VALUE,SOD.PROD_HOURS,SOD.EMPLOYEE_DESCRIPTION,SOD.EMPLOYEE,SOD.BLANKING_SIZE,
CASE WHEN ST.STATUS='403' AND SS.QTY_IN_QUEUE > 0 THEN N'402' ELSE ST.STATUS END,
OP.OPERATION, OT.DESCRIPTION ,OP.OPERATION||'/'||RS.STEP_ID ,RO_CF2.VALUE,
S.SFC,S.QTY ,RS.STEP_ID,SOD.DISPATCH_NO , SOD.HANDLE ,

Loading…
Cancel
Save