def retry_sync_wms(): trans_id = str(uuid.uuid1()).replace("-", "") try: db = db_session sync_failed_logs = db.query(TWmsSyncLog).filter( TWmsSyncLog.status == 0).all() for sync_failed_log in sync_failed_logs: logging.info("retry send wms msg: %s", sync_failed_log.req_body) param = json.loads(sync_failed_log.req_body) url = WMS_URL + "?" + urlencode(param) success, body = yield http_client_request( url, {}, {"request_transid": trans_id}) if success: db.query(TWmsSyncLog).filter( TWmsSyncLog.id == sync_failed_log.id).update({ TWmsSyncLog.status: 1, TWmsSyncLog.res_body: body }) db.query(TReceiptScanLog).filter( TReceiptScanLog.trans_id == sync_failed_log.trans_id).update({ TReceiptScanLog.status: ReceiptScanState.SYNC_SUCCESS.value }) db.commit() except Exception as err_info: logging.error("retry sync wms exception:%s", err_info) db.rollback()
def retry_sync_scm(): trans_id = str(uuid.uuid1()).replace("-", "") try: db = db_session sync_failed_logs = db.query(TScmSyncLog).filter( TScmSyncLog.status == 0).all() for sync_failed_log in sync_failed_logs: logging.info("retry send scm msg: %s", sync_failed_log.req_body) param = json.loads(sync_failed_log.url_params) sync_msg = json.loads(sync_failed_log.req_body) url = SCM_URL + "?" + urlencode(param) success, body = yield http_client_request( url, sync_msg, {"request_transid": trans_id}) if success: db.query(TScmSyncLog).filter( TScmSyncLog.id == sync_failed_log.id).update({ TScmSyncLog.status: 1, TScmSyncLog.res_body: body }) db.commit() except Exception as err_info: logging.error("retry sync scm exception:%s", err_info) db.rollback()
def sync_returned_info_to_scm(self, trans_id, epc_return, operate_time=None): try: logging.info( "sync returned info to scm, epcs = {}".format(epc_return)) return_infos = self.filter_return_epcs(epc_return) logging.info("sync returned info to scm, return_infos = {}".format( return_infos)) # return_infos = self.db.query(TReturnInfo.sku, TReturnInfo.epc).filter(TReturnInfo.epc.in_(return_pecs)).filter(TReturnInfo.inbound_flag == 1).all() if len(return_infos) <= 0: return return_info_dict = {} for one_return_info in return_infos: return_info_dict[one_return_info[0]] = [] for one_return_info in return_infos: return_info_dict[one_return_info[0]].append(one_return_info[1]) logging.info("select return info = {}".format(return_info_dict)) sync_msg = { 'transid': trans_id, 'operate_time': operate_time if operate_time is not None else datetime.now().strftime("%Y-%m-%d %H:%M:%S"), 'items': [] } for k, v in return_info_dict.items(): try: purchase_order_code = self.db.query( TEpcDetail.order_id).filter( TEpcDetail.epc == v[0]).one() except Exception as err_info: logging.warning( "can't find purchase_order_code from t_epc_detail, epc = {}" .format(err_info)) purchase_order_code = [""] tmp = { 'item_code': k, 'actual_qty': len(v), 'purchase_order_code': purchase_order_code[0] } sync_msg['items'].append(tmp) param = { 'method': 'stockout.confirm', 'sign': hashlib.md5( (SCM_SIGN_STRING + sync_msg['operate_time']).encode('utf8')).hexdigest(), 'timestamp': sync_msg['operate_time'], } url = SCM_URL + "?" + urlencode(param) success, body = yield http_client_request(url, sync_msg, self.trans_identity) if success: logging.info( "sync return info to scm SUCCESS! url = {}, content = {}". format(url, sync_msg)) else: logging.error( "sync return info to scm FAILED! url = {}, content = {}, resp = {}" .format(url, sync_msg, body)) scm_sync_log = TScmSyncLog() scm_sync_log.transid = trans_id scm_sync_log.operate_time = sync_msg['operate_time'] scm_sync_log.type = 'return' if success: scm_sync_log.status = 1 else: scm_sync_log.status = 0 scm_sync_log.req_body = json.dumps(sync_msg) scm_sync_log.res_body = "" if body is None else body self.db.add(scm_sync_log) self.db.commit() except Exception as err_info: self.db.rollback() logging.error( "sync returned info to scm failed! err = {}".format(err_info))
def sync_list_count_msg_to_wms(self, statistics_info, trans_id=None): """ 同步信息到wms收货接口 :param statistics_info: :param trans_id: :return: """ try: device_id = self.msg_info[MSG_DEVICE_ID] ship_id = self.ship_count_transaction[device_id][0] sku_infos = statistics_info[SKU_INFO] sync_msg = [] for sku in sku_infos: epc_info = sku_infos[sku] order_sync_msg = { URL_ORDER_CODE: ship_id, URL_SKU: sku, URL_QTY: len(epc_info), URL_ITEMS: [] } items = [] for epc in epc_info: items.append({URL_EPC: epc}) order_sync_msg[URL_ITEMS] = items sync_msg.append(order_sync_msg) content = base64.b64encode(json.dumps(sync_msg).encode()).decode() # secret = content + SESSION_KEY param = { URL_APPKEY_PARAM: APP_KEY, URL_SERVICE_PARAM: SHIP_COUNT_INTERFACE, URL_SECRET_PARAM: "app_wms", URL_FORMAT_PARAM: "JSON", URL_CONTENT_PARAM: content, "encrypt": 1 } url = WMS_URL + "?" + urlencode(param) success, body = yield http_client_request(url, {}, self.trans_identity) sync_log = TWmsSyncLog() sync_log.optime = datetime.now() sync_log.unit_id = ship_id sync_log.type = "LIST" if trans_id is None: sync_log.trans_id = self.request_transid else: sync_log.trans_id = trans_id if success: sync_log.status = 1 else: sync_log.status = 0 sync_log.req_body = json.dumps(param) sync_log.res_body = "" if body is None else body self.db.add(sync_log) self.db.commit() except Exception as err_info: self.error("sync message to wms failed: %s", err_info) self.db.rollback() return False
def sync_receipt_msg_to_scm(self, trans_id, wms_sync_msg): self.info( "sync receipt to scm, transid = {}, wms_sync_msg = {}".format( trans_id, wms_sync_msg)) try: sync_msg = { 'transid': trans_id, 'entry_order_code': wms_sync_msg[0][URL_ORDER_CODE], 'supplier_code': self.query_supplier_id_by_epc( wms_sync_msg[0][URL_ITEMS][0][URL_EPC]), 'operate_time': datetime.now().strftime("%Y-%m-%d %H:%M:%S"), 'items': [] } for sku_info in wms_sync_msg: items = { 'item_code': sku_info[URL_SKU], 'actual_qty': sku_info['qty'] } sync_msg['items'].append(items) sign_src = SCM_SIGN_STRING + sync_msg['operate_time'] param = { 'method': 'entryorder.confirm', 'sign': hashlib.md5(sign_src.encode('utf8')).hexdigest(), 'timestamp': sync_msg['operate_time'], } url = SCM_URL + "?" + urlencode(param) success, body = yield http_client_request(url, sync_msg, self.trans_identity) if success: self.info( "sync receipt to scm SUCCESS! url = {}, content = {}". format(url, sync_msg)) else: self.error( "sync receipt to scm FAILED! url = {}, content = {}, resp = {}" .format(url, sync_msg, body)) scm_sync_log = TScmSyncLog() scm_sync_log.transid = trans_id scm_sync_log.entry_order_code = sync_msg['entry_order_code'] scm_sync_log.operate_time = sync_msg['operate_time'] scm_sync_log.supplier_code = sync_msg['supplier_code'] scm_sync_log.type = 'receipt' if success: scm_sync_log.status = 1 else: scm_sync_log.status = 0 scm_sync_log.url_params = json.dumps(param) scm_sync_log.req_body = json.dumps(sync_msg) scm_sync_log.res_body = "" if body is None else body self.db.add(scm_sync_log) self.db.commit() except Exception as err_info: self.error("sync msg to scm failed: %s", err_info) self.db.rollback() return
def sync_receipt_msg_to_wms(self, box_id, trans_id): """ 同步信息到wms收货接口 :param box_id: :param trans_id: :return: """ try: sku_info = self.statistics_order_info(trans_id) if sku_info is None: return sync_msg = [] for sku in sku_info: epc_info = sku_info[sku] order_sync_msg = { URL_ORDER_CODE: None, URL_SKU: sku, URL_BOX_ID: box_id, URL_QTY: len(epc_info), URL_ITEMS: [] } items = [] for epc in epc_info: items.append({URL_EPC: epc}) if order_sync_msg[URL_ORDER_CODE] is None: success, order_id = self.query_order_id_by_epc(epc) if success: order_id = order_id + "-" + box_id[ 2:] + "-" + datetime.now().strftime( "%m%d%H%M%S") order_sync_msg[URL_ORDER_CODE] = order_id order_sync_msg[URL_ITEMS] = items sync_msg.append(order_sync_msg) self.info("sync to wms order info:%s", json.dumps(sync_msg)) content = base64.b64encode(json.dumps(sync_msg).encode()).decode() param = { URL_APPKEY_PARAM: APP_KEY, URL_SERVICE_PARAM: RECEIPT_INTERFACE, URL_SECRET_PARAM: "app_wms", URL_FORMAT_PARAM: "JSON", URL_CONTENT_PARAM: content, "encrypt": 1 } url = WMS_URL + "?" + urlencode(param) success, body = yield http_client_request(url, {}, self.trans_identity) sync_log = TWmsSyncLog() sync_log.type = EpcSyncType.RECEIPT.value sync_log.optime = datetime.now() sync_log.case_id = box_id sync_log.status = 0 sync_log.unit_id = box_id sync_log.trans_id = trans_id if success: sync_log.status = 1 self.update_receipt_scan_state(trans_id, ReceiptScanState.SYNC_SUCCESS) else: sync_log.status = 0 self.update_receipt_scan_state(trans_id, ReceiptScanState.SYNC_FAILED) sync_log.req_body = json.dumps(param) sync_log.res_body = "" if body is None else body self.db.add(sync_log) self.db.commit() # 20200621 增加scm同步 self.sync_receipt_msg_to_scm(trans_id, sync_msg) except Exception as err_info: self.error("sync message to wms failed: %s", err_info) self.db.rollback() return False