库区填报

master
FCD 3 weeks ago
parent e7f3458dcc
commit 17b94eec5a

@ -156,6 +156,9 @@ public interface RemoteSapService {
@PostMapping("/sap/handMadeInStorage")
public R handMadeInStorage(@RequestBody List<SapHandMadeInStorage> list);
@PostMapping("/sap/updateMaterialEntry")
R updateMaterialEntry(@RequestBody List<SapMaterialEntry> list, @RequestParam("optionType") String optionType // 关键指定value
);
}

@ -0,0 +1,71 @@
package com.op.system.api.domain.sap;
/**
* remark
*
* @author 019117
* @date
*/
public class SapMaterialEntry {
private String materialCode;
private String batchCode;
private String factoryCode;
private String areaCode;
private String status;
private String userCode;
public String getMaterialCode() {
return materialCode;
}
public void setMaterialCode(String materialCode) {
this.materialCode = materialCode;
}
public String getBatchCode() {
return batchCode;
}
public void setBatchCode(String batchCode) {
this.batchCode = batchCode;
}
public String getFactoryCode() {
return factoryCode;
}
public void setFactoryCode(String factoryCode) {
this.factoryCode = factoryCode;
}
public String getAreaCode() {
return areaCode;
}
public void setAreaCode(String areaCode) {
this.areaCode = areaCode;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getUserCode() {
return userCode;
}
public void setUserCode(String userCode) {
this.userCode = userCode;
}
}

@ -193,6 +193,11 @@ public class RemoteSapFallbackFactory implements FallbackFactory<RemoteSapServic
return R.fail("手持成品物料收货入库失败" + throwable.getMessage());
}
@Override
public R updateMaterialEntry(List<SapMaterialEntry> list, String optionType) {
return R.fail("更新物料库位失败" + throwable.getMessage());
}
};
}
}

@ -652,4 +652,13 @@ public class SapController extends BaseController {
public R handMadeInStorage(@RequestBody List<SapHandMadeInStorage> list) {
return sapOrderService.handMadeInStorage(list);
}
/**
*
* **/
@PostMapping("/updateMaterialEntry")
@Log(title = "物料库区填报", businessType = BusinessType.SAP)
public R updateMaterialEntry(@RequestBody List<SapMaterialEntry> list, @RequestParam("optionType") String optionType) {
return sapWmsService.updateMaterialEntry(list, optionType);
}
}

@ -1,6 +1,10 @@
package com.op.sap.service;
import com.op.common.core.domain.R;
import com.op.system.api.domain.sap.SapHandMadeInStorage;
import com.op.system.api.domain.sap.SapMaterialEntry;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import java.util.Map;
@ -14,4 +18,6 @@ public interface SapWmsService {
R sapProductOutboundCostCenter(List<Map<String, Object>> mapList);
R sapProductOutboundCostTW(List<Map<String, Object>> mapList);
R updateMaterialEntry(List<SapMaterialEntry> list, String optionType) ;
}

@ -3,17 +3,17 @@ package com.op.sap.service.impl;
import com.op.common.core.domain.R;
import com.op.common.core.utils.StringUtils;
import com.op.sap.service.SapWmsService;
import com.op.system.api.domain.sap.SapHandMadeInStorage;
import com.op.system.api.domain.sap.SapMaterialEntry;
import com.sap.conn.jco.*;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
@Component
@Service
@ -318,4 +318,61 @@ public class SapWmsServicelmpl implements SapWmsService {
return R.fail(e.getMessage());
}
}
@Override
public R updateMaterialEntry(List<SapMaterialEntry> list, String optionType) {
if (CollectionUtils.isEmpty(list)) {
throw new RuntimeException("参数list不存在或长度为0");
}
if (StringUtils.isBlank(optionType)) {
throw new RuntimeException("没有指定读写操作");
}
try {
JCoRepository repository = dest.getRepository();
JCoFunction sapFunction = repository.getFunction("ZMB_MODIFY_ZMMKW");
if ("1".equals(optionType)){
sapFunction.getImportParameterList().setValue("P_WRITE", "X");
}
if ("2".equals(optionType)){
sapFunction.getImportParameterList().setValue("P_DELETE", "X");
}
Date now = new Date();
JCoTable table = sapFunction.getTableParameterList().getTable("IN_ZMMKW");
for (SapMaterialEntry item : list) {
table.appendRow();
//物料编码
table.setValue("MATNR", "0000000" + item.getMaterialCode());
//批次
table.setValue("CHARG", item.getBatchCode());
//工厂
table.setValue("WERKS", item.getFactoryCode());
//区位
table.setValue("ABLAD", item.getAreaCode());
//状态
table.setValue("ZTYPE", item.getStatus());
//修改人
table.setValue("ZNAME", item.getUserCode());
//修改日期
table.setValue("ZMDDAT", now);
}
sapFunction.execute(dest);
String code = sapFunction.getExportParameterList().getString("RETCODE");
String msg = sapFunction.getExportParameterList().getString("RETMSG");
if (!"0".equals(code)) {
throw new Exception("提交物料库区填报失败:"+msg);
}
return R.ok();
}catch (Exception e){
e.printStackTrace();
log.error(e.getMessage());
return R.fail(e.getMessage());
}
}
}

