MaterialMgrCnn.cpp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581
  1. #include "stdafx2.h"
  2. #include "MaterialMgrCnn.h"
  3. #include "md5.h"
  4. #if defined(RVC_OS_LINUX)
  5. #define strncpy_s(d, l, s, n) strcpy(d, s)
  6. #endif //RVC_OS_LINUX
  7. CMaterialMgrCnn::CMaterialMgrCnn(CEntityBase *pEntity)
  8. :SpSecureClient(pEntity)
  9. {
  10. }
  11. CMaterialMgrCnn::~CMaterialMgrCnn()
  12. {
  13. }
  14. ErrorCodeEnum CMaterialMgrCnn::GetMD5(char *pStr, BYTE md5v[16])
  15. {
  16. #if defined(_MSC_VER)
  17. HCRYPTPROV hCryptProv;
  18. ErrorCodeEnum rc = Error_Unexpect;
  19. if (CryptAcquireContextA(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET)) {
  20. HCRYPTHASH hHash;
  21. if (CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, &hHash)) {
  22. CryptHashData(hHash, (LPBYTE)pStr, strlen(pStr), 0);
  23. DWORD dwLen = 16;
  24. CryptGetHashParam(hHash, HP_HASHVAL, (LPBYTE)&md5v[0], &dwLen, 0);
  25. rc = Error_Succeed;
  26. }
  27. CryptDestroyHash(hHash);
  28. }
  29. CryptReleaseContext(hCryptProv, 0);
  30. return rc;
  31. #else
  32. unsigned char x[MD5_DIGESTSIZE];
  33. md5_ctx_t ctx;
  34. md5_init(&ctx);
  35. md5(x, pStr, strlen(pStr));
  36. memcpy(md5v, x, MD5_DIGESTSIZE);
  37. return Error_Succeed;
  38. #endif //_MSC_VER
  39. }
  40. ErrorCodeEnum CMaterialMgrCnn::ModifyEnrolInfo(const char *pszUserID, const char *pszPwd, const char *pszAddr, const char *pszGPS)
  41. {
  42. CSmartPointer<IPackage> pReqPkg = CreateNewPackage("ModInfo");
  43. ModifyEnrollInfoReq info = {};
  44. if (pszAddr != NULL)
  45. strncpy_s(info.EnrolAddr, sizeof(info.EnrolAddr), pszAddr, _TRUNCATE);
  46. if (pszGPS != NULL)
  47. {
  48. sscanf(pszGPS, "%f,%f", &info.EnrolGPS[0], &info.EnrolGPS[4]);
  49. }
  50. CSystemStaticInfo staticInfo;
  51. m_pEntity->GetFunction()->GetSystemStaticInfo(staticInfo);
  52. strncpy_s(info.TerminalNo, sizeof(info.TerminalNo), staticInfo.strTerminalID, _TRUNCATE);
  53. pReqPkg->AddStruct("ModInfoR", false, false, (BYTE*)&info, sizeof(info));
  54. if (SendPackage(pReqPkg) == "")
  55. return Error_Unexpect;
  56. auto pRetPkg = ReceivePackage(5);
  57. if (pRetPkg == NULL)
  58. return Error_TimeOut;
  59. return HandleModifyEnrollInfoRet(pRetPkg);
  60. }
  61. ErrorCodeEnum CMaterialMgrCnn::AddTradeManage(const char *pszTerminalNo, const char *pszAgentID, const char *pszTime)
  62. {
  63. auto pReqPkg = CreateNewPackage("TradeManage");
  64. AddTradeManageReq req = {};
  65. strncpy_s(req.TerminalNo, sizeof(req.TerminalNo), pszTerminalNo, _TRUNCATE);
  66. strncpy_s(req.AgentID, sizeof(req.AgentID), pszAgentID, _TRUNCATE);
  67. strncpy_s(req.Time, sizeof(req.Time), pszTime, _TRUNCATE);
  68. pReqPkg->AddStruct("AddTMR", false, false, (BYTE*)&req, sizeof(req));
  69. if (SendPackage(pReqPkg) == "")
  70. return Error_Unexpect;
  71. auto pRetPkg = ReceivePackage(5);
  72. if (pRetPkg == NULL)
  73. return Error_TimeOut;
  74. return HandleAddTradeManageRet(pRetPkg);
  75. }
  76. ErrorCodeEnum CMaterialMgrCnn::AddMaterialCounter(const char *pszTerminalNo, const char *pszMaterial)
  77. {
  78. auto pReqPkg = CreateNewPackage("AddCount");
  79. AddMaterialCounterReq req = {};
  80. strncpy_s(req.Material, sizeof(req.Material), pszMaterial, _TRUNCATE);
  81. strncpy_s(req.TerminalNo, sizeof(req.TerminalNo), pszTerminalNo, _TRUNCATE);
  82. pReqPkg->AddStruct("AddMCR", false, false, (BYTE*)&req, sizeof(req));
  83. if (SendPackage(pReqPkg) == "")
  84. return Error_Unexpect;
  85. auto pRetPkg = ReceivePackage(5);
  86. if (pRetPkg == NULL)
  87. return Error_TimeOut;
  88. return HandleAddMaterialCounterRet(pRetPkg);
  89. }
  90. ErrorCodeEnum CMaterialMgrCnn::QueryMaterialInfo(const char *pszDeviceNo, unsigned int &count, CAutoArray<CSimpleStringA> &arrDeviceNo, CAutoArray<CSimpleStringA> &arrMateriel,
  91. CAutoArray<CSimpleStringA> &CardGroove, CAutoArray<CSimpleStringA> &CardBoxNo, CAutoArray<CSimpleStringA> &PsbCode, CAutoArray<CSimpleStringA> &PsbName,
  92. CAutoArray<unsigned int> &CardInit, CAutoArray<unsigned int> &CardRemains, CAutoArray<unsigned int> &CardIssued, CAutoArray<unsigned int> &CardMixed,
  93. CAutoArray<unsigned int> &CardPercent, CAutoArray<CSimpleStringA> &TerminalNo, CAutoArray<CSimpleStringA> &Maintainer, CAutoArray<CSimpleStringA> &MaintainTime,
  94. CAutoArray<CSimpleStringA> &UpdateTime)
  95. {
  96. auto pReqPkg = CreateNewPackage("QueryMC");
  97. QueryMaterialInfoReq req = {};
  98. strncpy_s(req.DeviceNo, sizeof(req.DeviceNo), pszDeviceNo, _TRUNCATE);
  99. pReqPkg->AddStruct("QryMCR", false, false, (BYTE*)&req, sizeof(req));
  100. if (SendPackage(pReqPkg) == "")
  101. return Error_Unexpect;
  102. auto pRetPkg = ReceivePackage(5);
  103. if (pRetPkg == NULL)
  104. return Error_TimeOut;
  105. return HandleQueryMaterialInfoRet(pRetPkg, count, arrDeviceNo, arrMateriel, CardGroove, CardBoxNo, PsbCode, PsbName, CardInit,
  106. CardRemains, CardIssued, CardMixed, CardPercent, TerminalNo, Maintainer, MaintainTime, UpdateTime);
  107. }
  108. ErrorCodeEnum CMaterialMgrCnn::GetMaterialCounter(const char *pszMaterial, const char *pszTerminalNo, const char *pszUserID, unsigned int &nLastCapacity, unsigned int &nUsedCount)
  109. {
  110. auto pReqPkg = CreateNewPackage("GetCount");
  111. GetMaterialCounterReq req = {};
  112. strncpy_s(req.Material, sizeof(req.Material), pszMaterial, _TRUNCATE);
  113. strncpy_s(req.TerminalNo, sizeof(req.TerminalNo), pszTerminalNo, _TRUNCATE);
  114. strncpy_s(req.Maintainer, sizeof(req.Maintainer), pszUserID, _TRUNCATE);
  115. pReqPkg->AddStruct("GetMCR", false, false, (BYTE*)&req, sizeof(req));
  116. if (SendPackage(pReqPkg) == "")
  117. return Error_Unexpect;
  118. auto pRetPkg = ReceivePackage(5);
  119. if (pRetPkg == NULL)
  120. return Error_TimeOut;
  121. return HandleGetMaterialCounterRet(pRetPkg, nLastCapacity, nUsedCount);
  122. }
  123. ErrorCodeEnum CMaterialMgrCnn::ResetMaterialCounter(const char *pszMaterial, const char *pszTerminalNo,
  124. const char *pszUserID, int nResetCapacity, int nTerminalCount, int nRemainCount, const char *pszComment)
  125. {
  126. auto pReqPkg = CreateNewPackage("ResetMC");
  127. ResetMaterialCounterReq req = {};
  128. strncpy_s(req.Material, sizeof(req.Material), pszMaterial, _TRUNCATE);
  129. strncpy_s(req.TerminalNo, sizeof(req.TerminalNo), pszTerminalNo, _TRUNCATE);
  130. strncpy_s(req.Maintainer, sizeof(req.Maintainer), pszUserID, _TRUNCATE);
  131. req.ResetCapacity = nResetCapacity;
  132. req.TerminalCounter = nTerminalCount;
  133. req.RemainCounter = nRemainCount;
  134. strncpy_s(req.Comment, sizeof(req.Comment), pszComment, _TRUNCATE);
  135. pReqPkg->AddStruct("ResetMCR", false, false, (BYTE*)&req, sizeof(req));
  136. if (SendPackage(pReqPkg) == "")
  137. return Error_Unexpect;
  138. auto pRetPkg = ReceivePackage(5);
  139. if (pRetPkg == NULL)
  140. return Error_TimeOut;
  141. return HandleResetMaterialCounterRet(pRetPkg);
  142. }
  143. ErrorCodeEnum CMaterialMgrCnn::MaintainerLogin(const char* pszMaintainerID, const char *pszPassword)
  144. {
  145. auto pReqPkg = CreateNewPackage("UsrLogin");
  146. UserLoginReq req = {};
  147. strncpy_s(req.User, sizeof(req.User), pszMaintainerID, _TRUNCATE);
  148. strncpy_s(req.Password, sizeof(req.Password), pszPassword, _TRUNCATE);
  149. pReqPkg->AddStruct("LOGINREQ", false, false, (BYTE*)&req, sizeof(req));
  150. if (SendPackage(pReqPkg) == "")
  151. return Error_Unexpect;
  152. auto pRetPkg = ReceivePackage(5);
  153. if (pRetPkg == NULL)
  154. return Error_TimeOut;
  155. return HandleMaintainerLoginRet(pRetPkg);
  156. }
  157. ErrorCodeEnum CMaterialMgrCnn::RegistSwallowedCard(const char *pszTerminalType, const char *pszTerminalNo, const char *pszCardNo,
  158. const char *pszReasonCode, const char *pszSwallowDate, const char *pszSwallowTime, const char *pszDeviceSciNo)
  159. {
  160. RegistSwallowedCardReqV2 req = {};
  161. strncpy_s(req.TerminalType, sizeof(req.TerminalType), pszTerminalType, _TRUNCATE);
  162. strncpy_s(req.TerminalNo, sizeof(req.TerminalNo), pszTerminalNo, _TRUNCATE);
  163. strncpy_s(req.CardNo, sizeof(req.CardNo), pszCardNo, _TRUNCATE);
  164. strncpy(req.ReasonCode, pszReasonCode, sizeof(req.ReasonCode));
  165. strncpy(req.SwallowDate, pszSwallowDate, sizeof(req.SwallowDate));
  166. strncpy(req.SwallowTime, pszSwallowTime, sizeof(req.SwallowTime));
  167. strncpy_s(req.DeviceSciNo, sizeof(req.DeviceSciNo), pszDeviceSciNo, _TRUNCATE);
  168. auto pReqPkg = CreateNewPackage("RegCard");
  169. pReqPkg->AddStruct("RegCard2", false, false, (BYTE*)&req, sizeof(req));
  170. if (SendPackage(pReqPkg) == "")
  171. return Error_Unexpect;
  172. auto pRetPkg = ReceivePackage(5);
  173. if (pRetPkg == NULL)
  174. return Error_TimeOut;
  175. return HandleRegistSwallowedCardRet(pRetPkg);
  176. }
  177. ErrorCodeEnum CMaterialMgrCnn::SyncMaterialCount(const char *pszDeviceNo, DWORD dwCardBoxNum,
  178. CAutoArray<bool> &arrMaintainFlag, CAutoArray<CSimpleStringA> &arrMaintainer, CAutoArray<unsigned int> &arrMaintainTime,
  179. CAutoArray<CSimpleStringA> &arrCardBoxNo, CAutoArray<CSimpleStringA> &arrPsbCode,
  180. CAutoArray<CSimpleStringA> &arrPsbName, CAutoArray<unsigned int> &arrCardInit,
  181. CAutoArray<unsigned int> &arrCardRemains, CAutoArray<unsigned int> &arrCardIssued,
  182. CAutoArray<unsigned int> &arrCardMixed, CAutoArray<unsigned int> &arrCardPercent)
  183. {
  184. CSystemStaticInfo info;
  185. m_pEntity->GetFunction()->GetSystemStaticInfo(info);
  186. SyncMaterialCountReq1 req1 = {};
  187. strncpy_s(req1.TerminalNo, sizeof(req1.TerminalNo), info.strTerminalID, _TRUNCATE);
  188. strncpy_s(req1.DeviceNo, sizeof(req1.DeviceNo), pszDeviceNo, _TRUNCATE);
  189. strncpy_s(req1.Material, sizeof(req1.Material), "DebitCard", _TRUNCATE);
  190. req1.CardBoxNum = dwCardBoxNum;
  191. // 最后一个数组列放吞卡计数
  192. char buf[1024] = {};
  193. assert(sizeof(SyncMaterialCountReq2) * (dwCardBoxNum +1)< 1024);
  194. SyncMaterialCountReq2 *pReq2 = (SyncMaterialCountReq2*)buf;
  195. for (int i = 0; i <= dwCardBoxNum; i++)
  196. {
  197. pReq2[i].bMaintain= arrMaintainFlag[i];
  198. if (arrMaintainFlag[i])
  199. {
  200. strncpy_s(pReq2[i].Maintainer, sizeof(pReq2[i].Maintainer), arrMaintainer[i], _TRUNCATE);
  201. pReq2[i].MaintainTime = arrMaintainTime[i];
  202. }
  203. strncpy_s(pReq2[i].CardBoxNo, sizeof(pReq2[i].CardBoxNo), arrCardBoxNo[i], _TRUNCATE);
  204. strncpy_s(pReq2[i].PsbCode, sizeof(pReq2[i].PsbCode), arrPsbCode[i], _TRUNCATE);
  205. strncpy_s(pReq2[i].PsbName, sizeof(pReq2[i].PsbName), arrPsbName[i], _TRUNCATE);
  206. pReq2[i].CardInit = arrCardInit[i];
  207. pReq2[i].CardRemains = arrCardRemains[i];
  208. pReq2[i].CardIssued = arrCardIssued[i];
  209. pReq2[i].CardMixed = arrCardMixed[i];
  210. pReq2[i].CardPercent = arrCardPercent[i];
  211. }
  212. auto pReqPkg = CreateNewPackage("SyncMC");
  213. pReqPkg->AddStruct("SyncMC1", false, false, (BYTE*)&req1, sizeof(req1));
  214. pReqPkg->AddStruct("SyncMC2", false, false, (BYTE*)pReq2, sizeof(SyncMaterialCountReq2)*(dwCardBoxNum+1), dwCardBoxNum+1);
  215. if (SendPackage(pReqPkg) == "")
  216. return Error_Unexpect;
  217. auto pReplyPkg = ReceivePackage(5);
  218. if (pReplyPkg == NULL || pReplyPkg->GetServiceCode() != "SyncMC")
  219. return Error_TimeOut;
  220. return HandleSyncMaterialCount(pReplyPkg);
  221. }
  222. void CMaterialMgrCnn::OnDisconnect()
  223. {
  224. Dbg("connection disconnected");
  225. }
  226. void CMaterialMgrCnn::OnPkgAnswer(const CSmartPointer<IPackage> &pRecvPkg)
  227. {
  228. string serviceCode = pRecvPkg->GetServiceCode();
  229. if (serviceCode == "ModInfo")
  230. {
  231. HandleModifyEnrollInfoRet(pRecvPkg);
  232. }
  233. else if (serviceCode == "AddCount")
  234. {
  235. HandleAddMaterialCounterRet(pRecvPkg);
  236. }
  237. else if (serviceCode == "TradeManage")
  238. {
  239. HandleAddTradeManageRet(pRecvPkg);
  240. }
  241. else if (serviceCode == "QryMC")
  242. {
  243. unsigned int count;
  244. CAutoArray<CSimpleStringA> arrDeviceNo, arrMateriel, CardGroove, CardBoxNo, PsbCode, PsbName, TerminalNo, Maintainer, MaintainTime, UpdateTime;
  245. CAutoArray<unsigned int> CardInit, CardRemains, CardIssued, CardMixed, CardPercent;
  246. HandleQueryMaterialInfoRet(pRecvPkg, count, arrDeviceNo, arrMateriel, CardGroove, CardBoxNo, PsbCode, PsbName, CardInit, CardRemains, CardIssued, CardMixed, CardPercent,
  247. TerminalNo, Maintainer, MaintainTime, UpdateTime);
  248. }
  249. else if (serviceCode == "GetCount")
  250. {
  251. unsigned int nCapacity(0), nCount(0);
  252. HandleGetMaterialCounterRet(pRecvPkg, nCapacity, nCount);
  253. }
  254. else if (serviceCode == "ResetMC")
  255. {
  256. HandleResetMaterialCounterRet(pRecvPkg);
  257. }
  258. else if (serviceCode == "UsrLogin")
  259. {
  260. HandleMaintainerLoginRet(pRecvPkg);
  261. }
  262. else if (serviceCode == "RegCard")
  263. {
  264. HandleRegistSwallowedCardRet(pRecvPkg);
  265. }
  266. else if (serviceCode == "SyncMC")
  267. {
  268. HandleSyncMaterialCount(pRecvPkg);
  269. }
  270. else
  271. {
  272. Dbg("unknown service code: %s", serviceCode.c_str());
  273. }
  274. }
  275. ErrorCodeEnum CMaterialMgrCnn::HandleModifyEnrollInfoRet(const CSmartPointer<IPackage> &pRecvPkg)
  276. {
  277. DWORD dwSysCode, dwUserCode;
  278. string strErrMsg;
  279. ErrorCodeEnum rc = Error_Succeed;
  280. if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg))
  281. {
  282. rc = (ErrorCodeEnum)dwSysCode;
  283. LogError(Severity_Middle, rc, dwUserCode,
  284. CSimpleStringA::Format("modify terminal enroll info fail, %s", strErrMsg.c_str()));
  285. return rc;
  286. }
  287. Dbg("modify terminal deployment info succeed");
  288. return Error_Succeed;
  289. }
  290. ErrorCodeEnum CMaterialMgrCnn::HandleAddTradeManageRet(const CSmartPointer<IPackage> &pRecvPkg)
  291. {
  292. DWORD dwSysCode, dwUserCode;
  293. string strErrMsg;
  294. ErrorCodeEnum rc = Error_Succeed;
  295. if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg))
  296. {
  297. rc = (ErrorCodeEnum)dwSysCode;
  298. LogError(Severity_Middle, rc, dwUserCode,
  299. CSimpleStringA::Format("add terminal trade manage fail, %s", strErrMsg.c_str()));
  300. return rc;
  301. }
  302. Dbg("add terminal trade manage succeed");
  303. return Error_Succeed;
  304. }
  305. ErrorCodeEnum CMaterialMgrCnn::HandleAddMaterialCounterRet(const CSmartPointer<IPackage> &pRecvPkg)
  306. {
  307. DWORD dwSysCode, dwUserCode;
  308. string strErrMsg;
  309. ErrorCodeEnum rc = Error_Succeed;
  310. if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg))
  311. {
  312. rc = (ErrorCodeEnum)dwSysCode;
  313. LogError(Severity_Middle, rc, dwUserCode,
  314. CSimpleStringA::Format("add terminal material counter fail, %s", strErrMsg.c_str()));
  315. return rc;
  316. }
  317. Dbg("add terminal material counter succeed");
  318. return Error_Succeed;
  319. }
  320. //查询物料信息
  321. ErrorCodeEnum CMaterialMgrCnn::HandleQueryMaterialInfoRet(const CSmartPointer<IPackage> &pRecvPkg, unsigned int &count,
  322. CAutoArray<CSimpleStringA> &arrDeviceNo, CAutoArray<CSimpleStringA> &arrMateriel, CAutoArray<CSimpleStringA> &CardGroove,
  323. CAutoArray<CSimpleStringA> &CardBoxNo, CAutoArray<CSimpleStringA> &PsbCode, CAutoArray<CSimpleStringA> &PsbName, CAutoArray<unsigned int> &CardInit,
  324. CAutoArray<unsigned int> &CardRemains, CAutoArray<unsigned int> &CardIssued, CAutoArray<unsigned int> &CardMixed, CAutoArray<unsigned int> &CardPercent,
  325. CAutoArray<CSimpleStringA> &TerminalNo, CAutoArray<CSimpleStringA> &Maintainer, CAutoArray<CSimpleStringA> &MaintainTime, CAutoArray<CSimpleStringA> &UpdateTime)
  326. {
  327. DWORD dwSysCode, dwUserCode;
  328. string strErrMsg;
  329. ErrorCodeEnum rc = Error_Succeed;
  330. if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg))
  331. {
  332. rc = (ErrorCodeEnum)dwSysCode;
  333. LogError(Severity_Middle, rc, dwUserCode, CSimpleStringA::Format("query material info fail, %s", strErrMsg.c_str()));
  334. return rc;
  335. }
  336. //Dbg("get material counter succeed");
  337. QueryMaterialInfoRet1 ret = {};
  338. int nRetSize = sizeof(ret);
  339. int nArrayNum = 0;
  340. if (!pRecvPkg->GetStructData("QryMCA1", (BYTE*)&ret, &nRetSize, &nArrayNum))
  341. {
  342. Dbg("get struct {QryMCA1} fail");
  343. return Error_Param;
  344. }
  345. else
  346. Dbg("get struct {QryMCA1} success, count:%d", ret.count);
  347. QueryMaterialInfoRetDate *ret2 = new QueryMaterialInfoRetDate[ret.count];
  348. ZeroMemory(ret2, sizeof(QueryMaterialInfoRetDate) * ret.count);
  349. nRetSize = sizeof(QueryMaterialInfoRetDate) * ret.count;
  350. nArrayNum = 0;
  351. if (!pRecvPkg->GetStructData("QryMCA2", (BYTE *)ret2, &nRetSize, &nArrayNum))
  352. {
  353. Dbg("get struct {QryMCA2} fail");
  354. delete []ret2;
  355. return Error_Param;
  356. }
  357. else
  358. {
  359. Dbg("get struct {QryMCA2} success, retSize:%d, arrayNum:%d", nRetSize, nArrayNum);
  360. }
  361. // 返回物料数
  362. count = ret.count;
  363. arrDeviceNo.Init(count + 1);arrMateriel.Init(count + 1);CardGroove.Init(count + 1);CardBoxNo.Init(count + 1);PsbCode.Init(count + 1);PsbName.Init(count + 1);CardInit.Init(count + 1);
  364. CardRemains.Init(count + 1);CardIssued.Init(count + 1); CardMixed.Init(count + 1);CardPercent.Init(count + 1);TerminalNo.Init(count + 1);Maintainer.Init(count + 1);
  365. MaintainTime.Init(count + 1);UpdateTime.Init(count + 1);
  366. for (int i = 0; i < count; i++)
  367. {
  368. arrDeviceNo[i] = ret2[i].DeviceNo;
  369. arrMateriel[i] = ret2[i].Materiel;
  370. CardGroove[i] = ret2[i].CardGroove;
  371. CardBoxNo[i] = ret2[i].CardBoxNo;
  372. char tempStr[200] = "";
  373. #if defined(_MSC_VER)
  374. strncpy_s(tempStr, ret2[i].PsbCode, sizeof(ret2[i].PsbCode));
  375. #else
  376. strcpy(tempStr, ret2[i].PsbCode);
  377. #endif //_MSC_VER
  378. tempStr[4] = '\0';
  379. PsbCode[i] = tempStr;
  380. PsbName[i] = ret2[i].PsbName;
  381. CardInit[i] = ret2[i].CardInit;
  382. CardRemains[i] = ret2[i].CardRemains;
  383. CardIssued[i] = ret2[i].CardIssued;
  384. CardMixed[i] = ret2[i].CardMixed;
  385. CardPercent[i] = ret2[i].CardPercent;
  386. TerminalNo[i] = ret2[i].TerminalNo;
  387. Maintainer[i] = ret2[i].Maintainer;
  388. MaintainTime[i] = ret2[i].MaintainTime;
  389. UpdateTime[i] = ret2[i].UpdateTime;
  390. }
  391. delete []ret2;
  392. return Error_Succeed;
  393. }
  394. ErrorCodeEnum CMaterialMgrCnn::HandleGetMaterialCounterRet(const CSmartPointer<IPackage> &pRecvPkg,
  395. unsigned int &nLastCapacity, unsigned int &nUsedCount)
  396. {
  397. DWORD dwSysCode, dwUserCode;
  398. string strErrMsg;
  399. ErrorCodeEnum rc = Error_Succeed;
  400. if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg))
  401. {
  402. rc = (ErrorCodeEnum)dwSysCode;
  403. LogError(Severity_Middle, rc, dwUserCode, CSimpleStringA::Format("get material counter fail, %s", strErrMsg.c_str()));
  404. return rc;
  405. }
  406. //Dbg("get material counter succeed");
  407. GetMaterialCounterRet ret = {};
  408. int nRetSize = sizeof(ret);
  409. int nArrayNum = 0;
  410. if (!pRecvPkg->GetStructData("GetMCA", (BYTE*)&ret, &nRetSize, &nArrayNum))
  411. {
  412. LogError(Severity_Middle, Error_Param, 0, "get struct {GetMCA} fail");
  413. return Error_Param;
  414. }
  415. // 返回物料数
  416. nLastCapacity = ret.Capacity;
  417. nUsedCount = ret.Counter;
  418. return Error_Succeed;
  419. }
  420. ErrorCodeEnum CMaterialMgrCnn::HandleResetMaterialCounterRet(const CSmartPointer<IPackage> &pRecvPkg)
  421. {
  422. DWORD dwSysCode, dwUserCode;
  423. string strErrMsg;
  424. ErrorCodeEnum rc = Error_Succeed;
  425. if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg))
  426. {
  427. rc = (ErrorCodeEnum)dwSysCode;
  428. LogError(Severity_Middle, rc, dwUserCode,
  429. CSimpleStringA::Format("reset material counter fail, %s", strErrMsg.c_str()));
  430. return rc;
  431. }
  432. Dbg("reset material counter succeed");
  433. return Error_Succeed;
  434. }
  435. ErrorCodeEnum CMaterialMgrCnn::HandleMaintainerLoginRet(const CSmartPointer<IPackage> &pRecvPkg)
  436. {
  437. DWORD dwSysCode, dwUserCode;
  438. string strErrMsg;
  439. ErrorCodeEnum rc = Error_Succeed;
  440. if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg))
  441. {
  442. rc = (ErrorCodeEnum)dwSysCode;
  443. LogError(Severity_Middle, rc, dwUserCode, CSimpleStringA::Format("maintainer login fail, %s", strErrMsg.c_str()));
  444. return rc;
  445. }
  446. Dbg("maintainer login succeed");
  447. return rc;
  448. }
  449. ErrorCodeEnum CMaterialMgrCnn::HandleRegistSwallowedCardRet(const CSmartPointer<IPackage> &pRecvPkg)
  450. {
  451. DWORD dwSysCode, dwUserCode;
  452. string strErrMsg;
  453. ErrorCodeEnum rc = Error_Succeed;
  454. if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg))
  455. {
  456. rc = (ErrorCodeEnum)dwSysCode;
  457. LogError(Severity_Middle, rc, dwUserCode, CSimpleStringA::Format("regist swallowed card fail, %s", strErrMsg.c_str()));
  458. }
  459. else
  460. Dbg("regist swallowed card succeed");
  461. return rc;
  462. }
  463. ErrorCodeEnum CMaterialMgrCnn::HandleSyncMaterialCount(const CSmartPointer<IPackage> &pRecvPkg)
  464. {
  465. DWORD dwSysCode, dwUserCode;
  466. string strErrMsg;
  467. ErrorCodeEnum rc = Error_Succeed;
  468. if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg))
  469. {
  470. rc = (ErrorCodeEnum)dwSysCode;
  471. LogError(Severity_Middle, rc, dwUserCode, CSimpleStringA::Format("sync material count fail, %s", strErrMsg.c_str()));
  472. }
  473. else
  474. Dbg("sync material count succeed");
  475. return rc;
  476. }