Esempio n. 1
0
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()
Esempio n. 2
0
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()
Esempio n. 3
0
    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))
Esempio n. 4
0
    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
Esempio n. 5
0
    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
Esempio n. 6
0
    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