|
|
@@ -1,10 +1,19 @@
|
|
|
package com.uas.eis.serviceImpl;
|
|
|
|
|
|
import com.uas.eis.dao.BaseDao;
|
|
|
+import com.uas.eis.dao.EdiLogDao;
|
|
|
+import com.uas.eis.dao.EdiPostLogDao;
|
|
|
import com.uas.eis.dao.SqlRowList;
|
|
|
+import com.uas.eis.entity.EdiLog;
|
|
|
+import com.uas.eis.entity.EdiPostLog;
|
|
|
import com.uas.eis.service.StockService;
|
|
|
+import com.uas.eis.utils.BaseUtil;
|
|
|
+import com.uas.eis.utils.Constant;
|
|
|
+import com.uas.eis.utils.HttpUtil;
|
|
|
+import com.uas.eis.utils.JacksonUtil;
|
|
|
import org.apache.commons.collections.map.HashedMap;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.jdbc.support.rowset.SqlRowSet;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
@@ -18,30 +27,190 @@ import java.util.Map;
|
|
|
*/
|
|
|
@Service
|
|
|
public class StockServiceImpl implements StockService{
|
|
|
+ //private static final String yundingStockUrl = "http://dc.oclean.com/setconfirmstatus";
|
|
|
+ //private static final String yundingStockPostUrl = "http://dc.oclean.com/getinstorage";
|
|
|
+ //private static final String sendStockPostConfirmToYundingUrl = "http://dc.oclean.com/setconfirmstatus";
|
|
|
+ private static final String sendStockToYundingUrl = "http://localhost:8008/test/stock";
|
|
|
+ private static final String stockGetPostFromYundingUrl = "http://localhost:8008/test/stockpost";
|
|
|
+ private static final String sendStockPostConfirmToYundingUrl = "http://localhost:8008/test/stockconfirm";
|
|
|
+
|
|
|
@Autowired
|
|
|
BaseDao baseDao;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ EdiLogDao ediLogDao;
|
|
|
+ @Autowired
|
|
|
+ EdiPostLogDao ediPostLogDao;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void autoPost(){
|
|
|
+ String timestamp = String.valueOf(System.currentTimeMillis()/1000);
|
|
|
+
|
|
|
+ Map<String,Object> postMapData = new HashMap<>();
|
|
|
+ postMapData.put("app_key", Constant.yundingAppKey);
|
|
|
+ postMapData.put("time_stamp",timestamp);
|
|
|
+ postMapData.put("start_time","1970-01-01 00:00:00");
|
|
|
+ postMapData.put("end_time","2099-01-01 00:00:00");
|
|
|
+ postMapData.put("status",2);
|
|
|
+ postMapData.put("page_size",100);
|
|
|
+ postMapData.put("page_index",0);
|
|
|
+
|
|
|
+ String jsonData = JacksonUtil.toJson(postMapData);
|
|
|
+ System.out.println("jsonData:" + jsonData);
|
|
|
+ try {
|
|
|
+ HttpUtil.Response response = HttpUtil.doPostToYunding(stockGetPostFromYundingUrl,jsonData,timestamp);
|
|
|
+ String responseText = response.getResponseText();
|
|
|
+ Map<String,Object> responseMap = JacksonUtil.fromJson(response.getResponseText());
|
|
|
+
|
|
|
+ if(!"0".equals(String.valueOf(responseMap.get("code")))){
|
|
|
+ requestFailLog(responseText);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Map<String,Object>> datas = (List<Map<String,Object>>) responseMap.get("data");
|
|
|
+ for(Map<String,Object> data:datas){
|
|
|
+ String code = String.valueOf(data.get("outer_no"));
|
|
|
+ String piClass = String.valueOf(data.get("src_order_type"));
|
|
|
+ EdiPostLog postHist = null;
|
|
|
+ try {
|
|
|
+ postHist = ediPostLogDao.findByCodeAndPiClass(code,piClass);
|
|
|
+ if(postHist!=null){ //说明之前已经过账成功
|
|
|
+ postConfirmToYunding(code,1);
|
|
|
+ }else{ //没有记录,说明没有过账成功
|
|
|
+ String out = baseDao.callProcedure("SP_YUNDING_STOCKPOST",new Object[]{code,piClass});
|
|
|
+ if (out!=null){
|
|
|
+ postFailLog(responseText,out);
|
|
|
+ }else{
|
|
|
+ postSuccessLog(responseText);
|
|
|
+ logToAvoidRepeatPost(code,piClass); //记录到edi_post_log,防止调用接口失败,下次重复过账
|
|
|
+ postConfirmToYunding(code,1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ postFailLog(responseText,e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void postConfirmToYunding(String code,int type){
|
|
|
+ String timestamp = String.valueOf(System.currentTimeMillis()/1000);
|
|
|
+
|
|
|
+ Map<String,Object> postMapData = new HashMap<>();
|
|
|
+ postMapData.put("app_key", Constant.yundingAppKey);
|
|
|
+ postMapData.put("time_stamp",timestamp);
|
|
|
+ postMapData.put("type",type);
|
|
|
+ postMapData.put("outer_no",code);
|
|
|
+
|
|
|
+ String jsonData = JacksonUtil.toJson(postMapData);
|
|
|
+ try{
|
|
|
+ HttpUtil.doPostToYunding(sendStockPostConfirmToYundingUrl,jsonData,timestamp);
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private EdiPostLog logToAvoidRepeatPost(String code,String piClass){
|
|
|
+ EdiPostLog ediPostLog = new EdiPostLog();
|
|
|
+ ediPostLog.setCode(code);
|
|
|
+ ediPostLog.setPiClass(piClass);
|
|
|
+ ediPostLogDao.save(ediPostLog);
|
|
|
+ return ediPostLog;
|
|
|
+ }
|
|
|
+
|
|
|
+ private EdiLog postSuccessLog(String responseText){
|
|
|
+ EdiLog ediLog = new EdiLog();
|
|
|
+ ediLog.setData(responseText);
|
|
|
+ ediLog.setStatus("success");
|
|
|
+ ediLog.setType("post");
|
|
|
+ ediLogDao.save(ediLog);
|
|
|
+ return ediLog;
|
|
|
+ }
|
|
|
+
|
|
|
+ private EdiLog postFailLog(String responseText,String errMsg){
|
|
|
+ EdiLog ediLog = new EdiLog();
|
|
|
+ ediLog.setData(responseText);
|
|
|
+ ediLog.setErrorMsg(errMsg);
|
|
|
+ ediLog.setErrorCode("uas post fail");
|
|
|
+ ediLog.setStatus("fail");
|
|
|
+ ediLog.setType("post fail");
|
|
|
+ ediLogDao.save(ediLog);
|
|
|
+ return ediLog;
|
|
|
+ }
|
|
|
+
|
|
|
+ private EdiLog requestFailLog(String responseText){
|
|
|
+ Map<String,Object> responseMap = JacksonUtil.fromJson(responseText);
|
|
|
+ EdiLog ediLog = new EdiLog();
|
|
|
+ ediLog.setData(responseText);
|
|
|
+ ediLog.setErrorCode(String.valueOf(responseMap.get("code")));
|
|
|
+ ediLog.setErrorMsg(String.valueOf(responseMap.get("message")));
|
|
|
+ ediLog.setStatus("fail");
|
|
|
+ ediLog.setType("request fail");
|
|
|
+ ediLogDao.save(ediLog);
|
|
|
+ return ediLog;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public Map<String, Object> postStockToYunding(Integer id) {
|
|
|
Map<String,Object> data = getMainData(id);
|
|
|
List<Map<String,Object>> datas = new LinkedList<>();
|
|
|
datas.add(data);
|
|
|
|
|
|
+ String timestamp = String.valueOf(System.currentTimeMillis()/1000);
|
|
|
+ String outerNo = String.valueOf(data.get("outer_no"));
|
|
|
+
|
|
|
+ Map<String,Object> postMapData = new HashMap<>();
|
|
|
+ postMapData.put("app_key", Constant.yundingAppKey);
|
|
|
+ postMapData.put("time_stamp",timestamp);
|
|
|
+ postMapData.put("data",datas);
|
|
|
+
|
|
|
+ return postData(outerNo,postMapData,timestamp);
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String,Object> postData(String outerNo,Map<String,Object> data,String timestamp){
|
|
|
Map<String,Object> res = new HashMap<>();
|
|
|
- res.put("app_key","");
|
|
|
- res.put("time_stamp",System.currentTimeMillis()/1000);
|
|
|
- res.put("data",datas);
|
|
|
+ String jsonData = JacksonUtil.toJson(data);
|
|
|
+ System.out.println("jsonData:" + jsonData);
|
|
|
+ try{
|
|
|
+ HttpUtil.Response response = HttpUtil.doPostToYunding(sendStockToYundingUrl,jsonData,timestamp);
|
|
|
+
|
|
|
+ String responseText = response.getResponseText();
|
|
|
+ Map<String,Object> responseMap = JacksonUtil.fromJson(response.getResponseText());
|
|
|
|
|
|
+ if(!"0".equals(String.valueOf(responseMap.get("code")))){
|
|
|
+ res.put("success",false);
|
|
|
+ res.put("remark",responseMap.get("message"));
|
|
|
+ }else{
|
|
|
+ Map<String,Object> msgJson = (Map<String,Object>) responseMap.get("msg_json");
|
|
|
+ List<String> successCodes = (List<String>)msgJson.get("s_no");
|
|
|
+ if(successCodes.contains(outerNo)){
|
|
|
+ res.put("success",true);
|
|
|
+ }else{
|
|
|
+ res.put("success",false);
|
|
|
+ res.put("remark","云顶处理失败!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ res.put("success",false);
|
|
|
+ res.put("remark",e.getMessage());
|
|
|
+ }
|
|
|
return res;
|
|
|
}
|
|
|
|
|
|
private Map<String,Object> getMainData(Integer id){
|
|
|
Map<String,Object> data = new HashMap<>();
|
|
|
- SqlRowList rs = baseDao.queryForRowSet("select pi_id,pi_class,pi_inoutno,pi_whcode,pi_purpose from prodinout where pi_id=" + id);
|
|
|
+ SqlRowSet rs = baseDao.getJdbcTemplate().queryForRowSet("select pi_id,pi_class,pi_inoutno,pi_whcode,pi_purpose,pi_remark from prodinout where pi_id=" + id);
|
|
|
if(rs.next()){
|
|
|
data.put("outer_no",rs.getString("pi_inoutno"));
|
|
|
data.put("warehouse_no",getWarehouseCode(rs.getString("pi_class"),rs.getString("pi_whcode"),rs.getString("pi_purpose")));
|
|
|
- data.put("out_warehouse_no",rs.getString("pi_inwhcode"));
|
|
|
+ data.put("out_warehouse_no",rs.getString("pi_whcode"));
|
|
|
data.put("remark",rs.getString("pi_remark"));
|
|
|
data.put("order_type",getOrderType(rs.getString("pi_class")));
|
|
|
data.put("details_list",getDetailData(id));
|
|
|
@@ -108,16 +277,22 @@ public class StockServiceImpl implements StockService{
|
|
|
case "采购验收单":
|
|
|
orderType = 0;
|
|
|
break;
|
|
|
- case "采购验退单":
|
|
|
- orderType = 4;
|
|
|
+ case "委外验收单":
|
|
|
+ orderType = 0;
|
|
|
+ break;
|
|
|
+ case "其它入库单":
|
|
|
+ orderType = 0;
|
|
|
break;
|
|
|
case "拨出单":
|
|
|
orderType = 1;
|
|
|
break;
|
|
|
- case "其它出库单":
|
|
|
- orderType = 3;
|
|
|
+ case "采购验退单":
|
|
|
+ orderType = 2;
|
|
|
break;
|
|
|
- case "其它入库单":
|
|
|
+ case "委外验退单":
|
|
|
+ orderType = 2;
|
|
|
+ break;
|
|
|
+ case "其它出库单":
|
|
|
orderType = 2;
|
|
|
break;
|
|
|
default:break;
|