|
|
|
@ -306,26 +306,29 @@ public class IWCInterfaceServiceImpl implements IWCSInterfaceService {
|
|
|
|
|
* 关闭母工单,关闭子工单
|
|
|
|
|
* * 一层----------------------------------------
|
|
|
|
|
* * 工单进行报工的时候公式调整如下(数值单位不用管):
|
|
|
|
|
* * 机器=开机时长
|
|
|
|
|
* * 人工 = 用人数*机器(开机时长)
|
|
|
|
|
* * 产量=sum(每批次半成品的产量)【单位pc】
|
|
|
|
|
* * 机器=sum(工时数) 【设备开机时间】
|
|
|
|
|
* * 人工 = sum(每批的工时数*每批用人数)
|
|
|
|
|
* * 折旧 = 机器
|
|
|
|
|
* * 其它 = 人工
|
|
|
|
|
* * 二层----------------------------------------
|
|
|
|
|
* * 子单进行报工的时候公式调整如下(数值单位不用管):
|
|
|
|
|
* * 机器=sum(工时数)
|
|
|
|
|
* * 人工 = 用人数*机器
|
|
|
|
|
* * 产量=sum(每批次半成品的产量)【单位pc】
|
|
|
|
|
* * 机器=sum(工时数)【设备开机时间】
|
|
|
|
|
* * 人工 = sum(人数*开机时间)【人数为每批次的产线人数,开机时间为每批次工时】
|
|
|
|
|
* * 折旧 = 机器
|
|
|
|
|
* * 其它 = 人工
|
|
|
|
|
* * <p>
|
|
|
|
|
* * 母单进行报工的时候公式调整如下:
|
|
|
|
|
* * 机器=sum(工时数)
|
|
|
|
|
* * 人工 = 4*sum(工时数)
|
|
|
|
|
* * 产量=sum(每批次半成品的产量)【单位pc】
|
|
|
|
|
* * 机器=sum(工时数)【设备开机时间】
|
|
|
|
|
* * 人工 = 4*sum(开机时间) 【人数固定为4人,可修改】
|
|
|
|
|
* * 折旧 = 机器
|
|
|
|
|
* * 其它 = 人工
|
|
|
|
|
* * 三层及其以上----------------------------------------
|
|
|
|
|
* * 工单进行报工的时候公式调整如下(数值单位不用管),根据上位机用户真实填的来:
|
|
|
|
|
* * 机器=开机时长
|
|
|
|
|
* * 人工 = 人工
|
|
|
|
|
* * 机器=sum(工时数)【设备开机时间】
|
|
|
|
|
* * 人工 = sum(人数*开机时间)
|
|
|
|
|
* * 折旧 = 机器
|
|
|
|
|
* * 其它 = 人工
|
|
|
|
|
* @param mesReportWork
|
|
|
|
@ -343,19 +346,28 @@ public class IWCInterfaceServiceImpl implements IWCSInterfaceService {
|
|
|
|
|
if (CollectionUtils.isEmpty(workOrders)) {
|
|
|
|
|
return R.fail("子母工单信息缺失");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**修改sap物料损耗组成**/
|
|
|
|
|
R updateBomsSap = this.updateAttr1BomsSap(workOrders);
|
|
|
|
|
if(updateBomsSap.getCode()== 500){
|
|
|
|
|
return updateBomsSap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
R sapRson = null;
|
|
|
|
|
if(workOrders.size()==1){
|
|
|
|
|
/**(一层报工)工单报工**/
|
|
|
|
|
mesReportWork.setUploadStatus("1");//除了1报工成功的,都需要报工
|
|
|
|
|
mesReportWork.setProdType("prod");
|
|
|
|
|
mesReportWork.setWorkorderCode(workOrders.get(0).getWorkorderCode());
|
|
|
|
|
MesReportWork sHzWorks = mesReportWorkMapper.getReportWorkHz1(mesReportWork);
|
|
|
|
|
MesReportWork sHzWorks = mesReportWorkMapper.getReportWorkHz(mesReportWork);
|
|
|
|
|
if(sHzWorks==null){
|
|
|
|
|
return R.fail("未查询到一层报工单");
|
|
|
|
|
}
|
|
|
|
|
//机器=sum(工时数) 【设备开机时间】 Sac1
|
|
|
|
|
//人工 = sum(每批的工时数*每批用人数) Sac2
|
|
|
|
|
//子工单报工
|
|
|
|
|
logger.info("==========================一层工单报工开始");
|
|
|
|
|
sapRson = this.reportHzToSap(sHzWorks,1);
|
|
|
|
|
sapRson = this.reportHzToSap(sHzWorks);
|
|
|
|
|
logger.info("==========================一层工单报工结束:"+JSONObject.toJSONString(sapRson));
|
|
|
|
|
}else if(workOrders.size()==2){
|
|
|
|
|
/**(两层报工)子工单先报工,然后母工单报工**/
|
|
|
|
@ -368,7 +380,7 @@ public class IWCInterfaceServiceImpl implements IWCSInterfaceService {
|
|
|
|
|
}
|
|
|
|
|
//子工单报工
|
|
|
|
|
logger.info("==========================子工单报工开始");
|
|
|
|
|
sapRson = this.reportHzToSap(sHzWorks,2);
|
|
|
|
|
sapRson = this.reportHzToSap(sHzWorks);
|
|
|
|
|
logger.info("==========================子工单报工结束:"+JSONObject.toJSONString(sapRson));
|
|
|
|
|
if(sapRson.getCode()== 200){
|
|
|
|
|
//一定是子单报工成功返回后,再母单报工
|
|
|
|
@ -385,25 +397,32 @@ public class IWCInterfaceServiceImpl implements IWCSInterfaceService {
|
|
|
|
|
//母工单报工
|
|
|
|
|
logger.info("==========================母工单报工开始");
|
|
|
|
|
pHzWork.setQuantityFeedback(sHzWorks.getQuantityFeedback());
|
|
|
|
|
pHzWork.setSac2("4");//母单报工固定值
|
|
|
|
|
R sapR = this.reportHzToSap(pHzWork,2);
|
|
|
|
|
//pHzWork.setSac2("4");//母单报工固定值(上位机插入数据时候默认4)
|
|
|
|
|
R sapR = this.reportHzToSap(pHzWork);
|
|
|
|
|
logger.info("==========================母工单报工结束"+JSONObject.toJSONString(sapR));
|
|
|
|
|
return sapR;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}else if(workOrders.size()>=3){
|
|
|
|
|
for(MesReportWork workOrder:workOrders){
|
|
|
|
|
MesReportWork hzWorks = null;
|
|
|
|
|
for(int n=0;n<workOrders.size();n++){
|
|
|
|
|
MesReportWork workOrder = workOrders.get(n);
|
|
|
|
|
|
|
|
|
|
mesReportWork.setUploadStatus("1");//除了1报工成功的,都需要报工
|
|
|
|
|
mesReportWork.setProdType("prod");
|
|
|
|
|
mesReportWork.setWorkorderCode(workOrder.getWorkorderCode());
|
|
|
|
|
MesReportWork sHzWorks = mesReportWorkMapper.getReportWorkHz1(mesReportWork);
|
|
|
|
|
MesReportWork sHzWorks = mesReportWorkMapper.getReportWorkHz(mesReportWork);
|
|
|
|
|
if (sHzWorks == null) {
|
|
|
|
|
return R.fail(workOrder.getWorkorderCode()+"未查询到报工单");
|
|
|
|
|
}
|
|
|
|
|
if(n==0){
|
|
|
|
|
hzWorks = sHzWorks;
|
|
|
|
|
}
|
|
|
|
|
//三层以上工单报工
|
|
|
|
|
logger.info("==========================三层以上工单("+sHzWorks.getWorkorderCodeSap()+")报工开始");
|
|
|
|
|
sapRson = this.reportHzToSap(sHzWorks,3);
|
|
|
|
|
logger.info("==========================三层以上工单("+sHzWorks.getWorkorderCodeSap()+")报工结束:"
|
|
|
|
|
logger.info("==========================三层(第"+n+"层)以上工单("+sHzWorks.getWorkorderCodeSap()+")报工开始");
|
|
|
|
|
sHzWorks.setQuantityFeedback(hzWorks.getQuantityFeedback());
|
|
|
|
|
sapRson = this.reportHzToSap(sHzWorks);
|
|
|
|
|
logger.info("==========================三层(第"+n+"层)以上工单("+sHzWorks.getWorkorderCodeSap()+")报工结束:"
|
|
|
|
|
+ JSONObject.toJSONString(sapRson));
|
|
|
|
|
if (sapRson.getCode() == 200) {
|
|
|
|
|
try {
|
|
|
|
@ -421,31 +440,48 @@ public class IWCInterfaceServiceImpl implements IWCSInterfaceService {
|
|
|
|
|
}
|
|
|
|
|
return sapRson;
|
|
|
|
|
}
|
|
|
|
|
//修改报工物料组成
|
|
|
|
|
private R updateAttr1BomsSap(List<MesReportWork> workOrderCodes) {
|
|
|
|
|
//是否有变动的物料损耗组成
|
|
|
|
|
List<MesReportWorkConsume> updateBoms = mesReportWorkMapper.getUpdateAttr1Boms(workOrderCodes.get(workOrderCodes.size()-1));
|
|
|
|
|
if(!CollectionUtils.isEmpty(updateBoms)){
|
|
|
|
|
List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
|
|
Map<String, Object> mapBom = null;
|
|
|
|
|
for(MesReportWorkConsume updateBom:updateBoms){
|
|
|
|
|
mapBom = new HashMap<String, Object>();
|
|
|
|
|
mapBom.put("P_AUFNR",updateBom.getWorkorderCodeSap());// 订单号 例如:000100308287
|
|
|
|
|
mapBom.put("P_MATNR",updateBom.getMaterialCode());// 物料号 例如:000000040000015089
|
|
|
|
|
mapBom.put("P_GMEIN",updateBom.getUnit());// 基本计量单位 例如:m
|
|
|
|
|
mapBom.put("P_WERKS",workOrderCodes.get(0).getFactoryCode());//物料工厂 例如:1000
|
|
|
|
|
mapBom.put("P_LGORT",updateBom.getWarehouseCode());//仓库编号 例如:0013
|
|
|
|
|
mapList.add(mapBom);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
logger.info(workOrderCodes.get(workOrderCodes.size()-1).getWorkorderCode()
|
|
|
|
|
+ "报工损耗物料组件修改请求:" + JSONObject.toJSONString(mapList));
|
|
|
|
|
R bomUpdateR = remoteSapService.shopOrderBomUpdate(mapList);
|
|
|
|
|
logger.info(workOrderCodes.get(workOrderCodes.size()-1).getWorkorderCode()
|
|
|
|
|
+ "报工损耗物料组件修改结果:" + JSONObject.toJSONString(bomUpdateR));
|
|
|
|
|
return bomUpdateR;
|
|
|
|
|
}
|
|
|
|
|
return R.ok();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
* @param workOrder
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private R reportHzToSap(MesReportWork workOrder,int cengji) {
|
|
|
|
|
private R reportHzToSap(MesReportWork workOrder) {
|
|
|
|
|
Date nowTime = DateUtils.getNowDate();
|
|
|
|
|
SapRFW sapRFW = new SapRFW();
|
|
|
|
|
sapRFW.setAufnr(workOrder.getWorkorderCodeSap());//虚拟工单号
|
|
|
|
|
sapRFW.setGamng(workOrder.getQuantityFeedback().toString());//报工数量
|
|
|
|
|
SapRFW.lt_gs ltgs = new SapRFW.lt_gs();//生产订单报工工时修改
|
|
|
|
|
ltgs.setConf_activity1(workOrder.getSac1());//机器
|
|
|
|
|
BigDecimal newMan = null;
|
|
|
|
|
if(cengji == 3){
|
|
|
|
|
//订单是三层的情况
|
|
|
|
|
newMan = new BigDecimal(workOrder.getSac2());
|
|
|
|
|
}else{
|
|
|
|
|
//订单是一层、二层的情况
|
|
|
|
|
newMan = new BigDecimal(workOrder.getSac1())
|
|
|
|
|
.multiply(new BigDecimal(workOrder.getSac2()));
|
|
|
|
|
}
|
|
|
|
|
ltgs.setConf_activity2(newMan.toString());//人工
|
|
|
|
|
ltgs.setConf_activity2(workOrder.getSac2());//人工
|
|
|
|
|
ltgs.setConf_activity3(workOrder.getSac1());//折旧
|
|
|
|
|
ltgs.setConf_activity4(newMan.toString());//其它
|
|
|
|
|
ltgs.setConf_activity4(workOrder.getSac2());//其它
|
|
|
|
|
// ltgs.setConf_activity5(workOrder.getSac5());
|
|
|
|
|
// ltgs.setConf_activity6(workOrder.getSac6());
|
|
|
|
|
sapRFW.setLt_gs(ltgs);
|
|
|
|
@ -481,6 +517,7 @@ public class IWCInterfaceServiceImpl implements IWCSInterfaceService {
|
|
|
|
|
mesReportWorkMapper.updateSyncSapStatus(workOrder);
|
|
|
|
|
|
|
|
|
|
return r;
|
|
|
|
|
// return R.ok();//测试
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|