Commit 07476401 authored by 李驰骋's avatar 李驰骋

工单、物料同步逻辑调整

parent bbd100ce
...@@ -59,6 +59,8 @@ basic.error.data.exist=\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E21\u0E35\u0E2D\u0 ...@@ -59,6 +59,8 @@ basic.error.data.exist=\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E21\u0E35\u0E2D\u0
basic.error.data.not.exist=\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48! basic.error.data.not.exist=\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48!
basic.import.error=\u0E01\u0E32\u0E23\u0E19\u0E4D\u0E32\u0E40\u0E02\u0E49\u0E32\u0E25\u0E49\u0E21\u0E40\u0E2B\u0E25\u0E27:{0} basic.import.error=\u0E01\u0E32\u0E23\u0E19\u0E4D\u0E32\u0E40\u0E02\u0E49\u0E32\u0E25\u0E49\u0E21\u0E40\u0E2B\u0E25\u0E27:{0}
basic.import.error.not.null=\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E19\u0E4D\u0E32\u0E40\u0E02\u0E49\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E44\u0E21\u0E48\u0E27\u0E48\u0E32\u0E07\u0E40\u0E1B\u0E25\u0E48\u0E32 basic.import.error.not.null=\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E19\u0E4D\u0E32\u0E40\u0E02\u0E49\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E44\u0E21\u0E48\u0E27\u0E48\u0E32\u0E07\u0E40\u0E1B\u0E25\u0E48\u0E32
basic.excel.error.not.null.DictionaryFormat=\u0E01\u0E23\u0E38\u0E13\u0E32\u0E1B\u0E23\u0E31\u0E1A\u0E41\u0E15\u0E48\u0E07\u0E04\u0E4D\u0E32\u0E2D\u0E18\u0E34\u0E1A\u0E32\u0E22\u0E1B\u0E23\u0E30\u0E01\u0E2D\u0E1A\u0E02\u0E2D\u0E07\u0E1E\u0E08\u0E19\u0E32\u0E19\u0E38\u0E01\u0E23\u0E21DictionaryFormat
basic.excel.error.not.null.StaticDataMappingFormat=\u0E01\u0E23\u0E38\u0E13\u0E32\u0E1B\u0E23\u0E31\u0E1A\u0E41\u0E15\u0E48\u0E07\u0E01\u0E32\u0E23\u0E41\u0E21\u0E1B\u0E04\u0E4D\u0E32\u0E2D\u0E18\u0E34\u0E1A\u0E32\u0E22\u0E1B\u0E23\u0E30\u0E01\u0E2D\u0E1AStaticDataMappingFormat
basic.error.data.cannot.delete=\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E27\u0E31\u0E2A\u0E14\u0E38\u0E19\u0E35\u0E49\u0E16\u0E39\u0E01\u0E43\u0E0A\u0E49\u0E41\u0E25\u0E49\u0E27\u0E41\u0E25\u0E30\u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E25\u0E1A\u0E44\u0E14\u0E49! basic.error.data.cannot.delete=\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E27\u0E31\u0E2A\u0E14\u0E38\u0E19\u0E35\u0E49\u0E16\u0E39\u0E01\u0E43\u0E0A\u0E49\u0E41\u0E25\u0E49\u0E27\u0E41\u0E25\u0E30\u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E25\u0E1A\u0E44\u0E14\u0E49!
#md.material #md.material
md.material.data.limit.can.not.delete=\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E27\u0E31\u0E2A\u0E14\u0E38\u0E19\u0E35\u0E49\u0E16\u0E39\u0E01\u0E43\u0E0A\u0E49\u0E41\u0E25\u0E49\u0E27\u0E41\u0E25\u0E30\u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E25\u0E1A\u0E44\u0E14\u0E49! md.material.data.limit.can.not.delete=\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E27\u0E31\u0E2A\u0E14\u0E38\u0E19\u0E35\u0E49\u0E16\u0E39\u0E01\u0E43\u0E0A\u0E49\u0E41\u0E25\u0E49\u0E27\u0E41\u0E25\u0E30\u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E25\u0E1A\u0E44\u0E14\u0E49!
...@@ -176,6 +178,7 @@ pro.schedule.error.to.selfmade.quantity.black=\u0E01\u0E32\u0E23\u0E41\u0E1B\u0E ...@@ -176,6 +178,7 @@ pro.schedule.error.to.selfmade.quantity.black=\u0E01\u0E32\u0E23\u0E41\u0E1B\u0E
pro.schedule.error.not.null.starttime=\u0E40\u0E27\u0E25\u0E32\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E44\u0E21\u0E48\u0E27\u0E48\u0E32\u0E07 pro.schedule.error.not.null.starttime=\u0E40\u0E27\u0E25\u0E32\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E44\u0E21\u0E48\u0E27\u0E48\u0E32\u0E07
pro.schedule.error.not.null.duration=\u0E23\u0E30\u0E22\u0E30\u0E40\u0E27\u0E25\u0E32\u0E01\u0E32\u0E23\u0E1C\u0E25\u0E34\u0E15\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E320 pro.schedule.error.not.null.duration=\u0E23\u0E30\u0E22\u0E30\u0E40\u0E27\u0E25\u0E32\u0E01\u0E32\u0E23\u0E1C\u0E25\u0E34\u0E15\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E320
pro.schedule.limit.min.duration=\u0E23\u0E30\u0E22\u0E30\u0E40\u0E27\u0E25\u0E32\u0E01\u0E32\u0E23\u0E1C\u0E25\u0E34\u0E15\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E320 pro.schedule.limit.min.duration=\u0E23\u0E30\u0E22\u0E30\u0E40\u0E27\u0E25\u0E32\u0E01\u0E32\u0E23\u0E1C\u0E25\u0E34\u0E15\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E320
pro.schedule.error.not.null.vendor=\u0E15\u0E31\u0E27\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E20\u0E32\u0E22\u0E19\u0E2D\u0E01\u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E27\u0E48\u0E32\u0E07\u0E44\u0E14\u0E49
pro.schedule.error.cannot.use.standardtime=\u0E44\u0E21\u0E48\u0E23\u0E2D\u0E07\u0E23\u0E31\u0E1A\u0E2B\u0E19\u0E48\u0E27\u0E22\u0E07\u0E32\u0E19\u0E0A\u0E31\u0E48\u0E27\u0E42\u0E21\u0E07{0} pro.schedule.error.cannot.use.standardtime=\u0E44\u0E21\u0E48\u0E23\u0E2D\u0E07\u0E23\u0E31\u0E1A\u0E2B\u0E19\u0E48\u0E27\u0E22\u0E07\u0E32\u0E19\u0E0A\u0E31\u0E48\u0E27\u0E42\u0E21\u0E07{0}
pro.schedule.error.cal.error1=\u0E40\u0E27\u0E25\u0E32\u0E2A\u0E34\u0E49\u0E19\u0E2A\u0E38\u0E14\u0E02\u0E2D\u0E07\u0E1B\u0E0F\u0E34\u0E17\u0E34\u0E19\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32\u0E40\u0E27\u0E25\u0E32\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19 pro.schedule.error.cal.error1=\u0E40\u0E27\u0E25\u0E32\u0E2A\u0E34\u0E49\u0E19\u0E2A\u0E38\u0E14\u0E02\u0E2D\u0E07\u0E1B\u0E0F\u0E34\u0E17\u0E34\u0E19\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32\u0E40\u0E27\u0E25\u0E32\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19
pro.schedule.error.not.exist.solution=\u0E15\u0E32\u0E23\u0E32\u0E07\u0E07\u0E32\u0E19\u0E01\u0E32\u0E23\u0E1C\u0E25\u0E34\u0E15:{0}\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E23\u0E38\u0E48\u0E19\u0E01\u0E32\u0E23\u0E1C\u0E25\u0E34\u0E15 pro.schedule.error.not.exist.solution=\u0E15\u0E32\u0E23\u0E32\u0E07\u0E07\u0E32\u0E19\u0E01\u0E32\u0E23\u0E1C\u0E25\u0E34\u0E15:{0}\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E23\u0E38\u0E48\u0E19\u0E01\u0E32\u0E23\u0E1C\u0E25\u0E34\u0E15
......
...@@ -7,9 +7,11 @@ import com.ximai.mes.md.domain.MdItem; ...@@ -7,9 +7,11 @@ import com.ximai.mes.md.domain.MdItem;
import com.ximai.mes.md.vo.ItemUpdateMesVo; import com.ximai.mes.md.vo.ItemUpdateMesVo;
import com.ximai.mes.md.vo.MdItemVo; import com.ximai.mes.md.vo.MdItemVo;
import com.ximai.mes.md.vo.SapItemVo; import com.ximai.mes.md.vo.SapItemVo;
import com.ximai.mes.remote.dto.MdItemErpDto;
import java.io.InputStream; import java.io.InputStream;
import java.util.List; import java.util.List;
import java.util.Map;
public interface IMdItemService { public interface IMdItemService {
...@@ -113,8 +115,22 @@ public interface IMdItemService { ...@@ -113,8 +115,22 @@ public interface IMdItemService {
void syncErpData(); void syncErpData();
/** /**
* 同步新增ERP数据 * 同步ERP数据
* 查询所有ERP同步标识为未同步数据,同步成功后修改为已同步
* 每次更新1000行,直到所有数据同步完成为止
*/
void syncEditErpData();
/**
* 同步ERP数据
* 查询所有ERP同步标识为未同步数据,同步成功后修改为已同步
* 每次更新1000行,直到所有数据同步完成为止
*/
void syncEditErpData(MdItemErpDto itemErpDto, Map<Long, MdItemType> itemTypeMap);
/**
* 初始同步新增ERP数据
*/ */
void syncAddErpData(); void initSyncAddErpData();
} }
...@@ -100,6 +100,8 @@ public class MdItemServiceImpl implements IMdItemService { ...@@ -100,6 +100,8 @@ public class MdItemServiceImpl implements IMdItemService {
private ErpService erpService; private ErpService erpService;
@Autowired @Autowired
private IMdItemWarehouseService itemWarehouseService; private IMdItemWarehouseService itemWarehouseService;
@Autowired
private IMdItemService mdItemService;
@Override @Override
...@@ -469,13 +471,11 @@ public class MdItemServiceImpl implements IMdItemService { ...@@ -469,13 +471,11 @@ public class MdItemServiceImpl implements IMdItemService {
@Override @Override
public void syncErpData() { public void syncErpData() {
//优先更新修改数据 //优先更新修改数据
this.syncEditErpData(); mdItemService.syncEditErpData();
//新增创建数据
this.syncAddErpData();
} }
@Transactional @Transactional
public void syncAddErpData(){ public void initSyncAddErpData(){
MdItemErpQuery itemErpQuery = new MdItemErpQuery(); MdItemErpQuery itemErpQuery = new MdItemErpQuery();
//获取最晚创建时间 //获取最晚创建时间
Date maxErpCreateTime = mdItemMapper.maxErpCreateTime(); Date maxErpCreateTime = mdItemMapper.maxErpCreateTime();
...@@ -515,35 +515,41 @@ public class MdItemServiceImpl implements IMdItemService { ...@@ -515,35 +515,41 @@ public class MdItemServiceImpl implements IMdItemService {
}); });
//存在数据续断抓取,直到所有数据更新完成 //存在数据续断抓取,直到所有数据更新完成
if(list.size()==1000){ if(list.size()==1000){
this.syncAddErpData(); this.initSyncAddErpData();
} }
} }
@Transactional
public void syncEditErpData(){ public void syncEditErpData(){
MdItemErpQuery itemErpQuery = new MdItemErpQuery(); MdItemErpQuery itemErpQuery = new MdItemErpQuery();
//获取最晚修改时间
Date maxErpUpdateTime = mdItemMapper.maxErpUpdateTime();
if(maxErpUpdateTime==null){
Calendar curr = Calendar.getInstance();
curr.set(Calendar.YEAR, 2000);
maxErpUpdateTime = curr.getTime();
}
ErpPageParams.Sort sort = new ErpPageParams.Sort(){{ ErpPageParams.Sort sort = new ErpPageParams.Sort(){{
List<ErpPageParams.Order> orders = new ArrayList<>(); List<ErpPageParams.Order> orders = new ArrayList<>();
orders.add(new ErpPageParams.Order("modiDate","asc")); orders.add(new ErpPageParams.Order("modiDate","asc"));
this.setOrders(orders); this.setOrders(orders);
}}; }};
itemErpQuery.setSyncMarkNe("Y");
itemErpQuery.setSort(sort); itemErpQuery.setSort(sort);
itemErpQuery.setGtEqModiDate(maxErpUpdateTime);
itemErpQuery.setCurrent(1); itemErpQuery.setCurrent(1);
itemErpQuery.setPageSize(1000);//每次抓取1000行 itemErpQuery.setPageSize(1000);//每次抓取1000行
List<MdItemErpDto> list = erpService.getItemList(itemErpQuery).getData(); List<MdItemErpDto> list = erpService.getItemList(itemErpQuery).getData();
Map<Long, MdItemType> itemTypeMap = iItemTypeService.selectItemTypeList(new MdItemType()).stream().collect(Collectors.toMap(s->s.getItemTypeId(),s->s));
list.forEach(s->{ list.forEach(s->{
mdItemService.syncEditErpData(s, itemTypeMap);
});
//存在数据续断抓取,直到所有数据更新完成
if(list.size()==1000){
this.syncEditErpData();
}
}
@Transactional
@Override
public void syncEditErpData(MdItemErpDto s, Map<Long, MdItemType> itemTypeMap) {
List<MdItem> dbList = mdItemMapper.selectMdItemByCode(s.getItemCode()); List<MdItem> dbList = mdItemMapper.selectMdItemByCode(s.getItemCode());
if(dbList.size()==0) { if(dbList.size()==0) {
if ("Y".equalsIgnoreCase(s.getVerifyStatus())) { if ("Y".equalsIgnoreCase(s.getVerifyStatus())) {
MdItem insertTemp = BeanUtil.toBean(s, MdItem.class); MdItem insertTemp = BeanUtil.toBean(s, MdItem.class);
if(itemTypeMap.containsKey(s.getItemTypeId())){
insertTemp.setItemTypeName(itemTypeMap.get(s.getItemTypeId()).getItemTypeName());
}
this.insertMdItem(insertTemp); this.insertMdItem(insertTemp);
} }
}else{ }else{
...@@ -551,28 +557,48 @@ public class MdItemServiceImpl implements IMdItemService { ...@@ -551,28 +557,48 @@ public class MdItemServiceImpl implements IMdItemService {
if(!"Y".equalsIgnoreCase(s.getVerifyStatus())){ if(!"Y".equalsIgnoreCase(s.getVerifyStatus())){
dbList.get(0).setEnableFlag("N"); dbList.get(0).setEnableFlag("N");
} }
if(itemTypeMap.containsKey(s.getItemTypeId())){
dbList.get(0).setItemTypeName(itemTypeMap.get(s.getItemTypeId()).getItemTypeName());
}
this.updateMdItem(dbList.get(0)); this.updateMdItem(dbList.get(0));
} }
//更新库房明细 //更新库房明细
List<MdItemWarehouseErpDto> detailList = s.getWarehouseList(); List<MdItemWarehouseErpDto> detailList = s.getWarehouseList();
MdItemWarehouse itemWarehouseQuery = new MdItemWarehouse(); MdItemWarehouse itemWarehouseQuery = new MdItemWarehouse();
itemWarehouseQuery.setItemCode(s.getItemCode()); itemWarehouseQuery.setItemCode(s.getItemCode());
List<MdItemWarehouseDto> detailDblist = itemWarehouseService.selectMdItemWarehouseList(itemWarehouseQuery); List<MdItemWarehouseDto> dbDetaillist = itemWarehouseService.selectMdItemWarehouseList(itemWarehouseQuery);
detailList.forEach(s2->{ detailList.forEach(s2->{
java.util.Optional<MdItemWarehouseDto> itemWarehouseDto = detailDblist.stream().filter(temp->temp.getWarehouseCode().equals(s2.getWarehouseCode())).findFirst(); QueryWrapper<MdItem> itemQuery = new QueryWrapper<>();
itemQuery.eq("item_code", s2.getItemCode());
List<MdItem> itemList = mdItemService.selectListByQw(itemQuery);
if(itemList.size()>0){
MdItem dbItem = itemList.get(0);
java.util.Optional<MdItemWarehouseDto> itemWarehouseDto = dbDetaillist.stream().filter(temp->temp.getWarehouseCode().equals(s2.getWarehouseCode())).findFirst();
if(itemWarehouseDto.isPresent()){ if(itemWarehouseDto.isPresent()){
MdItemWarehouseUpdate updateDetail = BeanUtil.toBean(itemWarehouseDto.get(), MdItemWarehouseUpdate.class); MdItemWarehouseUpdate updateDetail = BeanUtil.toBean(itemWarehouseDto.get(), MdItemWarehouseUpdate.class);
BeanUtil.copyProperties(s2, updateDetail); BeanUtil.copyProperties(s2, updateDetail);
updateDetail.setItemId(dbItem.getItemId());
itemWarehouseService.updateMdItemWarehouse(updateDetail); itemWarehouseService.updateMdItemWarehouse(updateDetail);
}else { }else {
MdItemWarehouseCreate insertDetail = BeanUtil.toBeanIgnoreError(s2, MdItemWarehouseCreate.class); MdItemWarehouseCreate insertDetail = BeanUtil.toBeanIgnoreError(s2, MdItemWarehouseCreate.class);
insertDetail.setItemId(dbItem.getItemId());
itemWarehouseService.insertMdItemWarehouse(insertDetail); itemWarehouseService.insertMdItemWarehouse(insertDetail);
} }
}
}); });
//判断删除关联仓库
dbDetaillist.forEach(s2->{
if(detailList.stream().noneMatch(temp->temp.getWarehouseCode().equals(s2.getWarehouseCode()))){
itemWarehouseService.deleteMdItemWarehouseByItemWarehouseId(s2.getItemWarehouseId());
}
}); });
//存在数据续断抓取,直到所有数据更新完成 //回写ERP标识
if(list.size()==1000){ MdItemSyncMarkUpdate syncMarkUpdate = new MdItemSyncMarkUpdate();
this.syncEditErpData(); syncMarkUpdate.setItemCode(s.getItemCode());
ErpResponseResult<Object> rst = erpService.materialSyncMark(syncMarkUpdate);
if(!rst.isSuccess()){
log.error(String.format("回写物料同步状态失败:%s,%s", s.getItemCode(), rst.getErrorMessage()));
throw new ServiceException(rst.getErrorMessage());
} }
} }
} }
package com.ximai.mes.pro.domain.proWorkOrder; package com.ximai.mes.pro.domain.proWorkOrder;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ximai.common.annotation.Excel; import com.ximai.common.annotation.Excel;
import com.ximai.common.core.domain.BaseEntity; import com.ximai.common.core.domain.BaseEntity;
import com.ximai.mes.pro.domain.sap.SAPDtoProWorkOrderBom; import com.ximai.mes.pro.domain.sap.SAPDtoProWorkOrderBom;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date;
/** /**
* 生产工单BOM对象 pro_work_order_bom * 生产工单BOM对象 pro_work_order_bom
...@@ -42,10 +46,10 @@ public class ProWorkOrderBom extends BaseEntity { ...@@ -42,10 +46,10 @@ public class ProWorkOrderBom extends BaseEntity {
@Excel(name = "物料ID") @Excel(name = "物料ID")
private Long itemId; private Long itemId;
/** /**
* 物料ID * 物料编码
*/ */
@Excel(name = "物料编号") @ApiModelProperty("物料编号")
private Long itemCode; private String itemCode;
/** /**
* sap的物料编号 * sap的物料编号
...@@ -133,6 +137,20 @@ public class ProWorkOrderBom extends BaseEntity { ...@@ -133,6 +137,20 @@ public class ProWorkOrderBom extends BaseEntity {
@Excel(name = "是否倒冲") @Excel(name = "是否倒冲")
private String isBackflush; private String isBackflush;
@ApiModelProperty("工序名")
private String opName;
@ApiModelProperty("工单单别")
private String orderSource;
@ApiModelProperty("erp创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date erpCreateTime;
@ApiModelProperty("erp修改时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date erpUpdateTime;
private String itemName; private String itemName;
......
...@@ -2,6 +2,7 @@ package com.ximai.mes.pro.service.proWorkOrder; ...@@ -2,6 +2,7 @@ package com.ximai.mes.pro.service.proWorkOrder;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ximai.mes.constant.WorkorderStatusEnum; import com.ximai.mes.constant.WorkorderStatusEnum;
import com.ximai.mes.md.domain.MdItem;
import com.ximai.mes.pro.domain.ep.EPDtoProWorkOrder; import com.ximai.mes.pro.domain.ep.EPDtoProWorkOrder;
import com.ximai.mes.pro.domain.proWorkOrder.ProWorkorder; import com.ximai.mes.pro.domain.proWorkOrder.ProWorkorder;
import com.ximai.mes.pro.domain.sap.SAPDtoProWorkOrder; import com.ximai.mes.pro.domain.sap.SAPDtoProWorkOrder;
...@@ -9,6 +10,7 @@ import com.ximai.mes.pro.domain.vo.ProWorkOrderProcessToolLoseVo; ...@@ -9,6 +10,7 @@ import com.ximai.mes.pro.domain.vo.ProWorkOrderProcessToolLoseVo;
import com.ximai.mes.pro.domain.vo.ProWorkorderQuery; import com.ximai.mes.pro.domain.vo.ProWorkorderQuery;
import com.ximai.mes.pro.domain.vo.ProWorkorderVo; import com.ximai.mes.pro.domain.vo.ProWorkorderVo;
import com.ximai.mes.pro.domain.vo.proWorkOrder.*; import com.ximai.mes.pro.domain.vo.proWorkOrder.*;
import com.ximai.mes.remote.dto.ProWorkorderErpDto;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
...@@ -187,7 +189,21 @@ public interface IProWorkorderService { ...@@ -187,7 +189,21 @@ public interface IProWorkorderService {
void syncErpData(); void syncErpData();
/** /**
* 同步新增ERP数据 * 首次新增同步ERP数据
*/ */
void syncAddErpData(); void initSyncAddErpData();
/**
* 同步修改ERP数据
* 查询所有ERP同步标识为未同步数据,同步成功后修改为已同步
* 每次更新1000行,直到所有数据同步完成为止
*/
void syncEditErpData();
/**
* 同步修改ERP数据
* 查询所有ERP同步标识为未同步数据,同步成功后修改为已同步
* 每次更新1000行,直到所有数据同步完成为止
*/
void syncEditErpData(ProWorkorderErpDto workorderErpDto, Map<String, MdItem> itemMap);
} }
...@@ -42,4 +42,17 @@ public interface ErpService { ...@@ -42,4 +42,17 @@ public interface ErpService {
@PostMapping(value = "/mocta/getMoctaList") @PostMapping(value = "/mocta/getMoctaList")
ErpResponseResult<List<ProWorkorderErpDto>> getWorkorderList(ProWorkorderErpQuery workorderErpQuery); ErpResponseResult<List<ProWorkorderErpDto>> getWorkorderList(ProWorkorderErpQuery workorderErpQuery);
/**
* 工单更新状态标识
*/
@PostMapping(value = "/mocta/syncMark")
ErpResponseResult<Object> workorderSyncMark(ProWorkorderSyncMarkUpdate syncMarkUpdate);
/**
* 物料更新状态标识
*/
@PostMapping(value = "/invmb/syncMark")
ErpResponseResult<Object> materialSyncMark(MdItemSyncMarkUpdate syncMarkUpdate);
} }
...@@ -25,15 +25,19 @@ public class MdItemErpQuery extends ErpPageParams ...@@ -25,15 +25,19 @@ public class MdItemErpQuery extends ErpPageParams
@ApiModelProperty("品名") @ApiModelProperty("品名")
private String itemName; private String itemName;
@JsonProperty("neUdf08")
@ApiModelProperty("同步标识状态-不等于")
private String syncMarkNe;
@JsonProperty("mb109") @JsonProperty("mb109")
@ApiModelProperty("核准状态") @ApiModelProperty("核准状态")
private String verifyStatus; private String verifyStatus;
@ApiModelProperty("创建日期") @ApiModelProperty("创建日期-大于等于")
@JsonFormat(pattern = "yyyyMMddHHmmssSSS") @JsonFormat(pattern = "yyyyMMddHHmmssSSS")
private Date gtEqCreateDate; private Date gtEqCreateDate;
@ApiModelProperty("修改日期") @ApiModelProperty("修改日期-大于等于")
@JsonFormat(pattern = "yyyyMMddHHmmssSSS") @JsonFormat(pattern = "yyyyMMddHHmmssSSS")
private Date gtEqModiDate; private Date gtEqModiDate;
} }
package com.ximai.mes.remote.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* 物料对象 MdItemErpQuery
*
* @date 2024-10-18
*/
@Data
public class MdItemSyncMarkUpdate
{
@ApiModelProperty("品号")
@JsonProperty("mb001")
private String itemCode;
@ApiModelProperty("MES同步标识")
@JsonProperty("udf08")
private String syncMark="Y";
}
...@@ -2,6 +2,7 @@ package com.ximai.mes.remote.dto; ...@@ -2,6 +2,7 @@ package com.ximai.mes.remote.dto;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.ximai.mes.config.EmptyStringToLongDeserializer;
import com.ximai.mes.config.TrimStringDeserializer; import com.ximai.mes.config.TrimStringDeserializer;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -20,10 +21,12 @@ public class MdItemWarehouseErpDto ...@@ -20,10 +21,12 @@ public class MdItemWarehouseErpDto
@JsonProperty("mc002") @JsonProperty("mc002")
@ApiModelProperty("仓库编号") @ApiModelProperty("仓库编号")
@JsonDeserialize(using = TrimStringDeserializer.class)
private String warehouseCode; private String warehouseCode;
@JsonProperty("mc001") @JsonProperty("mc001")
@ApiModelProperty("物料编号") @ApiModelProperty("物料编号")
@JsonDeserialize(using = TrimStringDeserializer.class)
private String itemCode; private String itemCode;
@JsonProperty("mc004") @JsonProperty("mc004")
...@@ -32,6 +35,7 @@ public class MdItemWarehouseErpDto ...@@ -32,6 +35,7 @@ public class MdItemWarehouseErpDto
@JsonProperty("mc015") @JsonProperty("mc015")
@ApiModelProperty("库位") @ApiModelProperty("库位")
@JsonDeserialize(using = TrimStringDeserializer.class)
private String location; private String location;
} }
...@@ -18,20 +18,20 @@ public class ProWorkorderBomErpDto ...@@ -18,20 +18,20 @@ public class ProWorkorderBomErpDto
{ {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty("材料品号") @ApiModelProperty("工单单别")
@JsonProperty("tb003") @JsonProperty("tb001")
@JsonDeserialize(using = TrimStringDeserializer.class) @JsonDeserialize(using = TrimStringDeserializer.class)
private String itemCode; private String orderSource;
@ApiModelProperty("材料品名") @ApiModelProperty("工单单号")
@JsonProperty("tb012") @JsonProperty("tb002")
@JsonDeserialize(using = TrimStringDeserializer.class) @JsonDeserialize(using = TrimStringDeserializer.class)
private String itemName; private String workorderCode;
@ApiModelProperty("材料规格") @ApiModelProperty("材料品号")
@JsonProperty("tb013") @JsonProperty("tb003")
@JsonDeserialize(using = TrimStringDeserializer.class) @JsonDeserialize(using = TrimStringDeserializer.class)
private String itemSpc; private String itemCode;
@ApiModelProperty("工艺") @ApiModelProperty("工艺")
@JsonProperty("tb006") @JsonProperty("tb006")
......
...@@ -26,7 +26,7 @@ public class ProWorkorderErpDto ...@@ -26,7 +26,7 @@ public class ProWorkorderErpDto
@ApiModelProperty("工单单别") @ApiModelProperty("工单单别")
@JsonProperty("ta001") @JsonProperty("ta001")
@JsonDeserialize(using = TrimStringDeserializer.class) @JsonDeserialize(using = TrimStringDeserializer.class)
private String orderSource; private String workorderType;
@ApiModelProperty("工单单号") @ApiModelProperty("工单单号")
@JsonProperty("ta002") @JsonProperty("ta002")
......
...@@ -22,6 +22,19 @@ public class ProWorkorderErpQuery extends ErpPageParams ...@@ -22,6 +22,19 @@ public class ProWorkorderErpQuery extends ErpPageParams
@ApiModelProperty("审核码") @ApiModelProperty("审核码")
@JsonProperty("ta013") @JsonProperty("ta013")
private String verifyStatus; private String verifyStatus;
@ApiModelProperty("工单单别")
@JsonProperty("ta001")
private String orderSource;
@JsonProperty("neUdf07")
@ApiModelProperty("同步标识状态-不等于")
private String neSyncMark;
@ApiModelProperty("工单单号")
@JsonProperty("ta002")
private String workorderCode;
@JsonFormat(pattern = "yyyyMMddHHmmssSSS") @JsonFormat(pattern = "yyyyMMddHHmmssSSS")
@ApiModelProperty("创建日期") @ApiModelProperty("创建日期")
private Date gtEqCreateDate; private Date gtEqCreateDate;
......
package com.ximai.mes.remote.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* 工单对象 ProWorkorderErpQuery
*
* @date 2024-10-18
*/
@Data
public class ProWorkorderSyncMarkUpdate
{
@ApiModelProperty("工单单别")
@JsonProperty("ta001")
private String workorderType;
@ApiModelProperty("工单单号")
@JsonProperty("ta002")
private String workorderCode;
@ApiModelProperty("同步标识")
@JsonProperty("udf07")
private String syncMark="Y";
}
...@@ -29,6 +29,9 @@ ...@@ -29,6 +29,9 @@
<result property="createBy" column="create_by"/> <result property="createBy" column="create_by"/>
<result property="updateTime" column="update_time"/> <result property="updateTime" column="update_time"/>
<result property="updateBy" column="update_by"/> <result property="updateBy" column="update_by"/>
<result property="opName" column="op_name"/>
<result property="erpCreateTime" column="erp_create_time"/>
<result property="erpUpdateTime" column="erp_update_time"/>
</resultMap> </resultMap>
<sql id="selectProWorkOrderBomVo"> <sql id="selectProWorkOrderBomVo">
...@@ -104,6 +107,10 @@ ...@@ -104,6 +107,10 @@
<if test="createBy != null">create_by,</if> <if test="createBy != null">create_by,</if>
<if test="updateTime != null">update_time,</if> <if test="updateTime != null">update_time,</if>
<if test="updateBy != null">update_by,</if> <if test="updateBy != null">update_by,</if>
<if test="opName != null">op_name,</if>
<if test="orderSource != null">order_source,</if>
<if test="erpCreateTime !=null">erp_create_time,</if>
<if test="erpUpdateTime !=null">erp_update_time,</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="workorderId != null">#{workorderId},</if> <if test="workorderId != null">#{workorderId},</if>
...@@ -129,6 +136,10 @@ ...@@ -129,6 +136,10 @@
<if test="createBy != null">#{createBy},</if> <if test="createBy != null">#{createBy},</if>
<if test="updateTime != null">#{updateTime},</if> <if test="updateTime != null">#{updateTime},</if>
<if test="updateBy != null">#{updateBy},</if> <if test="updateBy != null">#{updateBy},</if>
<if test="opName != null">#{opName},</if>
<if test="orderSource != null">#{orderSource},</if>
<if test="erpCreateTime != null">#{erpCreateTime},</if>
<if test="erpUpdateTime != null">#{erpUpdateTime},</if>
</trim> </trim>
</insert> </insert>
...@@ -157,6 +168,9 @@ ...@@ -157,6 +168,9 @@
<if test="createBy != null">create_by = #{createBy},</if> <if test="createBy != null">create_by = #{createBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if> <if test="updateTime != null">update_time = #{updateTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if> <if test="updateBy != null">update_by = #{updateBy},</if>
<if test="opName != null">op_name = #{opName},</if>
<if test="orderSource != null">order_source = #{orderSource},</if>
<if test="erpUpdateTime != null">erp_update_time = #{erpUpdateTime},</if>
</trim> </trim>
where bom_item_id = #{bomItemId} where bom_item_id = #{bomItemId}
</update> </update>
......
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