123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519 |
- #ifndef RVC_MODULE_MATERIALMGR_CNN_H_
- #define RVC_MODULE_MATERIALMGR_CNN_H_
- #pragma once
- #include "IHttpFunc.h"
- #include <vector>
- #include "json/json.h"
- #include "SpSecureClient.h"
- #include "GUIConsole_def_g.h"
- #include <ctime>
- using namespace GUIConsole;
- #pragma pack(1)
- // 部署位置调整
- // [StructName("ModInfoR")]
- struct ModifyEnrollInfoReq
- {
- //char UserID[16]; // 登录用户
- //BYTE Password[16]; // 登录密码(Hash)
- char TerminalNo[16]; // 终端号码
- BYTE EnrolGPS[8]; // 终端GPS坐标点
- char EnrolAddr[128]; // 终端部署地址
- };
- // 递增物料使用计数
- //[StructName("AddMCR")]
- struct AddMaterialCounterReq
- {
- //TerminalNo 终端号 字符数字 16
- char TerminalNo[16];
- //Materiel 物料代码 字符 16
- char Material[16];
- };
- // [StructName("AddTMR")]
- struct AddTradeManageReq
- {
- char TerminalNo[16];
- char AgentID[16];
- char Time[32];
- };
- //查询物料数据
- //[StructName("QryMCR")]
- struct QueryMaterialInfoReq
- {
- char DeviceNo[16];
- };
- //[StructName("QryMCA2")]
- struct QueryMaterialInfoRetDate
- {
- char DeviceNo[16]; //发卡器编号或终端号
- char Materiel[16]; //物料类型
- char CardGroove[2]; //卡槽号
- char CardBoxNo[20]; //卡箱号
- char PsbCode[4]; //凭证种类
- char PsbName[128]; //凭证种类名称
- unsigned int CardInit;
- unsigned int CardRemains;
- unsigned int CardIssued;
- unsigned int CardMixed;
- unsigned int CardPercent;
- char TerminalNo[16]; //如果是发卡器物料数据,这个是对应的Pad终端号
- char Maintainer[16]; //物料维护人员
- char MaintainTime[32]; //物料维护时间
- char UpdateTime[32]; //同步时间
- };
- //[StructName("QryMCA1")]
- struct QueryMaterialInfoRet1
- {
- unsigned int count;
- };
- struct GrayLaunchReq : CHTTPReq
- {
- GrayLaunchReq()
- {
- m_timeOut = 500;
- }
- CSimpleStringA m_terminal_no;
- CSimpleStringA m_branch_no;
- CSimpleStringA m_modular;
- virtual string ToJson()
- {
- char reqcontent[512];
- sprintf(reqcontent, "{\"terminal_no\":\"%s\",\"branch_no\":\"%s\",\"modular\":\"%s\"}", m_terminal_no.GetData(),
- m_branch_no.GetData(), m_modular.GetData());
- return reqcontent;
- }
- };
- struct GrayLaunchResponse : CHTTPRet
- {
- GrayLaunchResponse() :m_result(false) {}
- bool m_result;
- virtual bool Parse(string strData)
- {
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GrayLaunchResponse: data = %s", strData.c_str());
- Json::Value root;
- Json::Reader reader;
- reader.parse(strData, root, false);
- if (root["data"].isBool()) {
- m_result = root["data"].asBool();
- }
- return m_result;
- }
- };
- struct QueryMaterialInfoHTTPReq : CHTTPReq
- {
- QueryMaterialInfoHTTPReq() { m_timeOut = 500; }
- CSimpleStringA DeviceNo;
- virtual string ToJson()
- {
- char reqcontent[512];
- sprintf(reqcontent, "{\"deviceNo\":\"%s\"}", DeviceNo.GetData());
- return reqcontent;
- }
- };
- struct QueryMaterialInfoHTTPRet : CHTTPRet
- {
- QueryMaterialInfoHTTPRet() {}
- std::vector<QueryMaterialInfoRetDate> retData;
- virtual bool Parse(std::string strData)
- {
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("QueryMaterialInfoHTTPRet: data = %s", strData.c_str());
- Json::Value root;
- Json::Reader reader;
- reader.parse(strData, root);
- if (root.isNull() || root["data"].isNull())
- return false;
- for (int i = 0; i < root["data"].size(); i++) {
- QueryMaterialInfoRetDate cur;
- auto curObject = root["data"][i];
- ZeroMemory(&cur, sizeof(QueryMaterialInfoRetDate));
- if (!curObject["DeviceNo"].isNull() && curObject["DeviceNo"].isString()) {
- sprintf(cur.DeviceNo, "%s", curObject["DeviceNo"].asString().c_str());
- } else
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("parse DeviceNo failed");
- if (!curObject["Materiel"].isNull() && curObject["Materiel"].isString())
- sprintf(cur.Materiel, "%s", curObject["Materiel"].asString().c_str());
- else
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("parse Materiel failed");
- if (!curObject["CardGroove"].isNull() && curObject["CardGroove"].isString())
- sprintf(cur.CardGroove, "%s", curObject["CardGroove"].asString().c_str());
- else
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("parse CardGroove failed");
- if (!curObject["CardBoxNo"].isNull() && curObject["CardBoxNo"].isString())
- sprintf(cur.CardBoxNo, "%s", curObject["CardBoxNo"].asString().c_str());
- else
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("parse CardBoxNo failed");
- if (!curObject["PsbCode"].isNull() && curObject["PsbCode"].isString())
- sprintf(cur.PsbCode, "%s", curObject["PsbCode"].asString().c_str());
- else
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("parse PsbCode failed");
- if (!curObject["PsbName"].isNull() && curObject["PsbName"].isString())
- sprintf(cur.PsbName, "%s", curObject["PsbName"].asString().c_str());
- else
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("parse PsbName failed");
- if (!curObject["CardInit"].isNull() && curObject["CardInit"].isInt())
- cur.CardInit = curObject["CardInit"].asInt();
- else
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("parse CardInit failed");
- if (!curObject["CardRemains"].isNull() && curObject["CardRemains"].isInt())
- cur.CardRemains = curObject["CardRemains"].asInt();
- else
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("parse CardRemains failed");
- if (!curObject["CardIssued"].isNull() && curObject["CardIssued"].isInt())
- cur.CardIssued = curObject["CardIssued"].asInt();
- else
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("parse CardIssued failed");
- if (!curObject["CardMixed"].isNull() && curObject["CardMixed"].isInt())
- cur.CardMixed = curObject["CardMixed"].asInt();
- else
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("parse CardMixed failed");
- if (!curObject["CardPercent"].isNull() && curObject["CardPercent"].isInt())
- cur.CardPercent = curObject["CardPercent"].asInt();
- else
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("parse CardPercent failed");
- if (!curObject["TerminalNo"].isNull() && curObject["TerminalNo"].isString())
- sprintf(cur.TerminalNo, "%s", curObject["TerminalNo"].asString().c_str());
- else
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("parse TerminalNo failed");
- if (!curObject["Maintainer"].isNull() && curObject["Maintainer"].isString())
- sprintf(cur.Maintainer, "%s", curObject["Maintainer"].asString().c_str());
- else
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("parse Maintainer failed");
- if (!curObject["MaintainTime"].isNull() && curObject["MaintainTime"].isString())
- sprintf(cur.MaintainTime, "%s", curObject["MaintainTime"].asString().c_str());
- else
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("parse MaintainTime failed");
- if (!curObject["UpdateTime"].isNull() && curObject["UpdateTime"].isString())
- sprintf(cur.UpdateTime, "%s", curObject["UpdateTime"].asString().c_str());
- else
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("parse UpdateTime failed");
- retData.push_back(cur);
- }
- return true;
- }
- };
- // 获取后台物料计数
- // [StructName("GetMCR")]
- struct GetMaterialCounterReq
- {
- //TerminalNo 终端号 字符数字 16
- char TerminalNo[16];
- //Materiel 物料代码 字符 16
- char Material[16];
- //Maintainer 维护人 字符 16
- char Maintainer[16];
- };
- // [StructName("GetMCA")]
- struct GetMaterialCounterRet
- {
- //Materiel 物料代码 字符 16
- char Material[16];
- //Capacity 放置数量 整数 4
- int Capacity;
- //Counter 使用计数 整数 4
- int Counter;
- //Maintainer 上次物料添加维护人 字符 16
- char Maintainer[16];
- //维护时间 格式:年年月月日日时时分分 字符 10
- char MaintainTime[32];
- };
- // 物料重置
- // [StructName("ResetMCR")]
- struct ResetMaterialCounterReq
- {
- //TerminalNo 终端号 字符数字 16
- char TerminalNo[16];
- //Materiel 物料代码 字符 16
- char Material[16];
- //ResetCapacity 重置数量 整数 4
- int ResetCapacity;
- //TerminalCounter 终端对应计数 整数 4
- int TerminalCounter;
- // 实际剩余计数
- int RemainCounter;
- //Maintainer 维护人 字符 16
- char Maintainer[16];
- // 不符意见
- char Comment[128];
- };
- // 终端用户登录
- //[StructName("LOGINREQ")]
- struct UserLoginReq
- {
- char User[16]; // 用户
- char Password[16]; // 密码,Hash后
- };
- // 吞卡登记
- // [StructName("RegCardR")]
- struct RegistSwallowedCardReq
- {
- char TerminalType[16];
- //TerminalNo 终端号 字符数字 16
- char TerminalNo[16];
- //TerminalNo 终端号 字符数字 16
- char CardNo[20];
- //Materiel 物料代码 字符 4
- char ReasonCode[4];
- // 吞卡日期
- char SwallowDate[8];
- // 吞卡时间
- char SwallowTime[6];
- };
- // 吞卡登记 (xkm@20160419)
- // [StructName("RegCard2")]
- struct RegistSwallowedCardReqV2
- {
- char TerminalType[16];
- //TerminalNo 终端号 字符数字 16
- char TerminalNo[16];
- //TerminalNo 终端号 字符数字 16
- char CardNo[20];
- //Materiel 物料代码 字符 4
- char ReasonCode[4];
- // 吞卡日期
- char SwallowDate[8];
- // 吞卡时间
- char SwallowTime[6];
- // 发卡器编号
- char DeviceSciNo[20];
- // 保留字段
- char Reserved[64];
- };
- // 同步计数到数据库
- // [StructName("SyncMC1")]
- struct SyncMaterialCountReq1
- {
- char TerminalNo[16];
- char DeviceNo[16];
- char Material[16];
- DWORD CardBoxNum;
- };
- // [StructName("SyncMC2")]
- struct SyncMaterialCountReq2
- {
- bool bMaintain;
- char Maintainer[16];
- DWORD MaintainTime;
- char CardBoxNo[20];
- char PsbCode[8];
- char PsbName[128];
- DWORD CardInit;
- DWORD CardRemains;
- DWORD CardIssued;
- DWORD CardMixed;
- DWORD CardPercent;
- };
- struct SyncMaterialCountHTTPReq : CHTTPReq
- {
- SyncMaterialCountHTTPReq() { m_timeOut = 500; }
- SyncMaterialCountReq1 reqInfo;
- std::vector<SyncMaterialCountReq2> reqData;
- SYSTEMTIME Time_tToSystemTime(__int64 t)
- {
- auto temptm = std::gmtime(&t);
- SYSTEMTIME st = { 1900 + temptm->tm_year, 1 + temptm->tm_mon, temptm->tm_wday, temptm->tm_mday, temptm->tm_hour + 8, temptm->tm_min, temptm->tm_sec, 0 };
- return st;
- }
- std::string formatTime(__int64 time)
- {
- char tBuf[1024] = "";
- auto sysTime = Time_tToSystemTime(time);
- sprintf(tBuf, "%04u-%02u-%02u %02u:%02u:%02u", sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond);
- return tBuf;
- }
- virtual string ToJson() {
- Json::Value root;
- Json::Value arrayObj;
- root["terminalNo"] = reqInfo.TerminalNo;
- root["deviceNo"] = reqInfo.DeviceNo;
- root["materiel"] = reqInfo.Material;
- root["cardBoxNum"] = (int)reqInfo.CardBoxNum;
- for (int i = 0; i <= reqInfo.CardBoxNum; i++)
- {
- Json::Value item;
- item["CardBoxNo"] = reqData[i].CardBoxNo;
- item["PsbCode"] = reqData[i].PsbCode;
- item["PsbName"] = reqData[i].PsbName;
- item["CardInit"] = (int)reqData[i].CardInit;
- item["CardRemains"] = (int)reqData[i].CardRemains;
- item["CardIssued"] = (int)reqData[i].CardIssued;
- item["CardMixed"] = (int)reqData[i].CardMixed;
- item["CardPercent"] = (int)reqData[i].CardPercent;
- item["Maintainer"] = reqData[i].Maintainer;
- if (reqData[i].MaintainTime == 0)
- item["MaintainTime"] = "";
- else {
- item["MaintainTime"] = CSmallDateTime::GetNow().ToTimeString().GetData();
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("MaintainTime:%d", (DWORD)CSmallDateTime::GetNow());
- }
-
- item["bMaintain"] = reqData[i].bMaintain;
- arrayObj.append(item);
- }
- root["cardIssueList"] = arrayObj;
- return root.toStyledString();
- }
- };
- struct SyncMaterialCountHTTPRet : CHTTPRet
- {
- SyncMaterialCountHTTPRet() : m_success(false) {}
- bool m_success;
- virtual bool Parse(string strData)
- {
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("SyncMaterialCountHTTPRet: data = %s", strData.c_str());
- Json::Value root;
- Json::Reader reader;
- reader.parse(strData, root, false);
- if (root["success"].isBool()) {
- m_success = root["success"].asBool();
- }
- return m_success;
- }
- };
- #pragma pack()
- class CMaterialMgrCnn : public SpSecureClient
- {
- public:
- CMaterialMgrCnn(CEntityBase* pEntity);
- // 全部实现成同步版本
- ErrorCodeEnum ModifyEnrolInfo(const char* pszUserID, const char* pszPwd, const char* pszAddr, const char* pszGPS);
- ErrorCodeEnum AddMaterialCounter(const char* pszTerminalNo, const char* pszMaterial);
- ErrorCodeEnum AddTradeManage(const char* pszTerminalNo, const char* pszAgentID, const char* pszTime);
- //查询物料信息
- ErrorCodeEnum QueryMaterialInfo(const char* pszDeviceNo, unsigned int& count, CAutoArray<CSimpleStringA>& arrDeviceNo, CAutoArray<CSimpleStringA>& arrMateriel,
- CAutoArray<CSimpleStringA>& CardGroove, CAutoArray<CSimpleStringA>& CardBoxNo, CAutoArray<CSimpleStringA>& PsbCode, CAutoArray<CSimpleStringA>& PsbName,
- CAutoArray<unsigned int>& CardInit, CAutoArray<unsigned int>& CardRemains, CAutoArray<unsigned int>& CardIssued, CAutoArray<unsigned int>& CardMixed, CAutoArray<unsigned int>& CardPercent,
- CAutoArray<CSimpleStringA>& TerminalNo, CAutoArray<CSimpleStringA>& Maintainer, CAutoArray<CSimpleStringA>& MaintainTime, CAutoArray<CSimpleStringA>& UpdateTime);
- ErrorCodeEnum GetMaterialCounter(const char* pszMaterial, const char* pszTerminalNo, const char* pszUserID,
- unsigned int& nLastCapacity, unsigned int& nUsedCount);
- ErrorCodeEnum ResetMaterialCounter(const char* pszMaterial, const char* pszTerminalNo, const char* pszUserID,
- int nResetCapacity, int nTerminalCount, int nRemainCount, const char* pszComment);
- ErrorCodeEnum MaintainerLogin(const char* pszMaintainerID, const char* pszPassword);
- ErrorCodeEnum RegistSwallowedCard(const char* pszTerminalType, const char* pszTerminalNo, const char* pszCardNo, const char* pszReasonCode,
- const char* pszDate, const char* pszTime, const char* pszDeviceSciNo);
- ErrorCodeEnum SyncMaterialCount(const char* pszDeviceNo, DWORD dwCardBoxNum,
- CAutoArray<bool>& arrMaintainFlag, CAutoArray<CSimpleStringA>& arrMaintainer, CAutoArray<unsigned int>& arrMaintainTime,
- CAutoArray<CSimpleStringA>& arrCardBoxNo, CAutoArray<CSimpleStringA>& arrPsbCode,
- CAutoArray<CSimpleStringA>& arrPsbName, CAutoArray<unsigned int>& arrCardInit, CAutoArray<unsigned int>& arrCardRemains,
- CAutoArray<unsigned int>& arrCardIssued, CAutoArray<unsigned int>& arrCardMixed, CAutoArray<unsigned int>& arrCardPercent);
- private:
- ~CMaterialMgrCnn();
- void OnDisconnect();
- void OnPkgAnswer(const CSmartPointer<IPackage>& pRecvPkg);
- ErrorCodeEnum HandleModifyEnrollInfoRet(const CSmartPointer<IPackage>& pRecvPkg);
- ErrorCodeEnum HandleAddMaterialCounterRet(const CSmartPointer<IPackage>& pRecvPkg);
- ErrorCodeEnum HandleAddTradeManageRet(const CSmartPointer<IPackage>& pRecvPkg);
- //查询物料信息
- ErrorCodeEnum HandleQueryMaterialInfoRet(const CSmartPointer<IPackage>& pRecvPkg, unsigned int& count, CAutoArray<CSimpleStringA>& arrDeviceNo, CAutoArray<CSimpleStringA>& arrMateriel,
- CAutoArray<CSimpleStringA>& CardGroove, CAutoArray<CSimpleStringA>& CardBoxNo, CAutoArray<CSimpleStringA>& PsbCode, CAutoArray<CSimpleStringA>& PsbName,
- CAutoArray<unsigned int>& CardInit, CAutoArray<unsigned int>& CardRemains, CAutoArray<unsigned int>& CardIssued, CAutoArray<unsigned int>& CardMixed, CAutoArray<unsigned int>& CardPercent,
- CAutoArray<CSimpleStringA>& TerminalNo, CAutoArray<CSimpleStringA>& Maintainer, CAutoArray<CSimpleStringA>& MaintainTime, CAutoArray<CSimpleStringA>& UpdateTime);
- ErrorCodeEnum HandleGetMaterialCounterRet(const CSmartPointer<IPackage>& pRecvPkg, unsigned int& nLastCapacity, unsigned int& nUsedCount);
- ErrorCodeEnum HandleResetMaterialCounterRet(const CSmartPointer<IPackage>& pRecvPkg);
- ErrorCodeEnum HandleMaintainerLoginRet(const CSmartPointer<IPackage>& pRecvPkg);
- ErrorCodeEnum HandleRegistSwallowedCardRet(const CSmartPointer<IPackage>& pRecvPkg);
- ErrorCodeEnum HandleSyncMaterialCount(const CSmartPointer<IPackage>& pRecvPkg);
- ErrorCodeEnum GetMD5(char* pStr, BYTE md5[16]);
- IHttpFunc* m_pHttpFunc;
- CSimpleStringA m_strTerminalId;
- CSimpleStringA m_strCallRouteBranchNo;
- CSimpleStringA m_materialUrl;
- BOOL m_forceBranch;
- ErrorCodeEnum LoadTerminalId()
- {
- CSystemStaticInfo Info;
- ErrorCodeEnum Error = m_pEntity->GetFunction()->GetSystemStaticInfo(Info);
- if (Error == Error_Succeed) {
- m_strTerminalId = Info.strTerminalID;
- }
- return Error;
- }
- };
- #endif //RVC_MODULE_MATERIALMGR_CNN_H_
|