| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- 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.*;
- 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;
- import java.util.LinkedList;
- import java.util.List;
- import java.util.Map;
- /**
- * Created by luhg on 2018/4/19.
- * 出入库相关
- */
- @Service
- public class StockServiceImpl implements StockService{
- private static final String sendStockToYundingUrl = "http://dc.oclean.com/putinstorage";
- private static final String stockGetPostFromYundingUrl = "http://dc.oclean.com/getinstorage";
- private static final String sendStockPostConfirmToYundingUrl = "http://dc.oclean.com/setconfirmstatus";
- @Autowired
- BaseDao baseDao;
- @Autowired
- EdiLogDao ediLogDao;
- @Autowired
- EdiPostLogDao ediPostLogDao;
- @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<>();
- String jsonData = JacksonUtil.toSortJson(data);
- try{
- HttpUtil.Response response = HttpUtil.doPostToYunding(sendStockToYundingUrl,jsonData,timestamp);
- String responseText = response.getResponseText();
- System.out.println("responseText:" + responseText);
- System.out.println("responseCode:" + response.getStatusCode());
- if(response.getStatusCode()!=200){
- throw new RuntimeException("yunding server error:" + responseText);
- }
- 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);
- ediLogDao.save(LogUtil.getSendSuccessLog(outerNo,jsonData,"send success"));
- }else{
- res.put("success",false);
- res.put("remark","云顶处理失败!");
- }
- }
- }catch (Exception e){
- e.printStackTrace();
- res.put("success",false);
- res.put("remark",e.getMessage());
- }
- return res;
- }
- @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.toSortJson(postMapData);
- String responseText = null;
- try {
- HttpUtil.Response response = HttpUtil.doPostToYunding(stockGetPostFromYundingUrl,jsonData,timestamp);
- if(response.getStatusCode()!=200){
- responseText = "yunding server error";
- throw new RuntimeException(response.getResponseText());
- }
- responseText = response.getResponseText();
- System.out.println("responseText" + responseText);
- Map<String,Object> responseMap = JacksonUtil.fromJson(response.getResponseText());
- if(!"0".equals(String.valueOf(responseMap.get("code")))){
- ediLogDao.save(LogUtil.getRequestFailLog(responseText));
- return;
- }
- if(responseMap.get("data")==null){
- return;
- }
- List<Map<String,Object>> datas = (List<Map<String,Object>>) responseMap.get("data");
- if(datas.size()>0){
- execPostProcedure(datas,responseText);
- }
- }catch (Exception e){
- e.printStackTrace();
- ediLogDao.save(LogUtil.getPostFailLog(responseText,e.getMessage()));
- }
- }
- public void execPostProcedure(List<Map<String,Object>> datas,String responseText){
- String code = null;
- String piClass = null;
- EdiPostLog postHist = null;
- for(Map<String,Object> data:datas){
- code = String.valueOf(data.get("outer_no"));
- piClass = String.valueOf(data.get("src_order_type"));
- 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){
- ediLogDao.save(LogUtil.getPostFailLog(code,responseText,out));
- }else{
- ediLogDao.save(LogUtil.getPostSuccessLog(code,responseText));
- ediPostLogDao.save(LogUtil.getLogToAvoidRepeatPost(code,piClass)); //记录到edi_post_log,防止调用接口失败,下次重复过账
- postConfirmToYunding(code,1);
- }
- }
- }catch (Exception e){
- e.printStackTrace();
- ediLogDao.save(LogUtil.getPostFailLog(code,responseText,e.getMessage()));
- }
- }
- }
- public 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.toSortJson(postMapData);
- try{
- HttpUtil.Response response = HttpUtil.doPostToYunding(sendStockPostConfirmToYundingUrl,jsonData,timestamp);
- System.out.println("confirm response:" + response.getResponseText());
- }catch (Exception e){
- e.printStackTrace();
- }
- }
- private Map<String,Object> getMainData(Integer id){
- Map<String,Object> data = new HashMap<>();
- SqlRowSet rs = baseDao.getJdbcTemplate().queryForRowSet("select pi_id,pi_class,pi_inoutno,pi_whcode,pi_purpose,pi_remark from prodinout where pi_id=" + id);
- String piClass = null;
- if(rs.next()){
- piClass = rs.getString("pi_class");
- data.put("outer_no",rs.getString("pi_inoutno"));
- data.put("warehouse_no",getWarehouseCode(piClass,rs.getString("pi_whcode"),rs.getString("pi_purpose")));
- data.put("out_warehouse_no",rs.getString("pi_whcode"));
- data.put("remark",rs.getString("pi_remark"));
- data.put("order_type",getOrderType(piClass));
- data.put("src_order_type",piClass);
- data.put("details_list",getDetailData(id));
- }
- return data;
- }
- private String getWarehouseCode(String piClass,String piWhCode,String piPurpose){
- if("拨出单".equals(piClass)){
- return piPurpose;
- }
- return piWhCode;
- }
- private List<Map<String,Object>> getDetailData(Integer id){
- List<Map<String,Object>> datas = new LinkedList<>();
- Map<String,Object> data = new HashMap<>();
- SqlRowList rs = baseDao.queryForRowSet("select pd_piclass,pd_id,pd_ordercode,pd_orderdetno,pd_batchcode,pd_prodcode,pd_inqty,pd_outqty,pd_description from prodiodetail where pd_piid=" + id);
- while (rs.next()){
- data = new HashMap<>();
- data.put("child_no",rs.getString("pd_id"));
- data.put("purchase_no",rs.getString("pd_ordercode"));
- data.put("purchase_detno",rs.getString("pd_orderdetno"));
- data.put("batch_no",rs.getString("pd_batchcode"));
- data.put("stockin_num",getQty(rs.getString("pd_piclass"),rs.getInt("pd_inqty"),rs.getInt("pd_outqty")));
- data.put("spec_no",rs.getString("pd_prodcode"));
- data.put("remark",rs.getString("pd_description"));
- datas.add(data);
- }
- return datas;
- }
- private int getQty(String piClass,int inQty,int outQty){
- int correctQty = 0;
- switch (piClass){
- case "采购验收单":
- correctQty = inQty;
- break;
- case "采购验退单":
- correctQty = outQty;
- break;
- case "委外验收单":
- correctQty = inQty;
- break;
- case "委外验退单":
- correctQty = outQty;
- break;
- case "拨出单":
- correctQty = outQty;
- break;
- case "其它出库单":
- correctQty = outQty;
- break;
- case "其它入库单":
- correctQty = inQty;
- break;
- default:break;
- }
- return correctQty;
- }
- private int getOrderType(String piClass){
- int orderType = -1;
- switch (piClass){
- case "采购验收单":
- orderType = 0;
- break;
- case "委外验收单":
- orderType = 0;
- break;
- case "其它入库单":
- orderType = 0;
- break;
- case "拨出单":
- orderType = 1;
- break;
- case "采购验退单":
- orderType = 2;
- break;
- case "委外验退单":
- orderType = 2;
- break;
- case "其它出库单":
- orderType = 2;
- break;
- default:break;
- }
- return orderType;
- }
- }
|