@ -4,6 +4,7 @@ package com.op.wms.controller;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.op.common.core.domain.R;
import com.op.common.core.utils.JwtUtils;
import com.op.common.core.utils.StringUtils;
import com.op.common.core.utils.uuid.IdUtils;
import com.op.common.core.web.domain.AjaxResult;
@ -1004,4 +1005,23 @@ public class WmsToWCSmissionController {
String result = odsProcureOrderService.upbatCardXNew(order);
return success(result);
}
/**
*
* **/
@GetMapping("/wmsStockAreaEntryList")
public AjaxResult getStockAreaEntryList(WmsStockAreaEntry params) {
List<WmsStockAreaEntry> list = odsProcureOrderService.getStockAreaEntryList(params);
return AjaxResult.success(list);
}
/**
*
* **/
@PostMapping("/submitMaterialEntry")
public AjaxResult submitMaterialEntry(@RequestBody List<WmsStockAreaEntry> list) {
odsProcureOrderService.submitMaterialEntry(list);
return AjaxResult.success();
}
}

@ -0,0 +1,159 @@
package com.op.wms.domain;
import com.op.common.core.web.domain.BaseEntity;
/**
* remark
*
* @author 019117
* @date
*/
public class WmsStockAreaEntry extends BaseEntity {
private Long id;
/**
*
* **/
private String productionDate;
/**
*
* **/
private String workOrderCode;
/**
*
* **/
private String status;
/**
*
* **/
private String materialCode;
/**
*
* **/
private String materialName;
/**
*
* **/
private String batchCode;
/**
*
* **/
private String factoryCode;
/**
*
* **/
private String location;
/**
*
* **/
private String areaCode;
/**
* -
* **/
private String beginDate;
/**
* -
* **/
private String endDate;
public String getProductionDate() {
return productionDate;
}
public void setProductionDate(String productionDate) {
this.productionDate = productionDate;
}
public String getWorkOrderCode() {
return workOrderCode;
}
public void setWorkOrderCode(String workOrderCode) {
this.workOrderCode = workOrderCode;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getMaterialCode() {
return materialCode;
}
public void setMaterialCode(String materialCode) {
this.materialCode = materialCode;
}
public String getMaterialName() {
return materialName;
}
public void setMaterialName(String materialName) {
this.materialName = materialName;
}
public String getBatchCode() {
return batchCode;
}
public void setBatchCode(String batchCode) {
this.batchCode = batchCode;
}
public String getFactoryCode() {
return factoryCode;
}
public void setFactoryCode(String factoryCode) {
this.factoryCode = factoryCode;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public String getAreaCode() {
return areaCode;
}
public void setAreaCode(String areaCode) {
this.areaCode = areaCode;
}
public String getBeginDate() {
return beginDate;
}
public void setBeginDate(String beginDate) {
this.beginDate = beginDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
}

@ -3,10 +3,7 @@ package com.op.wms.mapper;
import java.util.List;
import com.op.system.api.domain.sap.SapMaterialPosting;
import com.op.wms.domain.OdsProcureOrder;
import com.op.wms.domain.OdsProcureOutOrder;
import com.op.wms.domain.WmsOdsEmStorageNews;
import com.op.wms.domain.WmsOdsMateStorageNews;
import com.op.wms.domain.*;
import org.apache.ibatis.annotations.Param;
/**
@ -185,4 +182,10 @@ public interface OdsProcureOutOrderMapper {
int removeReturn(String[] IDs);
List<OdsProcureOutOrder> selectWmsOdsProcureReturnOrderByProduceCode(String order);
List<WmsStockAreaEntry> getStockAreaEntryList(WmsStockAreaEntry params);
List<WmsStockAreaEntry> batchCheckDuplication(List<WmsStockAreaEntry> list );
void batchInsertMaterialEntry(List<WmsStockAreaEntry> list);
}

@ -164,4 +164,8 @@ public interface IOdsProcureOrderService {
List<OdsProcureOrder> selectOrderCardTLTWO(OdsProcureOrder odsProcureOrder);
void batchSapTl(List<String> orderList);
List<WmsStockAreaEntry> getStockAreaEntryList(WmsStockAreaEntry params);
void submitMaterialEntry(List<WmsStockAreaEntry> list);
}

@ -26,6 +26,7 @@ import com.op.system.api.RemoteQualityService;
import com.op.system.api.RemoteSapService;
import com.op.system.api.domain.quality.QcCheckTaskIncomeDTO;
import com.op.system.api.domain.sap.SapBackflushMPQuery;
import com.op.system.api.domain.sap.SapMaterialEntry;
import com.op.system.api.domain.sap.SapMaterialPosting;
import com.op.system.api.domain.sap.SapPurchaseOrderQuery;
import okhttp3.OkHttpClient;
@ -36,6 +37,7 @@ import okhttp3.Response;
import java.io.IOException;
import java.util.stream.Collectors;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
@ -4063,4 +4065,44 @@ public class OdsProcureOrderServiceImpl implements IOdsProcureOrderService {
OutboundPostingzcSAPTH(orderList1);
}
}
@Override
@DS("#header.poolName")
public List<WmsStockAreaEntry> getStockAreaEntryList(WmsStockAreaEntry params) {
return odsProcureOutOrderMapper.getStockAreaEntryList(params);
}
@Override
@DS("#header.poolName")
public void submitMaterialEntry(List<WmsStockAreaEntry> list) {
List<SapMaterialEntry> sapList = new ArrayList<>();
List<WmsStockAreaEntry> duplicationList = odsProcureOutOrderMapper.batchCheckDuplication(list);
if (!duplicationList.isEmpty()){
List<String> materialCodeList = duplicationList.stream().map(WmsStockAreaEntry::getMaterialCode).collect(Collectors.toList());
throw new RuntimeException("物料:"+materialCodeList+"存在重复数据");
}
for (WmsStockAreaEntry item : list){
SapMaterialEntry entry = new SapMaterialEntry();
entry.setMaterialCode(item.getMaterialCode());
entry.setBatchCode(item.getBatchCode());
entry.setFactoryCode(item.getFactoryCode());
entry.setAreaCode(item.getAreaCode());
entry.setStatus(item.getStatus());
entry.setUserCode(item.getCreateBy());
sapList.add(entry);
}
//提交记录
odsProcureOutOrderMapper.batchInsertMaterialEntry(list);
//提交到sap
remoteSapService.updateMaterialEntry(sapList,"1");
}
}

@ -2141,4 +2141,66 @@
and wms_ods_procure_return_order.User_Defined10!='2'
and Order_Status='3'
</select>
<select id="getStockAreaEntryList" resultType="com.op.wms.domain.WmsStockAreaEntry" parameterType="com.op.wms.domain.WmsStockAreaEntry">
SELECT
CONVERT(VARCHAR, pow.product_date, 23) productionDate,
SUBSTRING(pow.workorder_code_sap, 4, 10) workOrderCode,
SUBSTRING(pow.product_code, 8,11) materialCode,
pow.product_name materialName,
CASE
WHEN LEN(powb.batch_code) = 24 THEN SUBSTRING(powb.batch_code, 13, 10)
WHEN LEN(powb.batch_code) <![CDATA[ < ]]> 24 THEN powb.batch_code
WHEN LEN(powb.batch_code) > 24 THEN CONVERT(VARCHAR(8), pow.create_time, 112)
ELSE ''
END batchCode
FROM pro_order_workorder pow
LEFT JOIN pro_order_workorder_batch powb ON pow.workorder_id = powb.workorder_id
WHERE powb.del_flag = '0' AND pow.product_code like '00000001%' and pow.parent_order = '0'
<if test="beginDate != null ">and CONVERT(varchar(10),pow.product_date, 120) >= '${beginDate}'</if>
<if test="endDate != null ">and '${endDate}' >= CONVERT(varchar(10),pow.product_date, 120)</if>
<if test="workOrderCode != null and workOrderCode != ''">and pow.workorder_code like concat('%', #{workOrderCode}, '%')</if>
<if test="status != null and status != ''">and pow.status = #{status}</if>
<if test="materialCode != null and materialCode != ''">and pow.product_code like concat('%', #{materialCode},'%')</if>
ORDER BY pow.workorder_code_sap, powb.batch_code
</select>
<select id="batchCheckDuplication" resultType="com.op.wms.domain.WmsStockAreaEntry" parameterType="list">
SELECT material_code materialCode, batch_code batchCode, factory_code factoryCode, area_code areaCode
FROM wms_material_entry
WHERE CONCAT(material_code, batch_code, factory_code, area_code) IN
<foreach collection="list" item="item" open="(" separator="," close=")">
CONCAT(#{item.materialCode}, #{item.batchCode}, #{item.factoryCode}, #{item.areaCode})
</foreach>
</select>
<insert id="batchInsertMaterialEntry" parameterType="list">
INSERT INTO wms_material_entry (
work_order_code,
material_code,
batch_code,
factory_code,
location,
area_code,
status,
create_time,
create_by
)
VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.workOrderCode},
#{item.materialCode},
#{item.batchCode},
#{item.factoryCode},
#{item.location},
#{item.areaCode},
#{item.status},
GETDATE(),
#{item.createBy}
)
</foreach>
</insert>
</mapper>

Loading…
Cancel
Save