2025-05-20 14:54:52 +08:00
package com.cim.idm.controller ;
import com.alibaba.fastjson.JSONObject ;
import com.alibaba.fastjson.TypeReference ;
import com.cim.idm.framework.IDMFrameServiceProxy ;
import com.cim.idm.framework.data.EventInfo ;
import com.cim.idm.framework.util.time.TimeStampUtil ;
import com.cim.idm.model.BaseEntity ;
import com.cim.idm.model.ErpMessageLog ;
import com.cim.idm.model.MaterialPacking ;
import com.cim.idm.model.PalletDto ;
import com.cim.idm.utils.AjaxResult ;
import com.cim.idm.utils.CommonUtils ;
import com.cim.idm.wmsextend.generic.errorHandler.CustomException ;
import com.cim.idm.wmsextend.generic.util.ConvertUtil ;
import com.cim.idm.wmspackage.materialpacking.MaterialPackingServiceProxy ;
import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPackingKey ;
import com.cim.idm.wmspackage.materialpacking.management.info.CreateInfo ;
import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration ;
import org.springframework.transaction.annotation.Transactional ;
import org.springframework.web.bind.annotation.RequestBody ;
import org.springframework.web.bind.annotation.RequestMapping ;
import org.springframework.web.bind.annotation.RequestMethod ;
import org.springframework.web.bind.annotation.RestController ;
import java.math.BigDecimal ;
import java.text.SimpleDateFormat ;
import java.util.* ;
@RestController
@RequestMapping ( " /api/wms " )
@EnableAutoConfiguration
public class PalletStockInAndOutController {
@Autowired
private com . cim . idm . service . Impl . ProductIntoServiceImpl ProductIntoServiceImpl ;
@Autowired
private com . cim . idm . service . Impl . InvoiceServiceImpl InvoiceServiceImpl ;
CommonUtils untils = new CommonUtils ( ) ;
private static final Logger log = LoggerFactory . getLogger ( PalletStockInAndOutController . class ) ;
@RequestMapping ( value = " /syncMesData " , method = RequestMethod . POST )
public AjaxResult syncMesData ( @RequestBody JSONObject in ) {
log . debug ( " *********************************** " ) ;
log . debug ( " *********************************** " ) ;
log . debug ( in . toString ( ) ) ;
log . debug ( " *********************************** " ) ;
log . debug ( " *********************************** " ) ;
AjaxResult result = new AjaxResult ( ) ;
ErpMessageLog loginfo = new ErpMessageLog ( ) ;
loginfo . setServerName ( " MesToWms " ) ;
loginfo . setMessageId ( " " ) ;
loginfo . setEventUser ( in . getString ( " user " ) ) ;
loginfo . setId ( UUID . randomUUID ( ) . toString ( ) ) ;
loginfo . setInterfaceTime ( ConvertUtil . getCurrTime ( " yyy-MM-dd HH:mm:ss " ) ) ;
loginfo . setSendMsg ( in . toJSONString ( ) ) ;
try {
String messagetype = in . get ( " messagetype " ) . toString ( ) ;
loginfo . setEventName ( String . format ( " %s " , messagetype ) ) ;
switch ( messagetype ) {
case " STOCKINPALLET " : // 托盘入库
BaseEntity < PalletDto > PalletInDto = JSONObject . parseObject ( in . toJSONString ( ) ,
new TypeReference < BaseEntity < PalletDto > > ( ) {
} ) ;
stockInPallet ( PalletInDto ) ;
break ;
case " STOCKOUTPALLET " : // 托盘出库
BaseEntity < PalletDto > PalletOutDto = JSONObject . parseObject ( in . toJSONString ( ) ,
new TypeReference < BaseEntity < PalletDto > > ( ) {
} ) ;
stockOutPallet ( PalletOutDto ) ;
break ;
default :
break ;
}
result = AjaxResult . me ( ) . setSuccess ( true ) . setMessage ( " 执行成功 " ) ;
loginfo . setResultCode ( " success " ) ;
loginfo . setReturnMsg ( JSONObject . toJSONString ( result ) ) ;
// 消息保存日志, Mes推送wms的数据写入表BS_ERPMESSAGELOG中
saveMessageLog ( loginfo ) ;
return result ;
} catch ( Exception e ) {
result = AjaxResult . me ( ) . setSuccess ( false ) . setErrorCode ( 500 ) . setMessage ( e . getMessage ( ) ) ;
loginfo . setResultCode ( " fail " ) ;
loginfo . setReturnMsg ( JSONObject . toJSONString ( result ) ) ;
saveMessageLog ( loginfo ) ;
return result ;
}
}
/ * *
* 托盘入库
* @param PalletDto
* @throws Exception
* /
private void stockInPallet ( BaseEntity < PalletDto > PalletDto ) throws Exception {
try {
// String commitDate = PalletDto.getTime();
SimpleDateFormat outputFormat = new SimpleDateFormat ( " yyyy-MM-dd " ) ;
SimpleDateFormat inputFormat = new SimpleDateFormat ( " yyyy-MM-dd HH:mm " ) ;
Date datea = null ;
datea = inputFormat . parse ( PalletDto . getTime ( ) ) ;
String commitDate = outputFormat . format ( datea ) ;
for ( PalletDto palletDto : PalletDto . getBody ( ) ) {
String palletname = palletDto . getPALLETNAME ( ) ; //栈板
String materialspecname = palletDto . getMATERIALSPECNAME ( ) ; //料号
String erpfactory = palletDto . getERPFACTORY ( ) ; //组织
String erplocation = palletDto . getERPLOCATION ( ) ; //仓库
String locationname = palletDto . getLOCATIONNAME ( ) ; //货位
String oqaresult = palletDto . getOQARESULT ( ) ; //质检结果
String indate = palletDto . getINDATE ( ) ; //入库日期
String phase = palletDto . getPHASE ( ) ; //阶段
String planorder = palletDto . getPLANORDER ( ) ; //投放计划
String productorder = palletDto . getPRODUCTORDER ( ) ; //生产订单
String receiverequestname = palletDto . getRECEIVEREQUESTNAME ( ) ; //完工报告
String remark = palletDto . getREMARK ( ) ; //备注
String sdk_ID = palletDto . getSDK_ID ( ) ; //SDK规格
String shiprequestdetailname = palletDto . getSHIPREQUESTDETAILNAME ( ) ; //发货单行号
String shiprequestname = palletDto . getSHIPREQUESTNAME ( ) ; //发货单
// String user = palletDto.getUSER();//作业人
// String opCode = palletDto.getOpCode();
String ReceiveRequestActNo = null ;
List < MaterialPacking > detail = palletDto . getDetail ( ) ;
String opCode = palletDto . getOpCode ( ) = = null ? " " : palletDto . getOpCode ( ) . toString ( ) ;
String user = palletDto . getUSER ( ) = = null ? " " : palletDto . getUSER ( ) . toString ( ) ;
if ( " " . equals ( opCode ) | | opCode = = null ) {
String sql = " SELECT :USER || '-' || NCDATA_IDX.NEXTVAL ID FROM DUAL " ;
Map < String , Object > hashMap = new HashMap < String , Object > ( ) ;
hashMap . put ( " USER " , user ) ;
List < Map < String , Object > > queryForList = IDMFrameServiceProxy . getSqlTemplate ( ) . queryForList ( sql , hashMap ) ;
opCode = queryForList . get ( 0 ) . get ( " ID " ) . toString ( ) ;
}
List < com . cim . idm . wmspackage . materialpacking . management . data . MaterialPacking > mpkeyList = new ArrayList < com . cim . idm . wmspackage . materialpacking . management . data . MaterialPacking > ( ) ;
for ( MaterialPacking materialPacking : detail ) {
untils . IsAtMaterialPacking ( materialPacking . getMaterialPackingName ( ) , erpfactory , erplocation , locationname , materialspecname ) ;
com . cim . idm . wmspackage . materialpacking . management . data . MaterialPacking materialPacking2 = new com . cim . idm . wmspackage . materialpacking . management . data . MaterialPacking ( ) ;
materialPacking2 . setKey ( new MaterialPackingKey ( " SDK " , materialPacking . getMaterialPackingName ( ) ) ) ;
materialPacking2 . setErpFactory ( erpfactory ) ;
materialPacking2 . setErpLocation ( erplocation ) ;
materialPacking2 . setLocationName ( locationname ) ;
// materialPacking2.setMaterialSpecName(materialspecname);
materialPacking2 . setMaterialPackingName ( materialPacking . getMaterialPackingName ( ) ) ;
mpkeyList . add ( materialPacking2 ) ;
}
//List<com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking> selectByKey = MaterialPackingServiceProxy.getMaterialPackingService().selectByKey(mpkeyList);
// List<com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking> detail = palletDto.getDetail();
2025-05-21 13:33:02 +08:00
// ProductIntoServiceImpl.fgStockInNew(mpkeyList, user, ReceiveRequestActNo, commitDate, opCode);
ProductIntoServiceImpl . fgStockInByManul ( mpkeyList , user , ReceiveRequestActNo , commitDate , opCode ) ;
2025-05-20 14:54:52 +08:00
// java.util.Calendar c = java.util.Calendar.getInstance();
// java.text.SimpleDateFormat f = new java.text.SimpleDateFormat(
// "yyyyMMdd");
//
// List<String> args = new ArrayList<String>();
// String actType1 = "F";
// String siteName = "SH";
// args.add(siteName);
// args.add(actType1);
// args.add(f.format(c.getTime()));
// String ReceiveRequestActNo;
//
// ReceiveRequestActNo = NameServiceProxy.getNameRuleDefService()
// .generateName("ReceiveActNo", args, 1).get(0);
//
// String pc = "(";
// for (MaterialPacking materialPacking : detail) {
//// "MATERIALPACKINGNAME": "箱标签",
//// "CHARGE": "箱批次",
//// "MATERIALQUANTITY": "数量",
//// "UNIT": "单位",
//// "OQARESULT" : "品质结果"
// String materialPackingName = materialPacking.getMaterialPackingName();
// String charge = materialPacking.getCharge();
// String materialQuantity = materialPacking.getMaterialQuantity();
// String unit = materialPacking.getUnit();
// String oqaResult2 = materialPacking.getOqaResult();
//
// String salesPerson = materialPacking.getSalesPerson(); // 业务
// String career_assistance = materialPacking.getCareer_assistance();
// String business_unit = materialPacking.getBusiness_unit();
// String durableType = materialPacking.getDurableType();
//
// pc += "'" + materialPackingName + "', ";
//
// //根据入库信息获取完工报告
// String sql3 = "SELECT\r\n" +
// " M.RECEIVEREQUESTNAME,\r\n" +
// " M.RECEIVEREQUESTDETAILNAME\r\n" +
// "FROM\r\n" +
// " MATERIALRECEIVEREQUESTDETAIL M\r\n" +
// "WHERE\r\n" +
// " (M.RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME OR M.PRODUCTORDER = :RECEIVEREQUESTNAME OR M.PLANORDER = :RECEIVEREQUESTNAME)\r\n" +
// " AND M.MATERIALSPECNAME = :MATERIALSPECNAME ";
// Map<String, Object> bindMap = new HashMap<String, Object>();
// bindMap.put("RECEIVEREQUESTNAME",receiverequestname);
// bindMap.put("MATERIALSPECNAME",materialspecname);
// List<Map<String, Object>> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql3, bindMap);
// if (queryForList == null || queryForList.size() < 1) {
// throw new GlobalException("生产报告未完成,请联系IT处理! ");
// }
// EventInfo makeEventInfo = new EventInfoUtil().makeEventInfo("createfgBoxInfo", user, "createfgBoxInfo", "", "");
//// try {
//// ProductIntoServiceImpl.CreateMaterialReceiveRequestAct
//// (makeEventInfo, "SDK", queryForList.get(0).get("RECEIVEREQUESTNAME").toString(),
//// queryForList.get(0).get("RECEIVEREQUESTDETAILNAME").toString(), indate,
//// ReceiveRequestActNo, "Normal", materialQuantity, materialspecname);
//// } catch (CustomException | ParseException e) {
//// // TODO Auto-generated catch block
//// e.printStackTrace();
//// throw new GlobalException(e.toString());
//// }
//
// receivePalletStockIn(makeEventInfo, "SDK", materialPackingName, charge,materialQuantity,sdk_ID,remark,materialspecname,"",user,
// palletname, ReceiveRequestActNo, oqaresult,phase,unit,indate,erplocation, erpfactory, locationname,queryForList.get(0).get("RECEIVEREQUESTNAME").toString(), queryForList.get(0).get("RECEIVEREQUESTDETAILNAME").toString(),
// salesPerson,career_assistance,business_unit,durableType);
//
// }
// pc += "'')";
//
//// boolean fgStockIn = ProductIntoServiceImpl.fgStockIn(ReceiveRequestActNo, user,commitDate);
// boolean fgStockIn = ProductIntoServiceImpl.fgStockIn(pc, user,commitDate,opCode);
// if (!fgStockIn) {
// throw new GlobalException("报送ERP失败,请联系IT处理! ");
// }
}
} catch ( Exception e ) {
e . printStackTrace ( ) ;
throw e ;
}
}
public static boolean receivePalletStockIn ( EventInfo eventInfo , String siteName , String materialPackingName , String Charge , String qty ,
String sdk_ID , String remark , String materilSpecName ,
String durableName , String user , String palletName , String receiveActNo , String oqaresult , String phase , String unit , String indate ,
String erpLocation , String erpFactory , String locationName , String receiveRequestName , String receiveRequestDetailName ,
String salesPerson , String career_assistance , String business_unit , String durableType ) {
StringBuffer sql = new StringBuffer ( ) ;
sql . append ( " SELECT * FROM MATERIALPACKING WHERE MATERIALPACKINGNAME = :MATERIALPACKINGNAME " ) ;
Map < String , Object > hashMap = new HashMap < String , Object > ( ) ;
hashMap . put ( " MATERIALPACKINGNAME " , materialPackingName ) ;
List < Map < String , Object > > queryForList = IDMFrameServiceProxy . getSqlTemplate ( ) . queryForList ( sql . toString ( ) , hashMap ) ;
if ( queryForList ! = null & & queryForList . size ( ) > 1 ) {
new CustomException ( " 批次已入库 " ) ;
}
//入库信息存入库存表
CreateInfo createInfo = new CreateInfo ( ) ;
createInfo . setSiteName ( siteName ) ;
createInfo . setMaterialPackingName ( materialPackingName ) ; // 新生成的box id
createInfo . setMaterialPackingType ( " Box " ) ;
createInfo . setContentMaterialType ( " " ) ;
Map < String , Object > bindMap = new HashMap < String , Object > ( ) ;
bindMap . put ( " superMaterialPackingName " , palletName ) ;
bindMap . put ( " MaterialType " , " " ) ;
bindMap . put ( " MaterialSpecName " , materilSpecName ) ;
if ( " " . equals ( oqaresult ) | | oqaresult = = null ) {
bindMap . put ( " oqaResultState " , " " ) ;
} else {
bindMap . put ( " oqaResultState " , " END " ) ;
}
bindMap . put ( " oqaResult " , oqaresult ) ;
bindMap . put ( " PackingGrade " , oqaresult ) ;
bindMap . put ( " SubPackingQuantity " , qty ) ;
bindMap . put ( " MaterialCreateQuantity " , qty ) ;
bindMap . put ( " MaterialQuantity " , qty ) ; // 数量
bindMap . put ( " PackingState " , " Released " ) ;
bindMap . put ( " OldPackingState " , " Released " ) ;
bindMap . put ( " StockState " , " Created " ) ;
bindMap . put ( " OldStockState " , " Created " ) ;
bindMap . put ( " HoldState " , " N " ) ;
bindMap . put ( " AreaName " , " " ) ;
bindMap . put ( " unit " , unit ) ;
bindMap . put ( " LocationName " , locationName ) ;
bindMap . put ( " charge " , Charge ) ;
bindMap . put ( " DurableName " , durableName ) ;
bindMap . put ( " MaterialProcessGroupName " , " " ) ;
bindMap . put ( " LastEventTimeKey " , TimeStampUtil . getCurrentEventTimeKey ( ) ) ;
bindMap . put ( " ReceiveRequestName " , receiveRequestName ) ;
bindMap . put ( " ReceiveRequestDetailName " , receiveRequestDetailName ) ;
bindMap . put ( " MakeDate " , indate ) ;
// bindMap.put("expiringDate", getExpridate(queryForList.get(0).get("SHIPTIME").toString(), queryForList.get(0).get("MATERIALSPECNAME").toString()));
bindMap . put ( " expiringDate " , getExpridate ( indate , materilSpecName ) ) ;
bindMap . put ( " ReceiveTime " , eventInfo . getEventTime ( ) ) ;
bindMap . put ( " ReceiveUser " , eventInfo . getEventUser ( ) ) ;
bindMap . put ( " ShipTime " , indate ) ;
bindMap . put ( " ShipUser " , user ) ;
bindMap . put ( " ErpLocation " , erpLocation ) ;
bindMap . put ( " ErpFactory " , erpFactory ) ;
bindMap . put ( " receiveActNo " , receiveActNo ) ;
bindMap . put ( " locationName " , locationName ) ;
bindMap . put ( " StockInType " , " Normal " ) ;
bindMap . put ( " SDK_ID " , sdk_ID ) ;
bindMap . put ( " PHASE " , phase ) ;
bindMap . put ( " salesPerson " , salesPerson ) ;
bindMap . put ( " career_assistance " , career_assistance ) ;
bindMap . put ( " business_unit " , business_unit ) ;
bindMap . put ( " durableType " , durableType ) ;
createInfo . setUserColumns ( bindMap ) ;
MaterialPackingServiceProxy . getMaterialPackingService ( ) . create (
eventInfo , createInfo ) ;
return true ;
}
public static String getExpridate ( String makeDate , String materialSpecName ) {
String sql = " SELECT NVL(T.EXPIRATIONDAY,180) + TO_TIMESTAMP(SUBSTR(:MAKEDATE,0,19),'YYYY-MM-DD HH24:MI:SS') EXP FROM MATERIALSPEC T WHERE T.MATERIALSPECNAME = :MATERIALSPECNAME " ;
Map < String , Object > hashMap = new HashMap < String , Object > ( ) ;
hashMap . put ( " MATERIALSPECNAME " , materialSpecName ) ;
hashMap . put ( " MAKEDATE " , makeDate ) ;
List < Map < String , Object > > queryForList = IDMFrameServiceProxy . getSqlTemplate ( ) . queryForList ( sql , hashMap ) ;
if ( queryForList ! = null & & queryForList . size ( ) > 0 ) {
return queryForList . get ( 0 ) . get ( " EXP " ) . toString ( ) ;
}
return " " ;
}
/ * *
* 托盘出库
* @param PalletDto
* @throws Exception
* /
private void stockOutPallet ( BaseEntity < PalletDto > PalletDto ) throws Exception {
try {
String commitDate = PalletDto . getTime ( ) ;
String shipRequestName = " " ;
String opCode = " " ;
String user = " " ;
List < com . cim . idm . wmspackage . materialpacking . management . data . MaterialPacking > list = new ArrayList < > ( ) ;
for ( PalletDto palletDto : PalletDto . getBody ( ) ) {
String palletname = palletDto . getPALLETNAME ( ) ; //栈板
String materialspecname = palletDto . getMATERIALSPECNAME ( ) ; //料号
String erpfactory = palletDto . getERPFACTORY ( ) ; //组织
String erplocation = palletDto . getERPLOCATION ( ) ; //仓库
String locationname = palletDto . getLOCATIONNAME ( ) ; //货位
String oqaresult = palletDto . getOQARESULT ( ) ; //质检结果
String indate = palletDto . getINDATE ( ) ; //入库日期
String phase = palletDto . getPHASE ( ) = = null ? " " : palletDto . getPHASE ( ) ; //阶段
// String planorder = palletDto.getPLANORDER();//投放计划
// String productorder = palletDto.getPRODUCTORDER();//生产订单
// String receiverequestname = palletDto.getRECEIVEREQUESTNAME();//完工报告
String remark = palletDto . getREMARK ( ) ; //备注
String sdk_ID = ( palletDto . getSDK_ID ( ) = = null | | " ~ " . equals ( palletDto . getSDK_ID ( ) . toString ( ) ) ) ? " " : palletDto . getSDK_ID ( ) . toString ( ) ; //SDK规格
String shiprequestdetailname = palletDto . getSHIPREQUESTDETAILNAME ( ) ; //发货单行号
shipRequestName = palletDto . getSHIPREQUESTNAME ( ) ; //发货单
// String user = palletDto.getUSER();//作业人
// String opCode = palletDto.getOpCode() == null ? "" : palletDto.getOpCode();
opCode = palletDto . getOpCode ( ) = = null ? " " : palletDto . getOpCode ( ) . toString ( ) ;
user = palletDto . getUSER ( ) = = null ? " " : palletDto . getUSER ( ) . toString ( ) ;
if ( " " . equals ( opCode ) | | opCode = = null ) {
String sql = " SELECT :USER || '-' || NCDATA_IDX.NEXTVAL ID FROM DUAL " ;
Map < String , Object > hashMap = new HashMap < String , Object > ( ) ;
hashMap . put ( " USER " , user ) ;
List < Map < String , Object > > queryForList = IDMFrameServiceProxy . getSqlTemplate ( ) . queryForList ( sql , hashMap ) ;
opCode = queryForList . get ( 0 ) . get ( " ID " ) . toString ( ) ;
}
List < MaterialPacking > detail = palletDto . getDetail ( ) ;
for ( MaterialPacking materialPacking : detail ) {
// "MATERIALPACKINGNAME": "箱标签",
// "CHARGE": "箱批次",
// "MATERIALQUANTITY": "数量",
// "UNIT": "单位",
// "OQARESULT" : "品质结果"
String materialPackingName = materialPacking . getMaterialPackingName ( ) ;
com . cim . idm . wmspackage . materialpacking . management . data . MaterialPacking selectByKey = MaterialPackingServiceProxy . getMaterialPackingService ( ) . selectByKey ( new MaterialPackingKey ( " SDK " , materialPackingName ) ) ;
if ( selectByKey = = null ) {
throw new CustomException ( " 找不到出库单据里的条码 " + materialPackingName ) ;
}
Double fgetMaterialQuantity = Double . parseDouble ( materialPacking . getMaterialQuantity ( ) ) ;
selectByKey . setMaterialQuantity2 ( fgetMaterialQuantity ) ;
list . add ( selectByKey ) ;
String charge = materialPacking . getCharge ( ) ;
String unit = materialPacking . getUnit ( ) ;
String oqaResult2 = materialPacking . getOqaResult ( ) ;
String materialQuantity = materialPacking . getMaterialQuantity ( ) ;
String materialQuantity2 = materialQuantity ;
String salesPerson = materialPacking . getSalesPerson ( ) ; // 业务
String career_assistance = materialPacking . getCareer_assistance ( ) ;
String business_unit = materialPacking . getBusiness_unit ( ) ;
String durableType = materialPacking . getDurableType ( ) ;
stockOutPalletDessignOrAssign ( materialPackingName , materialspecname , shipRequestName , materialQuantity , materialQuantity2 , sdk_ID , phase , user ) ;
}
String shipRequestType ;
String sql = " SELECT m.SHIPREQUESTTYPE FROM MATERIALSHIPREQUEST m WHERE m.SHIPREQUESTNAME = :SHIPREQUESTNAME " ;
Map < String , Object > hashMap = new HashMap < String , Object > ( ) ;
hashMap . put ( " SHIPREQUESTNAME " , shipRequestName ) ;
List < Map < String , Object > > queryForList = IDMFrameServiceProxy . getSqlTemplate ( ) . queryForList ( sql , hashMap ) ;
if ( queryForList ! = null & & queryForList . size ( ) > 0 ) {
String type = queryForList . get ( 0 ) . get ( " SHIPREQUESTTYPE " ) . toString ( ) ;
shipRequestType = type ;
} else {
throw new CustomException ( " 找不到出库单据 " + shipRequestName ) ;
}
// if ("4Y".equals(shipRequestType)) {
// String ncSql = "SELECT\r\n" +
// " NCDATA_IDX.NEXTVAL ID,\r\n" +
// " '' PrintBatch,\r\n" +
// " m.MATERIALPACKINGNAME Barcode,\r\n" +
// " 'transOut' PrintType,\r\n" +
// " m.shiprequestname SourceOrder,\r\n" +
// " T.BILLPK SourceOrderId,\r\n" +
// " T.DATAPK SourceAutoid, \r\n" +
// " T.PK_ORG OrgCode,\r\n" +
// " T.PK_MATE MaterialId,\r\n" +
// " T.INVCODE MaterialCode,\r\n" +
// " T.PK_STAGE StageId,\r\n" +
// " T.INVSTAGE StageCode,\r\n" +
// " T.BillCode WorkPlant,\r\n" +
// " '' WorkShop,\r\n" +
// " '' WorkShift,\r\n" +
// " '' Machine,\r\n" +
// " '' VolNumber,\r\n" +
// " '' SupCode,\r\n" +
// " '' CustomerCode,\r\n" +
// " '' SupBarcode,\r\n" +
// " '' CusBarcode,\r\n" +
// " T.INVNAME MaterialName,\r\n" +
// " T.MATERIALSPEC Specifications,\r\n" +
// " T.PK_SIZE SDKSpecificationsId,\r\n" +
// " T.INVSIZE SDKSpecifications,\r\n" +
// " M.CHARGE Batch,\r\n" +
// " '' JumboRollBatch,\r\n" +
// " m.MAKEDATE BatchDate,\r\n" +
// " SYSDATE PrintBatchDate,\r\n" +
// " m.MAKEDATE ProductDate,\r\n" +
// " m.EXPIRINGDATE ExpiryDate,\r\n" +
// " T.UNAME MainUom,\r\n" +
// " DECODE(m.MATERIALQUANTITY2,0, m.MATERIALQUANTITY,m.MATERIALQUANTITY2) MainQty,\r\n" +
// " m.FUNIT AssistUom,\r\n" +
// " NVL(m.FQTY, 0) AssistQty,\r\n" +
// " m.TRUEGG PracticalSpec,\r\n" +
// " 1 PrintQty,\r\n" +
// " sysdate PrintDate,\r\n" +
// " LASTEVENTUSER Operator,\r\n" +
// " '' Salesman,\r\n" +
// " m.REMARK ,\r\n" +
// " '' DefineItem1,\r\n" +
// " '' DefineItem2,\r\n" +
// " '' DefineItem3,\r\n" +
// " '' DefineItem4,\r\n" +
// " '' DefineItem5,\r\n" +
// " '' DefineItem6,\r\n" +
// " '' DefineItem7,\r\n" +
// " '' DefineItem8,\r\n" +
// " '' DefineItem9,\r\n" +
// " '' DefineItem10,\r\n" +
// " '' DefineItem11,\r\n" +
// " '' DefineItem12,\r\n" +
// " '' DefineItem13,\r\n" +
// " '' DefineItem14,\r\n" +
// " '' DefineItem15,\r\n" +
// " '' DefineItem16,\r\n" +
// " '' DefineItem17,\r\n" +
// " '' DefineItem18,\r\n" +
// " '' DefineItem19,\r\n" +
// " '' DefineItem20,\r\n" +
// " CURRENT_TIMESTAMP Timestamp,\r\n" +
// " SYSDATE CreatedTime,\r\n" +
// " SYSDATE UpdatedTime,\r\n" +
// " '0' CreatedUserId,\r\n" +
// " '0' CreatedUserName,\r\n" +
// " '0' UpdatedUserId,\r\n" +
// " '0' UpdatedUserName,\r\n" +
// " '0' IsDeleted,\r\n" +
// " '0' TenantId,\r\n" +
// " '1' MaterialVersion,\r\n" +
// " '0' Piece,\r\n" +
// " '0' IsSame\r\n" +
// "FROM\r\n" +
// " MATERIALPACKING m\r\n" +
// "LEFT JOIN MATERIALSHIPREQUESTDETAIL m2 ON\r\n" +
// " m.SHIPREQUESTNAME = m2.SHIPREQUESTNAME\r\n" +
// " AND m.MATERIALSPECNAME = m2.MATERIALSPECNAME \r\n" +
// " AND m.SDK_ID = m2.SDK_ID \r\n" +
// " AND m.PHASE = m2.PHASE \r\n" +
// "LEFT JOIN VBC_TOBILL@NC_PRD T ON\r\n" +
// " m2.ERPDETAILID = T.DATAPK\r\n" +
// "WHERE\r\n" +
// " m.STOCKSTATE = 'Stocked'\r\n" +
// " AND T.BILLPK IS NOT NULL AND m.SHIPREQUESTNAME = ? AND m.MATERIALPACKINGNAME IN ";
// String str = "(";
// for (MaterialPacking m : detail) {
// str += "'" + m.getMaterialPackingName() + "',";
// }
// str += "'') ";
// List<NcDataDto> queryForList2 = IDMFrameServiceProxy.getSqlTemplate().getJdbcTemplate().query(ncSql + str, new Object[]{shipRequestName},
// new BeanPropertyRowMapper(NcDataDto.class));
// new Test().savePrintData(queryForList2);
// }
// List<com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking> list = detail;
}
String optRemark = " " ;
// InvoiceServiceImpl.SendERPStockOut20240802(shipRequestName, "SDK", user, list,commitDate, opCode, optRemark);
InvoiceServiceImpl . StockUpOutSendSAPOrMES ( shipRequestName , " SDK " , user , list , commitDate , opCode ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
throw e ;
}
}
@Transactional
public void stockOutPalletDessignOrAssign ( String materialPackingName , String materialSpecName , String shipRequestName , String materialQuantity , String materialQuantity2 , String sdk_id , String phase , String user ) throws CustomException {
// MaterialshipRequest materialShipRequest = JSON.toJavaObject(in, MaterialshipRequest.class);
String type = " Assign " ;
// String materialPackingName = materialShipRequest.getMaterialPackingName();//标签
// String materialSpecName = materialShipRequest.getMaterialSpecName();
// String shipRequestName = materialShipRequest.getShipRequestName();
// String materialQuantity = materialShipRequest.getMaterialQuantity();
// String materialQuantity2 = materialShipRequest.getMaterialQuantity2();
// String sdk_id = (materialShipRequest.getSdk_id() == null || "~".equals(materialShipRequest.getSdk_id().toString())) ? "" : materialShipRequest.getSdk_id();
// String phase = materialShipRequest.getPhase() == null ? "" : materialShipRequest.getPhase();
// String user = materialShipRequest.getUser();
//查询单据类型
String sql = " SELECT \ r \ n " +
" m.SHIPREQUESTTYPE , \ r \ n " +
" m.SHIPREQUESTDETAILTYPE, \ r \ n " +
" t.MATERIALSPECNAME , \ r \ n " +
" SUM(t.REQUESTQUANTITY - t.ASSIGNEDQUANTITY) MINUSQTY,t.SDK_ID,t.PHASE \ r \ n " +
" FROM \ r \ n " +
" MATERIALSHIPREQUESTDETAIL t \ r \ n " +
" LEFT JOIN MATERIALSHIPREQUEST m ON \ r \ n " +
" t.SHIPREQUESTNAME = m.SHIPREQUESTNAME \ r \ n " +
" WHERE \ r \ n " +
" m.SHIPREQUESTNAME = :SHIPREQUESTNAME \ r \ n " +
" AND t.MATERIALSPECNAME = :MATERIALSPECNAME \ r \ n " +
" AND (:SDK_ID IS NULL \ r \ n " +
" OR t.SDK_ID = :SDK_ID) \ r \ n " +
" AND (:PHASE IS NULL \ r \ n " +
" OR t.PHASE = :PHASE) \ r \ n " +
" GROUP BY m.SHIPREQUESTTYPE , \ r \ n " +
" m.SHIPREQUESTDETAILTYPE, \ r \ n " +
" t.MATERIALSPECNAME,t.SDK_ID,t.PHASE \ r \ n " +
" ORDER BY \ r \ n " +
" t.MATERIALSPECNAME , \ r \ n " +
" t.SDK_ID, \ r \ n " +
" t.PHASE " ;
Map < String , Object > hashMap = new HashMap < String , Object > ( ) ;
hashMap . put ( " SHIPREQUESTNAME " , shipRequestName ) ;
hashMap . put ( " MATERIALSPECNAME " , materialSpecName ) ;
hashMap . put ( " SDK_ID " , sdk_id ) ;
hashMap . put ( " PHASE " , phase ) ;
List < Map < String , Object > > queryForList = IDMFrameServiceProxy . getSqlTemplate ( ) . queryForList ( sql , hashMap ) ;
if ( Objects . isNull ( queryForList ) | | queryForList . isEmpty ( ) ) {
throw new CustomException ( " 未找到对应的数据! " ) ;
}
String judge = " SELECT \ r \ n " +
" m.SDK_ID,MATERIALSPECNAME, \ r \ n " +
" m.PHASE, \ r \ n " +
" :MATERIALQUANTITY2 MATERIALQUANTITY2 , " +
" m.SHIPREQUESTNAME, \ r \ n " +
" m.STOCKSTATE, \ r \ n " +
" m.PACKINGGRADE , \ r \ n " +
" CASE WHEN to_char(EXPIRINGDATE, 'yyyymmdd') >= to_char(SYSDATE, 'yyyymmdd') THEN 1 \ r \ n " +
" ELSE 0 END EXP, OQARESULTSTATE \ r \ n " +
" FROM \ r \ n " +
" MATERIALPACKING m \ r \ n " +
" WHERE \ r \ n " +
" m.MATERIALPACKINGNAME = :MATERIALPACKINGNAME " ;
Map < String , Object > hashMap2 = new HashMap < String , Object > ( ) ;
hashMap2 . put ( " MATERIALPACKINGNAME " , materialPackingName ) ;
hashMap2 . put ( " MATERIALQUANTITY2 " , materialQuantity ) ;
List < Map < String , Object > > queryForList2 = IDMFrameServiceProxy . getSqlTemplate ( ) . queryForList ( judge , hashMap2 ) ;
if ( queryForList2 ! = null & & queryForList2 . size ( ) > 0 ) {
materialSpecName = queryForList2 . get ( 0 ) . get ( " MATERIALSPECNAME " ) = = null ? " " : queryForList2 . get ( 0 ) . get ( " MATERIALSPECNAME " ) . toString ( ) ;
sdk_id = ( queryForList2 . get ( 0 ) . get ( " SDK_ID " ) = = null | | " ~ " . equals ( sdk_id ) ) ? " " : queryForList2 . get ( 0 ) . get ( " SDK_ID " ) . toString ( ) ;
phase = queryForList2 . get ( 0 ) . get ( " PHASE " ) = = null ? " " : queryForList2 . get ( 0 ) . get ( " PHASE " ) . toString ( ) ;
materialQuantity2 = queryForList2 . get ( 0 ) . get ( " MATERIALQUANTITY2 " ) = = null ? " " : queryForList2 . get ( 0 ) . get ( " MATERIALQUANTITY2 " ) . toString ( ) ;
String invoice = queryForList2 . get ( 0 ) . get ( " SHIPREQUESTNAME " ) = = null ? " " : queryForList2 . get ( 0 ) . get ( " SHIPREQUESTNAME " ) . toString ( ) ;
String stockState = queryForList2 . get ( 0 ) . get ( " STOCKSTATE " ) = = null ? " " : queryForList2 . get ( 0 ) . get ( " STOCKSTATE " ) . toString ( ) ;
String packinggrade = queryForList2 . get ( 0 ) . get ( " PACKINGGRADE " ) = = null ? " " : queryForList2 . get ( 0 ) . get ( " PACKINGGRADE " ) . toString ( ) ;
String exp = queryForList2 . get ( 0 ) . get ( " EXP " ) = = null ? " " : queryForList2 . get ( 0 ) . get ( " EXP " ) . toString ( ) ;
String oqaresultstate = queryForList2 . get ( 0 ) . get ( " OQARESULTSTATE " ) = = null ? " " : queryForList2 . get ( 0 ) . get ( " OQARESULTSTATE " ) . toString ( ) ;
if ( ! " Stocked " . equals ( stockState ) ) {
throw new CustomException ( " 条码不在库! " ) ;
}
if ( ! " OK " . equals ( packinggrade ) ) {
throw new CustomException ( " 批次不合格! " ) ;
}
if ( ! " 1 " . equals ( exp ) ) {
throw new CustomException ( " 批次已过期! " ) ;
}
if ( ! " END " . equals ( oqaresultstate ) ) {
throw new CustomException ( " 未完成质检! " ) ;
}
// if (!"".equals(invoice)) {
// return AjaxResult.me().setSuccess(false).setMessage("条码已被" + invoice + "备货!");
// }
} else {
throw new CustomException ( " 未找到对应的条码! " ) ;
}
String shipRequestType = queryForList . get ( 0 ) . get ( " SHIPREQUESTTYPE " ) . toString ( ) ;
String shipRequestDetailType = queryForList . get ( 0 ) . get ( " SHIPREQUESTDETAILTYPE " ) . toString ( ) ;
String minusQty = queryForList . get ( 0 ) . get ( " MINUSQTY " ) . toString ( ) ;
BigDecimal FmaterialQuantity = new BigDecimal ( materialQuantity ) ;
BigDecimal FminusQty = new BigDecimal ( minusQty ) ;
BigDecimal Fzero = new BigDecimal ( 0 ) ;
//"SHIPREQUESTDETAILTYPE": "4Y-Cxx-03",//跨组织领料调拨单
//"BLSQ4K".equals(shipRequestType) || "4Y".equals(shipRequestType) || "CKSQ4I".equals(shipRequestType)
int dy0 = FminusQty . compareTo ( Fzero ) ;
MaterialPackingKey materialPackingKey = new MaterialPackingKey ( " SDK " , materialPackingName ) ;
com . cim . idm . wmspackage . materialpacking . management . data . MaterialPacking selectByKey = MaterialPackingServiceProxy . getMaterialPackingService ( ) . selectByKey ( materialPackingKey ) ;
if ( " Assign " . equals ( type ) ) {
System . out . println ( " 4Y " . equals ( shipRequestType ) + " ***************** " ) ;
if ( " 4Y " . equals ( shipRequestType ) ) { //调拨单
if ( " 4Y-Cxx-03 " . equals ( shipRequestDetailType ) ) {
if ( dy0 < 0 ) { //只能超发一个
throw new CustomException ( " 只能超发一个不能出库了! " ) ;
}
}
} else if ( " BLSQ4K " . equals ( shipRequestType ) ) { //领料
if ( dy0 < 0 ) { //只能超发一个
throw new CustomException ( " 只能超发一个不能出库了! " ) ;
}
} else if ( " CKSQ4I " . equals ( shipRequestType ) ) { //其他出库
if ( dy0 < 0 ) { //只能超发一个
throw new CustomException ( " 只能超发一个不能出库了! " ) ;
}
} else if ( " 4C " . equals ( shipRequestType ) ) {
if ( dy0 < = 0 ) { //只能超发一个
throw new CustomException ( " 销售不允许超发! " ) ;
}
} else {
throw new CustomException ( " 单据类型不正确! " ) ;
}
} else if ( " Dessign " . equals ( type ) ) {
}
try {
InvoiceServiceImpl . ReserveByPallet ( selectByKey , shipRequestName , materialSpecName , sdk_id , phase , type , " SDK " , user , materialQuantity2 , " Y " ) ;
} catch ( CustomException e ) {
e . printStackTrace ( ) ;
AjaxResult . me ( ) . setSuccess ( false ) . setMessage ( e . toString ( ) ) ;
}
}
public static void saveMessageLog ( ErpMessageLog log ) {
String sql = " INSERT INTO BS_ERPMESSAGELOG(INTERFACETIME,SERVERNAME, EVENTNAME, EVENTTIMEKEY, EVENTUSER, MESSAGELOG,RESULTCODE,MESSAGEID,RESULTMESSAGE,MESSAGELOG2,RESULTMESSAGE2) \ r \ n "
+ " VALUES(TO_DATE(:INTERFACETIME,'yyyy-mm-dd hh24:mi:ss'),:SERVERNAME, :EVENTNAME, :EVENTTIMEKEY, :EVENTUSER, :MESSAGELOG,:RESULTCODE,:MESSAGEID,:RESULTMESSAGE,:MESSAGELOG2,:RESULTMESSAGE2) " ;
Map < String , Object > bindMap = new HashMap < String , Object > ( ) ;
bindMap . put ( " SERVERNAME " , log . getServerName ( ) ) ;
bindMap . put ( " EVENTNAME " , log . getEventName ( ) ) ;
bindMap . put ( " EVENTTIMEKEY " , log . getId ( ) ) ;
bindMap . put ( " EVENTUSER " , log . getEventUser ( ) ) ;
bindMap . put ( " MESSAGEID " , log . getMessageId ( ) ) ;
bindMap . put ( " INTERFACETIME " , log . getInterfaceTime ( ) ) ;
bindMap . put ( " RESULTCODE " , log . getResultCode ( ) ) ;
bindMap . put ( " MESSAGELOG " , log . getSendMsg ( ) ) ; // 推送ERP的json
bindMap . put ( " RESULTMESSAGE " , log . getReturnMsg ( ) ) ; // 返回结果的json
bindMap . put ( " MESSAGELOG2 " , log . getSendMsg2 ( ) ) ; // 推送ERP的json
bindMap . put ( " RESULTMESSAGE2 " , log . getReturnMsg2 ( ) ) ; // 返回结果的json
IDMFrameServiceProxy . getSqlTemplate ( ) . update ( sql , bindMap ) ;
}
}