ServerPtr.cpp 122 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985
  1. #include "StdAfx.h"
  2. #include "ServerPtr.h"
  3. #include "OnlineUser.h"
  4. #include <time.h>
  5. #include "CritSection.h"
  6. #include "../hp-src/SendPackage.h"
  7. #include "../ODBCPOOL/UserInfo.h"
  8. #include "../ODBCPOOL/UserDetail.h"
  9. #include "../ODBCPOOL/StaffInfo.h"
  10. #include "../ODBCPOOL/ProductType.h"
  11. #include "../ODBCPOOL/ProductInfo.h"
  12. #include "../ODBCPOOL/SceneryInfo.h"
  13. #include "../ODBCPOOL/PackageType.h"
  14. #include "../ODBCPOOL/PackageInfo.h"
  15. #include "../ODBCPOOL/PackageItems.h"
  16. #include "../ODBCPOOL/CustomerFrom.h"
  17. #include "../ODBCPOOL/CustomerInfo.h"
  18. #include "../ODBCPOOL/OrderType.h"
  19. #include "../ODBCPOOL/OrderInfo.h"
  20. #include "../ODBCPOOL/OrderScenery.h"
  21. #include "../ODBCPOOL/OrderPackageItems.h"
  22. #include "../ODBCPOOL/SysConfig.h"
  23. #include "../ODBCPOOL/StudioLog.h"
  24. #include "../ODBCPOOL/StudioInfo.h"
  25. #include "../ODBCPOOL/DepartmentInfo.h"
  26. #include "../ODBCPOOL/PackageItemDetail.h"
  27. #include "../ODBCPOOL/PackageItemView.h"
  28. time_t g_systm;
  29. // 服务通信对象;
  30. CServerPtr* CServerPtr::m_spThis = NULL;
  31. CServerPtr::CServerPtr(void)
  32. {
  33. // 创建监听器对象
  34. m_pListener = ::Create_HP_TcpServerListener();
  35. // 创建 Socket 对象
  36. m_pServer = ::Create_HP_TcpPackServer(m_pListener);
  37. // 设置 Socket 监听器回调函数
  38. ::HP_Set_FN_Server_OnPrepareListen(m_pListener, OnPrepareListen);
  39. ::HP_Set_FN_Server_OnAccept(m_pListener, OnAccept);
  40. ::HP_Set_FN_Server_OnSend(m_pListener, OnSend);
  41. ::HP_Set_FN_Server_OnReceive(m_pListener, OnReceive);
  42. ::HP_Set_FN_Server_OnClose(m_pListener, OnClose);
  43. ::HP_Set_FN_Server_OnShutdown(m_pListener, OnShutdown);
  44. // 获取机器时间;
  45. time(&g_systm); // g_systm = time(NULL);
  46. }
  47. CServerPtr::~CServerPtr(void)
  48. {
  49. // 销毁 Socket 对象
  50. ::Destroy_HP_TcpPackServer(m_spThis->m_pServer);
  51. // 销毁监听器对象
  52. ::Destroy_HP_TcpServerListener(m_pListener);
  53. }
  54. void CServerPtr::Release()
  55. {
  56. if (m_spThis)
  57. delete m_spThis;
  58. m_spThis = NULL;
  59. }
  60. BOOL CServerPtr::Start()
  61. {
  62. if (m_spThis == NULL)
  63. return FALSE;
  64. ::HP_TcpPackServer_SetMaxPackSize(m_spThis->m_pServer, 0x3FFFFF);
  65. ::HP_TcpPackServer_SetPackHeaderFlag(m_spThis->m_pServer, 0x3FE);
  66. if (::HP_Server_Start(m_spThis->m_pServer, _T("0.0.0.0"), Global::g_dwSvrPort))
  67. {
  68. //::LogServerStart(ADDRESS, PORT);
  69. OutputDebugString(_T("服务器启动成功!\n"));
  70. //SetAppState(ST_STARTED);
  71. }
  72. else
  73. {
  74. //::LogServerStartFail(::HP_Server_GetLastError(m_spThis->m_pServer), ::HP_Server_GetLastErrorDesc(m_spThis->m_pServer));
  75. OutputDebugString(_T("服务器启动失败!\n"));
  76. //SetAppState(ST_STOPPED);
  77. }
  78. return TRUE;
  79. }
  80. BOOL CServerPtr::Stop()
  81. {
  82. if (::HP_Server_Stop(m_spThis->m_pServer))
  83. {
  84. OutputDebugString(_T("停止服务器成功!\n"));
  85. ::LogServerStop();
  86. //SetAppState(ST_STOPPED);
  87. }
  88. else
  89. {
  90. ASSERT(FALSE);
  91. }
  92. return TRUE;
  93. }
  94. BOOL CServerPtr::Disconnect(IN const DWORD& dwConnId)
  95. {
  96. if (::HP_Server_Disconnect(m_spThis->m_pServer, dwConnId, TRUE))
  97. {
  98. // 移除登录的用户信息;
  99. COnlineUser::GetInstance()->EraseOnlineUser(dwConnId);
  100. ::LogDisconnect(dwConnId);
  101. }
  102. else
  103. {
  104. ::LogDisconnectFail(dwConnId);
  105. }
  106. return TRUE;
  107. }
  108. En_HP_HandleResult CServerPtr::OnPrepareListen(SOCKET soListen)
  109. {
  110. TCHAR szAddress[40];
  111. int iAddressLen = sizeof(szAddress) / sizeof(TCHAR);
  112. USHORT usPort;
  113. ::HP_Server_GetListenAddress(m_spThis->m_pServer, szAddress, &iAddressLen, &usPort);
  114. ::PostOnPrepareListen(szAddress, usPort);
  115. return HR_OK;
  116. }
  117. En_HP_HandleResult CServerPtr::OnAccept(HP_CONNID dwConnID, SOCKET soClient)
  118. {
  119. BOOL bPass = TRUE;
  120. TCHAR szAddress[40];
  121. int iAddressLen = sizeof(szAddress) / sizeof(TCHAR);
  122. USHORT usPort;
  123. ::HP_Server_GetRemoteAddress(m_spThis->m_pServer, dwConnID, szAddress, &iAddressLen, &usPort);
  124. if (!m_spThis->m_strAddress.IsEmpty())
  125. {
  126. if (m_spThis->m_strAddress.CompareNoCase(szAddress) == 0)
  127. bPass = FALSE;
  128. }
  129. //::PostOnAccept(dwConnID, szAddress, usPort, bPass);
  130. TRACE(_T("新客户端连接:%d, %s, %d!\n"), dwConnID, szAddress, usPort);
  131. return bPass ? HR_OK : HR_ERROR;
  132. }
  133. En_HP_HandleResult CServerPtr::OnSend(HP_CONNID dwConnID, const BYTE* pData, int iLength)
  134. {
  135. TRACE(_T("发送数据给客户端:%d, %s, %d!\n"), dwConnID, pData, iLength);
  136. //::PostOnSend(dwConnID, pData, iLength);
  137. return HR_OK;
  138. }
  139. En_HP_HandleResult CServerPtr::OnReceive(HP_CONNID dwConnID, const BYTE* pData, int iLength)
  140. {
  141. TheProPackage thepackage;
  142. memcpy(&thepackage, pData, sizeof(TheProPackage));
  143. EnHandleResult nResult = HR_OK;
  144. BYTE *pSendData = NULL;
  145. DWORD dwSendLen = 0;
  146. switch (thepackage.nCmd)
  147. {
  148. // 客户端请求登录;
  149. case C2CCMD_REQ_LOGIN:
  150. {
  151. Req_Login(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  152. }
  153. break;
  154. // 客户端请求登出;
  155. case C2CCMD_REQ_LOGOUT:
  156. {
  157. Req_LogOut(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  158. }
  159. break;
  160. // 客户端请求添加部门;
  161. case C2CCMD_NEW_DEPARTMENT:
  162. {
  163. New_Department(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  164. }
  165. break;
  166. // 客户端请求删除部门;
  167. case C2CCMD_DEL_DEPARTMENT:
  168. {
  169. Del_Department(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  170. }
  171. break;
  172. // 客户端请求修改部门;
  173. case C2CCMD_MOD_DEPARTMENT:
  174. {
  175. // 暂未使用;
  176. Mod_Department(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  177. }
  178. break;
  179. // 客户端请求查询部门;
  180. case C2CCMD_QRY_DEPARTMENT:
  181. {
  182. nResult = Ask_Department(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  183. if (nResult != HR_IGNORE)
  184. return nResult;
  185. }
  186. break;
  187. // 客户端请求添加员工;
  188. case C2CCMD_NEW_STAFFINFO:
  189. {
  190. New_StaffInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  191. }
  192. break;
  193. // 客户端请求删除员工;
  194. case C2CCMD_DEL_STAFFINFO:
  195. {
  196. Del_StaffInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  197. }
  198. break;
  199. // 客户端请求修改员工;
  200. case C2CCMD_MOD_STAFFINFO:
  201. {
  202. Mod_StaffInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  203. }
  204. break;
  205. // 客户端请求查询员工;
  206. case C2CCMD_QRY_STAFFINFO:
  207. {
  208. nResult = Ask_StaffInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  209. if (nResult != HR_IGNORE)
  210. return nResult;
  211. }
  212. break;
  213. // 客户端请求添加用户;
  214. case C2CCMD_NEW_USERINFO:
  215. {
  216. New_UerInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  217. }
  218. break;
  219. // 客户端请求删除用户;
  220. case C2CCMD_DEL_USERINFO:
  221. {
  222. Del_UerInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  223. }
  224. break;
  225. // 客户端请求修改用户;
  226. case C2CCMD_MOD_USERINFO:
  227. {
  228. Mod_UerInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  229. }
  230. break;
  231. // 客户端请求查询用户;
  232. case C2CCMD_QRY_USERINFO:
  233. {
  234. nResult = Ask_UerInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  235. if (nResult != HR_IGNORE)
  236. return nResult;
  237. }
  238. break;
  239. // 客户端请求添加商品类型;
  240. case C2CCMD_NEW_PRODUCTTYPE:
  241. {
  242. New_ProductType(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  243. }
  244. break;
  245. // 客户端请求删除商品类型;
  246. case C2CCMD_DEL_PRODUCTTYPE:
  247. {
  248. Del_ProductType(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  249. }
  250. break;
  251. // 客户端请求修改商品类型;
  252. case C2CCMD_MOD_PRODUCTTYPE:
  253. {
  254. Mod_ProductType(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  255. }
  256. break;
  257. // 客户端请求查询商品类型;
  258. case C2CCMD_QRY_PRODUCTTYPE:
  259. {
  260. nResult = Ask_ProductType(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  261. if (nResult != HR_IGNORE)
  262. return nResult;
  263. }
  264. break;
  265. // 客户端请求添加商品信息;
  266. case C2CCMD_NEW_PRODUCT:
  267. {
  268. New_ProductInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  269. }
  270. break;
  271. // 客户端请求删除商品信息;
  272. case C2CCMD_DEL_PRODUCT:
  273. {
  274. Del_ProductInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  275. }
  276. break;
  277. // 客户端请求修改商品信息;
  278. case C2CCMD_MOD_PRODUCT:
  279. {
  280. Mod_ProductInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  281. }
  282. break;
  283. // 客户端请求查询商品信息;
  284. case C2CCMD_QRY_PRODUCT:
  285. {
  286. nResult = Ask_ProductInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  287. if (nResult != HR_IGNORE)
  288. return nResult;
  289. }
  290. break;
  291. // 客户端请求添加景点;
  292. case C2CCMD_NEW_SCENERY:
  293. {
  294. New_Scenery(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  295. }
  296. break;
  297. // 客户端请求删除景点;
  298. case C2CCMD_DEL_SCENERY:
  299. {
  300. Del_Scenery(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  301. }
  302. break;
  303. // 客户端请求修改景点;
  304. case C2CCMD_MOD_SCENERY:
  305. {
  306. Mod_Scenery(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  307. }
  308. break;
  309. // 客户端请求查询景点;
  310. case C2CCMD_QRY_SCENERY:
  311. {
  312. nResult = Ask_Scenery(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  313. if (nResult != HR_IGNORE)
  314. return nResult;
  315. }
  316. break;
  317. // 客户端请求添加套餐类型信息;
  318. case C2CCMD_NEW_PACKAGETYPE:
  319. {
  320. New_PackageType(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  321. }
  322. break;
  323. // 客户端请求删除套餐类型信息;
  324. case C2CCMD_DEL_PACKAGETYPE:
  325. {
  326. Del_PackageType(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  327. }
  328. break;
  329. // 客户端请求修改套餐类型信息;
  330. case C2CCMD_MOD_PACKAGETYPE:
  331. {
  332. Mod_PackageType(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  333. }
  334. break;
  335. // 客户端请求查询套餐类型信息;
  336. case C2CCMD_QRY_PACKAGETYPE:
  337. {
  338. nResult = Ask_PackageType(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  339. if (nResult != HR_IGNORE)
  340. return nResult;
  341. }
  342. break;
  343. // 客户端请求添加套餐信息;
  344. case C2CCMD_NEW_PACKAGEINFO:
  345. {
  346. New_PackageInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  347. }
  348. break;
  349. // 客户端请求删除套餐信息;
  350. case C2CCMD_DEL_PACKAGEINFO:
  351. {
  352. Del_PackageInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  353. }
  354. break;
  355. // 客户端请求修改套餐信息;
  356. case C2CCMD_MOD_PACKAGEINFO:
  357. {
  358. Mod_PackageInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  359. }
  360. break;
  361. // 客户端请求查询套餐信息;
  362. case C2CCMD_QRY_PACKAGEINFO:
  363. {
  364. nResult = Ask_PackageInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  365. if (nResult != HR_IGNORE)
  366. return nResult;
  367. }
  368. break;
  369. // 客户端请求添加套餐类型信息;
  370. case C2CCMD_NEW_PACKAGEITEM:
  371. {
  372. New_PackageItem(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  373. }
  374. break;
  375. case C2CCMD_NEW_PACKAGEITEM2:
  376. {
  377. New_PackageItem2(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  378. }
  379. break;
  380. // 客户端请求添加套餐类型信息;
  381. case C2CCMD_DEL_PACKAGEITEM:
  382. {
  383. Del_PackageItem(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  384. }
  385. break;
  386. // 客户端请求添加套餐类型信息;
  387. case C2CCMD_MOD_PACKAGEITEM:
  388. {
  389. Mod_PackageItem(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  390. }
  391. break;
  392. // 客户端请求添加套餐类型信息;
  393. case C2CCMD_QRY_PACKAGEITEM:
  394. {
  395. nResult = Ask_PackageItem(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  396. if (nResult != HR_IGNORE)
  397. return nResult;
  398. }
  399. break;
  400. // 客户端请求查询套系项详情;
  401. case C2CCMD_QRY_PACKAGEITEM_DETAIL:
  402. {
  403. nResult = Ask_PackageItemDetail(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  404. if (nResult != HR_IGNORE)
  405. return nResult;
  406. }
  407. break;
  408. // 客户端请求查询套系项信息;
  409. case C2CCMD_QRY_PACKAGEITEM_VIEW:
  410. {
  411. nResult = Ask_PackageItemView(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  412. if (nResult != HR_IGNORE)
  413. return nResult;
  414. }
  415. break;
  416. // 客户端请求添加顾客来源信息;
  417. case C2CCMD_NEW_CUSTOMERFROM:
  418. {
  419. New_CustomerFrom(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  420. }
  421. break;
  422. // 客户端请求删除顾客来源信息;
  423. case C2CCMD_DEL_CUSTOMERFROM:
  424. {
  425. Del_CustomerFrom(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  426. }
  427. break;
  428. // 客户端请求修改顾客来源信息;
  429. case C2CCMD_MOD_CUSTOMERFROM:
  430. {
  431. Mod_CustomerFrom(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  432. }
  433. break;
  434. // 客户端请求查询顾客来源信息;
  435. case C2CCMD_QRY_CUSTOMERFROM:
  436. {
  437. nResult = Ask_CustomerFrom(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  438. if (nResult != HR_IGNORE)
  439. return nResult;
  440. }
  441. break;
  442. // 客户端请求添加顾客信息;
  443. case C2CCMD_NEW_CUSTOMERINFO:
  444. {
  445. New_CustomerInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  446. }
  447. break;
  448. // 客户端请求删除顾客信息;
  449. case C2CCMD_DEL_CUSTOMERINFO:
  450. {
  451. Del_CustomerInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  452. }
  453. break;
  454. // 客户端请求修改顾客信息;
  455. case C2CCMD_MOD_CUSTOMERINFO:
  456. {
  457. Mod_CustomerInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  458. }
  459. break;
  460. // 客户端请求查询顾客信息;
  461. case C2CCMD_QRY_CUSTOMERINFO:
  462. {
  463. nResult = Ask_CustomerInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  464. if (nResult != HR_IGNORE)
  465. return nResult;
  466. }
  467. break;
  468. // 客户端请求添加订单类型;
  469. case C2CCMD_NEW_ORDERTYPE:
  470. {
  471. New_OrderType(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  472. }
  473. break;
  474. // 客户端请求删除订单类型;
  475. case C2CCMD_DEL_ORDERTYPE:
  476. {
  477. Del_OrderType(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  478. }
  479. break;
  480. // 客户端请求修改订单类型;
  481. case C2CCMD_MOD_ORDERTYPE:
  482. {
  483. Mod_OrderType(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  484. }
  485. break;
  486. // 客户端请求查询订单类型;
  487. case C2CCMD_QRY_ORDERTYPE:
  488. {
  489. nResult = Ask_OrderType(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  490. if (nResult != HR_IGNORE)
  491. return nResult;
  492. }
  493. break;
  494. // 客户端请求开单;
  495. case C2CCMD_NEW_ORDERINFO:
  496. {
  497. New_OrderInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  498. }
  499. break;
  500. // 客户端请求删除订单;
  501. case C2CCMD_DEL_ORDERINFO:
  502. {
  503. Del_OrderInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  504. }
  505. break;
  506. // 客户端请求修改订单;
  507. case C2CCMD_MOD_ORDERINFO:
  508. {
  509. Mod_OrderInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  510. }
  511. break;
  512. case C2CCMD_MOD_ORDERINFO2:
  513. {
  514. Mod_OrderInfo2(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  515. }
  516. break;
  517. // 客户端请求查询订单;
  518. case C2CCMD_QRY_ORDERINFO:
  519. {
  520. nResult = Ask_OrderInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  521. if (nResult != HR_IGNORE)
  522. return nResult;
  523. }
  524. break;
  525. // 客户端请求添加订单套餐项;
  526. case C2CCMD_NEW_ORDERPACKAGEITEM:
  527. {
  528. New_OrderPackageItem(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  529. }
  530. break;
  531. case C2CCMD_NEW_ORDERPACKAGEITEM2:
  532. {
  533. New_OrderPackageItem2(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  534. }
  535. break;
  536. // 客户端请求删除订单套餐项;
  537. case C2CCMD_DEL_ORDERPACKAGEITEM:
  538. {
  539. Del_OrderPackageItem(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  540. }
  541. break;
  542. // 客户端请求修改订单套餐项;
  543. case C2CCMD_MOD_ORDERPACKAGEITEM:
  544. {
  545. Mod_OrderPackageItem(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  546. }
  547. break;
  548. // 客户端请求查询订单套餐项;
  549. case C2CCMD_QRY_ORDERPACKAGEITEM:
  550. {
  551. nResult = Ask_OrderPackageItem(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  552. if (nResult != HR_IGNORE)
  553. return nResult;
  554. }
  555. break;
  556. // 客户端请求修改影楼信息;
  557. case C2CCMD_NEW_STUDIOINFO:
  558. {
  559. New_StudioInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  560. }
  561. break;
  562. // 客户端请求修改影楼信息;
  563. case C2CCMD_DEL_STUDIOINFO:
  564. {
  565. Del_StudioInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  566. }
  567. break;
  568. // 客户端请求修改影楼信息;
  569. case C2CCMD_MOD_STUDIOINFO:
  570. {
  571. Mod_StudioInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  572. }
  573. break;
  574. // 客户端请求修改影楼信息;
  575. case C2CCMD_QRY_STUDIOINFO:
  576. {
  577. nResult = Ask_StudioInfo(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  578. if (nResult != HR_IGNORE)
  579. return nResult;
  580. }
  581. break;
  582. // 添加订单景点信息;
  583. case C2CCMD_NEW_ORDERSCENERY:
  584. {
  585. New_OrderScenery(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  586. }
  587. break;
  588. // 删除订单景点信息;
  589. case C2CCMD_DEL_ORDERSCENERY:
  590. {
  591. Del_OrderScenery(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  592. }
  593. break;
  594. case C2CCMD_DEL_ORDERSCENERY2:
  595. {
  596. Del_OrderScenery2(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  597. }
  598. break;
  599. // 修改订单景点信息;
  600. case C2CCMD_MOD_ORDERSCENERY:
  601. {
  602. Mod_OrderScenery(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  603. }
  604. break;
  605. // 查询订单景点信息;
  606. case C2CCMD_QRY_ORDERSCENERY:
  607. {
  608. nResult = Ask_OrderScenery(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  609. if (nResult != HR_IGNORE)
  610. return nResult;
  611. }
  612. break;
  613. // 获取订单序号;
  614. case C2CCMD_GET_ORDER_SERIALNUMBER:
  615. {
  616. Ask_OrderSerialNum(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  617. }
  618. break;
  619. // 获取打印序号;
  620. case C2CCMD_GET_PRINT_SERIALNUMBER:
  621. {
  622. Ask_PrintSerialNum(dwConnID, pData, iLength, thepackage, pSendData, dwSendLen);
  623. }
  624. break;
  625. //////////////////////////////////////////////////////////////////////////
  626. default:
  627. break;
  628. }
  629. BOOL bSendResult = ::HP_Server_Send(m_spThis->m_pServer, dwConnID, pSendData, dwSendLen);
  630. if (pSendData)
  631. delete[]pSendData;
  632. return bSendResult ? HR_OK : HR_ERROR;
  633. }
  634. En_HP_HandleResult CServerPtr::OnClose(HP_CONNID dwConnID, En_HP_SocketOperation enOperation, int iErrorCode)
  635. {
  636. // 移除登录的用户信息;
  637. COnlineUser::GetInstance()->EraseOnlineUser(dwConnID);
  638. iErrorCode == SE_OK ? ::PostOnClose(dwConnID) : ::PostOnError(dwConnID, enOperation, iErrorCode);
  639. return HR_OK;
  640. }
  641. En_HP_HandleResult CServerPtr::OnShutdown()
  642. {
  643. ::PostOnShutdown();
  644. return HR_OK;
  645. }
  646. //////////////////////////////////////////////////////////////////////////
  647. void CServerPtr::Req_Login(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  648. {
  649. if (COnlineUser::GetInstance()->IsAccountExist(thepackage.szStudioId, thepackage.szAccount) == -1)
  650. {// 用户没在线;
  651. // 查询数据库是否存在用户;
  652. INT nRet = USER_NULL;
  653. CUserDetail tagUserDetail;
  654. nRet = g_pODBCPool->QueryUserDetail(thepackage.szStudioId, thepackage.szAccount, thepackage.szPassword, &tagUserDetail);
  655. if (nRet == USER_LOGIN)
  656. {
  657. CMemFile mf;
  658. CArchive ar(&mf, CArchive::store);
  659. tagUserDetail.Serialize(ar);
  660. ar.Close();
  661. DWORD dwArchive = mf.GetLength();
  662. dwSendLen = sizeof(TheProPackage) - 2 + dwArchive;
  663. pSendData = new BYTE[dwSendLen];
  664. TheProPackage *pPackage = (TheProPackage*)pSendData;
  665. pPackage->flag = PACKAGE_ONESELF;
  666. pPackage->nCmd = thepackage.nCmd;
  667. pPackage->nDataLen = dwArchive;
  668. pPackage->dwReserve = USER_LOGIN;
  669. BYTE *pMf = mf.Detach();
  670. memcpy(pPackage->byBody, pMf, dwArchive);
  671. if (pMf)
  672. delete pMf;
  673. // 记录在线用户;
  674. COnlineUser::GetInstance()->InsertOnlineUser(dwConnID, thepackage.szStudioId, thepackage.szAccount);
  675. }
  676. else
  677. {
  678. dwSendLen = sizeof(TheProPackage);
  679. pSendData = new BYTE[dwSendLen];
  680. TheProPackage *pPackage = (TheProPackage*)pSendData;
  681. pPackage->flag = PACKAGE_ONESELF;
  682. pPackage->nCmd = C2CCMD_REQ_LOGIN;
  683. pPackage->nDataLen = 0;
  684. pPackage->dwReserve = nRet;
  685. OutputDebugString(_T("用户密码不对\n"));
  686. }
  687. }
  688. else
  689. {
  690. dwSendLen = sizeof(TheProPackage);
  691. pSendData = new BYTE[dwSendLen];
  692. TheProPackage *pPackage = (TheProPackage*)pSendData;
  693. pPackage->flag = PACKAGE_ONESELF;
  694. pPackage->nCmd = C2CCMD_REQ_LOGIN;
  695. pPackage->nDataLen = 0;
  696. pPackage->dwReserve = USER_HAVE_LOGIN;
  697. OutputDebugString(_T("用户已登录\n"));
  698. }
  699. }
  700. void CServerPtr::Req_LogOut(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  701. {
  702. }
  703. void CServerPtr::New_Department(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  704. {
  705. CMemFile mf;
  706. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  707. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  708. CArchive ar(&mf, CArchive::load);
  709. CAddDepartment tagAddDepartment;
  710. tagAddDepartment.Serialize(ar);
  711. ar.Close();
  712. mf.Detach();
  713. CString strSQL;
  714. strSQL.Format(_T("INSERT INTO [DepartmentInfo](")
  715. _T("[StudioID], [DepartmentName], [DepartmentNote]) values ('%s', '%s', '%s')"),
  716. thepackage.szStudioId, tagAddDepartment.m_strDepartmentName, tagAddDepartment.m_strDepartmentNote);
  717. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  718. // 返回信息;
  719. dwSendLen = sizeof(TheProPackage);
  720. pSendData = new BYTE[dwSendLen];
  721. TheProPackage *pPackage = (TheProPackage*)pSendData;
  722. pPackage->flag = PACKAGE_ONESELF;
  723. pPackage->nCmd = thepackage.nCmd;
  724. pPackage->nDataLen = 0;
  725. pPackage->dwReserve = bRet;
  726. }
  727. void CServerPtr::Del_Department(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  728. {
  729. CMemFile mf;
  730. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  731. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  732. CArchive ar(&mf, CArchive::load);
  733. CAddDepartment tagAddDepartment;
  734. tagAddDepartment.Serialize(ar);
  735. ar.Close();
  736. mf.Detach();
  737. CString strSQL;
  738. strSQL.Format(_T("DELETE FROM [DepartmentInfo] WHERE [StudioID] = '%s' and [DepartmentName] = '%s' "), thepackage.szStudioId, tagAddDepartment.m_strDepartmentName);
  739. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  740. // 返回信息;
  741. dwSendLen = sizeof(TheProPackage);
  742. pSendData = new BYTE[dwSendLen];
  743. TheProPackage *pPackage = (TheProPackage*)pSendData;
  744. pPackage->flag = PACKAGE_ONESELF;
  745. pPackage->nCmd = thepackage.nCmd;
  746. pPackage->nDataLen = 0;
  747. pPackage->dwReserve = bRet;
  748. }
  749. void CServerPtr::Mod_Department(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  750. {
  751. }
  752. EnHandleResult CServerPtr::Ask_Department(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  753. {
  754. CObList tagDpmList;
  755. INT nRet = g_pODBCPool->QueryDepartmentInfo(thepackage.szStudioId, &tagDpmList);
  756. CMemFile mf;
  757. CArchive ar(&mf, CArchive::store);
  758. tagDpmList.Serialize(ar);
  759. ar.Close();
  760. // 删除列表对象;
  761. POSITION pos = tagDpmList.GetHeadPosition();
  762. while (pos)
  763. {
  764. CDepartmentInfoObj *pdpmObj = (CDepartmentInfoObj*)tagDpmList.GetNext(pos);
  765. if (pdpmObj)
  766. delete pdpmObj;
  767. }
  768. tagDpmList.RemoveAll();
  769. BOOL bResult = FALSE;
  770. __int64 nArchive = mf.GetLength();
  771. if ((nArchive + sizeof(TheProPackage) - 2) > 0x3FFFFF)
  772. {
  773. __int64 nSubLen = nArchive;
  774. BYTE *pMf = mf.Detach();
  775. while (nSubLen > 0)
  776. {
  777. if (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2 > 0)
  778. dwSendLen = 0x3FFFFF;
  779. else
  780. dwSendLen = nSubLen + sizeof(TheProPackage) - 2;
  781. pSendData = new BYTE[dwSendLen];
  782. TheProPackage *pPackage = (TheProPackage*)pSendData;
  783. pPackage->flag = PACKAGE_MULTIPLE;
  784. pPackage->nCmd = thepackage.nCmd;
  785. pPackage->nDataLen = nArchive;
  786. pPackage->nSubDataLen = (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2) > 0 ? (0x3FFFFF - sizeof(TheProPackage) + 2) : nSubLen;
  787. pPackage->dwReserve = nRet;
  788. memcpy(pPackage->byBody, pMf + nArchive - nSubLen, pPackage->nSubDataLen);
  789. nSubLen -= (0x3FFFFF - sizeof(TheProPackage) + 2);
  790. bResult = ::HP_Server_Send(m_spThis->m_pServer, dwConnID, pSendData, dwSendLen);
  791. if (pSendData)
  792. delete[]pSendData;
  793. pSendData = NULL;
  794. if (!bResult)
  795. {
  796. if (pMf)
  797. delete pMf;
  798. return HR_ERROR;
  799. }
  800. }
  801. if (pMf)
  802. delete pMf;
  803. return HR_OK;
  804. }
  805. else
  806. {// 单包;
  807. dwSendLen = sizeof(TheProPackage) - 2 + nArchive;
  808. pSendData = new BYTE[dwSendLen];
  809. TheProPackage *pPackage = (TheProPackage*)pSendData;
  810. pPackage->flag = PACKAGE_ONESELF;
  811. pPackage->nCmd = thepackage.nCmd;
  812. pPackage->nDataLen = nArchive;
  813. pPackage->dwReserve = nRet;
  814. BYTE *pMf = mf.Detach();
  815. memcpy(pPackage->byBody, pMf, nArchive);
  816. if (pMf)
  817. delete pMf;
  818. }
  819. return HR_IGNORE;
  820. }
  821. // 员工;
  822. void CServerPtr::New_StaffInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  823. {
  824. CMemFile mf;
  825. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  826. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  827. CArchive ar(&mf, CArchive::load);
  828. CStaffInfoObj tagStaffInfo;
  829. tagStaffInfo.Serialize(ar);
  830. ar.Close();
  831. mf.Detach();
  832. CString strSQL = _T("");
  833. strSQL.Format(_T("INSERT INTO [StaffInfo](")
  834. _T("[StudioID],")
  835. _T("[StaffSN],")
  836. _T("[StaffName],")
  837. _T("[StaffGender],")
  838. _T("[StaffAddress],")
  839. _T("[StaffOffice],")
  840. _T("[StaffBirthday],")
  841. _T("[StaffPhone],")
  842. _T("[StaffNote]) ")
  843. _T("VALUES ('%s','%s', '%s', %d, '%s','%s','%s','%s','%s')"),
  844. thepackage.szStudioId,
  845. tagStaffInfo.m_StaffSN,
  846. tagStaffInfo.m_StaffName,
  847. tagStaffInfo.m_StaffGender,
  848. tagStaffInfo.m_StaffAddress,
  849. tagStaffInfo.m_StaffOffice,
  850. tagStaffInfo.m_StaffBirthday,
  851. tagStaffInfo.m_StaffPhone,
  852. tagStaffInfo.m_StaffNote);
  853. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  854. // 返回信息;
  855. dwSendLen = sizeof(TheProPackage);
  856. pSendData = new BYTE[dwSendLen];
  857. TheProPackage *pPackage = (TheProPackage*)pSendData;
  858. pPackage->flag = PACKAGE_ONESELF;
  859. pPackage->nCmd = thepackage.nCmd;
  860. pPackage->nDataLen = 0;
  861. pPackage->dwReserve = bRet;
  862. }
  863. void CServerPtr::Del_StaffInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  864. {
  865. CString strSQL = _T("");
  866. strSQL.Format(_T("DELETE FROM [StaffInfo] WHERE [StudioID] = '%s' and [AutoID] = %d"), thepackage.szStudioId, thepackage.dwReserve);
  867. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  868. // 返回信息;
  869. dwSendLen = sizeof(TheProPackage);
  870. pSendData = new BYTE[dwSendLen];
  871. TheProPackage *pPackage = (TheProPackage*)pSendData;
  872. pPackage->flag = PACKAGE_ONESELF;
  873. pPackage->nCmd = thepackage.nCmd;
  874. pPackage->nDataLen = 0;
  875. pPackage->dwReserve = bRet;
  876. }
  877. void CServerPtr::Mod_StaffInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  878. {
  879. CMemFile mf;
  880. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  881. CArchive ar(&mf, CArchive::load);
  882. CStaffInfoObj tagStaffObj;
  883. tagStaffObj.Serialize(ar);
  884. ar.Close();
  885. mf.Detach();
  886. CString strSQL = _T("");
  887. strSQL.Format(_T("UPDATE [StaffInfo] SET ")
  888. _T("[StaffName] = '%s',")
  889. _T("[StaffGender] = %d, ")
  890. _T("[StaffAddress] = '%s',")
  891. _T("[StaffOffice] = '%s',")
  892. _T("[StaffBirthday] = '%s',")
  893. _T("[StaffPhone] = '%s',")
  894. _T("[StaffStatus] = %d,")
  895. _T("[StaffNote] = '%s' ")
  896. _T("WHERE [StudioID] = '%s' AND [AutoID] = %d"),
  897. tagStaffObj.m_StaffName,
  898. tagStaffObj.m_StaffGender,
  899. tagStaffObj.m_StaffAddress,
  900. tagStaffObj.m_StaffOffice,
  901. tagStaffObj.m_StaffBirthday,
  902. tagStaffObj.m_StaffPhone,
  903. tagStaffObj.m_StaffStatus,
  904. tagStaffObj.m_StaffNote,
  905. thepackage.szStudioId, tagStaffObj.m_AutoID);
  906. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  907. // 返回信息;
  908. dwSendLen = sizeof(TheProPackage);
  909. pSendData = new BYTE[dwSendLen];
  910. TheProPackage *pPackage = (TheProPackage*)pSendData;
  911. pPackage->flag = PACKAGE_ONESELF;
  912. pPackage->nCmd = thepackage.nCmd;;
  913. pPackage->nDataLen = 0;
  914. pPackage->dwReserve = bRet;
  915. }
  916. EnHandleResult CServerPtr::Ask_StaffInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  917. {
  918. CObList tagStaffArray;
  919. INT nCount = g_pODBCPool->QueryStaffInfo(thepackage.szStudioId, &tagStaffArray);
  920. CMemFile mf;
  921. CArchive ar(&mf, CArchive::store);
  922. tagStaffArray.Serialize(ar);
  923. ar.Close();
  924. // 删除列表对象;
  925. POSITION pos = tagStaffArray.GetHeadPosition();
  926. while (pos)
  927. {
  928. CStaffInfoObj *pStaffObj = (CStaffInfoObj*)tagStaffArray.GetNext(pos);
  929. if (pStaffObj)
  930. delete pStaffObj;
  931. }
  932. tagStaffArray.RemoveAll();
  933. BOOL bResult = FALSE;
  934. __int64 nArchive = mf.GetLength();
  935. if ((nArchive + sizeof(TheProPackage) - 2) > 0x3FFFFF)
  936. {
  937. __int64 nSubLen = nArchive;
  938. BYTE *pMf = mf.Detach();
  939. while (nSubLen > 0)
  940. {
  941. if (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2 > 0)
  942. dwSendLen = 0x3FFFFF;
  943. else
  944. dwSendLen = nSubLen + sizeof(TheProPackage) - 2;
  945. pSendData = new BYTE[dwSendLen];
  946. TheProPackage *pPackage = (TheProPackage*)pSendData;
  947. pPackage->flag = PACKAGE_MULTIPLE;
  948. pPackage->nCmd = thepackage.nCmd;
  949. pPackage->nDataLen = nArchive;
  950. pPackage->nSubDataLen = (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2) > 0 ? (0x3FFFFF - sizeof(TheProPackage) + 2) : nSubLen;
  951. pPackage->dwReserve = nCount;
  952. memcpy(pPackage->byBody, pMf + nArchive - nSubLen, pPackage->nSubDataLen);
  953. nSubLen -= (0x3FFFFF - sizeof(TheProPackage) + 2);
  954. bResult = ::HP_Server_Send(m_spThis->m_pServer, dwConnID, pSendData, dwSendLen);
  955. if (pSendData)
  956. delete[]pSendData;
  957. pSendData = NULL;
  958. if (!bResult)
  959. {
  960. if (pMf)
  961. delete pMf;
  962. return HR_ERROR;
  963. }
  964. }
  965. if (pMf)
  966. delete pMf;
  967. return HR_OK;
  968. }
  969. else
  970. {// 单包;
  971. dwSendLen = sizeof(TheProPackage) - 2 + nArchive;
  972. pSendData = new BYTE[dwSendLen];
  973. TheProPackage *pPackage = (TheProPackage*)pSendData;
  974. pPackage->flag = PACKAGE_ONESELF;
  975. pPackage->nCmd = thepackage.nCmd;
  976. pPackage->nDataLen = nArchive;
  977. pPackage->dwReserve = nCount;
  978. BYTE *pMf = mf.Detach();
  979. memcpy(pPackage->byBody, pMf, nArchive);
  980. if (pMf)
  981. delete pMf;
  982. }
  983. return HR_IGNORE;
  984. }
  985. // 用户;
  986. void CServerPtr::New_UerInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  987. {
  988. CMemFile mf;
  989. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  990. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  991. CArchive ar(&mf, CArchive::load);
  992. CUserInfoObj tagUserInfoObj;
  993. tagUserInfoObj.Serialize(ar);
  994. ar.Close();
  995. mf.Detach();
  996. CString strSQL = _T("");
  997. strSQL.Format(_T("INSERT INTO [UserInfo] (")
  998. _T("[StudioID],[StaffSN],[UserAccount],[UserPassword],[UserNickName],[UserLevel],[UserRights],[UserEnable])")
  999. _T(" VALUES ('%s','%s','%s','%s','%s',%d,'%s',%d)"),
  1000. thepackage.szStudioId,
  1001. tagUserInfoObj.m_StaffSN,
  1002. tagUserInfoObj.m_UserAccount,
  1003. tagUserInfoObj.m_UserPassword,
  1004. tagUserInfoObj.m_UserNickName,
  1005. tagUserInfoObj.m_UserLevel,
  1006. tagUserInfoObj.m_UserRights, tagUserInfoObj.m_UserEnable);
  1007. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  1008. // 返回信息;
  1009. dwSendLen = sizeof(TheProPackage);
  1010. pSendData = new BYTE[dwSendLen];
  1011. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1012. pPackage->flag = PACKAGE_ONESELF;
  1013. pPackage->nCmd = thepackage.nCmd;
  1014. pPackage->nDataLen = 0;
  1015. pPackage->dwReserve = bRet;
  1016. }
  1017. void CServerPtr::Del_UerInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1018. {
  1019. INT nlen = nReceiveLength - sizeof(TheProPackage) + 2;
  1020. TCHAR szUserAccount[17] = { 0 }; // 注:长度16是数据库中设定的长度;
  1021. memcpy(szUserAccount, pReceiveData + sizeof(TheProPackage) - 2, nlen);
  1022. CString strSQL;
  1023. strSQL.Format(_T("DELETE FROM [UserInfo] WHERE [StudioID] = '%s' and [UserAccount] = '%s' "), thepackage.szStudioId, szUserAccount);
  1024. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  1025. // 返回信息;
  1026. dwSendLen = sizeof(TheProPackage);
  1027. pSendData = new BYTE[dwSendLen];
  1028. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1029. pPackage->flag = PACKAGE_ONESELF;
  1030. pPackage->nCmd = thepackage.nCmd;
  1031. pPackage->nDataLen = 0;
  1032. pPackage->dwReserve = bRet;
  1033. }
  1034. void CServerPtr::Mod_UerInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1035. {
  1036. CMemFile mf;
  1037. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  1038. CArchive ar(&mf, CArchive::load);
  1039. CUserInfoObj tagUserInfoObj;
  1040. tagUserInfoObj.Serialize(ar);
  1041. ar.Close();
  1042. mf.Detach();
  1043. CString strSQL = _T("");
  1044. strSQL.Format(_T("UPDATE [UserInfo] SET ")
  1045. _T("[StaffSN] = '%s',")
  1046. _T("[UserPassword] = '%s',")
  1047. _T("[UserNickName] = '%s',")
  1048. _T("[UserLevel] = %d,")
  1049. _T("[UserRights] = '%s',")
  1050. _T("[UserEnable] = %d ")
  1051. _T("WHERE [StudioID] = '%s' AND [UserAccount] = '%s'"),
  1052. tagUserInfoObj.m_StaffSN,
  1053. tagUserInfoObj.m_UserPassword,
  1054. tagUserInfoObj.m_UserNickName,
  1055. tagUserInfoObj.m_UserLevel,
  1056. tagUserInfoObj.m_UserRights,
  1057. tagUserInfoObj.m_UserEnable,
  1058. thepackage.szStudioId, tagUserInfoObj.m_UserAccount);
  1059. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  1060. // 返回信息;
  1061. dwSendLen = sizeof(TheProPackage);
  1062. pSendData = new BYTE[dwSendLen];
  1063. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1064. pPackage->flag = PACKAGE_ONESELF;
  1065. pPackage->nCmd = thepackage.nCmd;;
  1066. pPackage->nDataLen = 0;
  1067. pPackage->dwReserve = bRet;
  1068. }
  1069. EnHandleResult CServerPtr::Ask_UerInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1070. {
  1071. CObList tagUserInfoArray;
  1072. INT nCount = g_pODBCPool->QueryUserInfo(thepackage.szStudioId, &tagUserInfoArray);
  1073. CMemFile mf;
  1074. CArchive ar(&mf, CArchive::store);
  1075. tagUserInfoArray.Serialize(ar);
  1076. ar.Close();
  1077. // 删除列表对象;
  1078. POSITION pos = tagUserInfoArray.GetHeadPosition();
  1079. while (pos)
  1080. {
  1081. CUserInfoObj *pUserObj = (CUserInfoObj*)tagUserInfoArray.GetNext(pos);
  1082. if (pUserObj)
  1083. delete pUserObj;
  1084. }
  1085. tagUserInfoArray.RemoveAll();
  1086. BOOL bResult = FALSE;
  1087. __int64 nArchive = mf.GetLength();
  1088. if ((nArchive + sizeof(TheProPackage) - 2) > 0x3FFFFF)
  1089. {
  1090. __int64 nSubLen = nArchive;
  1091. BYTE *pMf = mf.Detach();
  1092. while (nSubLen > 0)
  1093. {
  1094. if (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2 > 0)
  1095. dwSendLen = 0x3FFFFF;
  1096. else
  1097. dwSendLen = nSubLen + sizeof(TheProPackage) - 2;
  1098. pSendData = new BYTE[dwSendLen];
  1099. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1100. pPackage->flag = PACKAGE_MULTIPLE;
  1101. pPackage->nCmd = thepackage.nCmd;
  1102. pPackage->nDataLen = nArchive;
  1103. pPackage->nSubDataLen = (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2) > 0 ? (0x3FFFFF - sizeof(TheProPackage) + 2) : nSubLen;
  1104. pPackage->dwReserve = nCount;
  1105. memcpy(pPackage->byBody, pMf + nArchive - nSubLen, pPackage->nSubDataLen);
  1106. nSubLen -= (0x3FFFFF - sizeof(TheProPackage) + 2);
  1107. bResult = ::HP_Server_Send(m_spThis->m_pServer, dwConnID, pSendData, dwSendLen);
  1108. if (pSendData)
  1109. delete[]pSendData;
  1110. pSendData = NULL;
  1111. if (!bResult)
  1112. {
  1113. if (pMf)
  1114. delete pMf;
  1115. return HR_ERROR;
  1116. }
  1117. }
  1118. if (pMf)
  1119. delete pMf;
  1120. return HR_OK;
  1121. }
  1122. else
  1123. {// 单包;
  1124. dwSendLen = sizeof(TheProPackage) - 2 + nArchive;
  1125. pSendData = new BYTE[dwSendLen];
  1126. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1127. pPackage->flag = PACKAGE_ONESELF;
  1128. pPackage->nCmd = thepackage.nCmd;
  1129. pPackage->nDataLen = nArchive;
  1130. pPackage->dwReserve = nCount;
  1131. BYTE *pMf = mf.Detach();
  1132. memcpy(pPackage->byBody, pMf, nArchive);
  1133. if (pMf)
  1134. delete pMf;
  1135. }
  1136. return HR_IGNORE;
  1137. }
  1138. // 商品类型;
  1139. void CServerPtr::New_ProductType(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1140. {
  1141. CMemFile mf;
  1142. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  1143. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  1144. CArchive ar(&mf, CArchive::load);
  1145. CProductTypeObj tagProductTypeObj;
  1146. tagProductTypeObj.Serialize(ar);
  1147. ar.Close();
  1148. mf.Detach();
  1149. CString strSQL = _T("");
  1150. strSQL.Format(_T("INSERT INTO [ProductType] ([StudioID],[ProductTypeName],[ProductTypeNote]) VALUES ('%s','%s','%s')"),
  1151. thepackage.szStudioId, tagProductTypeObj.m_ProductTypeName, tagProductTypeObj.m_ProductTypeNote);
  1152. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  1153. // 返回信息;
  1154. dwSendLen = sizeof(TheProPackage);
  1155. pSendData = new BYTE[dwSendLen];
  1156. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1157. pPackage->flag = PACKAGE_ONESELF;
  1158. pPackage->nCmd = thepackage.nCmd;
  1159. pPackage->nDataLen = 0;
  1160. pPackage->dwReserve = bRet;
  1161. }
  1162. void CServerPtr::Del_ProductType(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1163. {
  1164. INT nlen = nReceiveLength - sizeof(TheProPackage) + 2;
  1165. TCHAR szProductTypeName[17] = { 0 }; // 注:长度16是数据库中设定的长度;
  1166. memcpy(szProductTypeName, pReceiveData + sizeof(TheProPackage) - 2, nlen);
  1167. CString strSQL;
  1168. strSQL.Format(_T("DELETE FROM [ProductType] WHERE [StudioID] = '%s' and [ProductTypeName] = '%s' "), thepackage.szStudioId, szProductTypeName);
  1169. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  1170. // 返回信息;
  1171. dwSendLen = sizeof(TheProPackage);
  1172. pSendData = new BYTE[dwSendLen];
  1173. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1174. pPackage->flag = PACKAGE_ONESELF;
  1175. pPackage->nCmd = thepackage.nCmd;
  1176. pPackage->nDataLen = 0;
  1177. pPackage->dwReserve = bRet;
  1178. }
  1179. void CServerPtr::Mod_ProductType(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1180. {
  1181. CMemFile mf;
  1182. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  1183. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  1184. CArchive ar(&mf, CArchive::load);
  1185. CProductTypeObj tagProductTypeObj;
  1186. tagProductTypeObj.Serialize(ar);
  1187. ar.Close();
  1188. mf.Detach();
  1189. CString strSQL = _T("");
  1190. strSQL.Format(_T("UPDATE [ProductType] SET [ProductTypeNote] = '%s' WHERE [StudioID] = '%s' AND [ProductTypeName] = '%s'"),
  1191. tagProductTypeObj.m_ProductTypeNote, thepackage.szStudioId, tagProductTypeObj.m_ProductTypeName);
  1192. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  1193. // 返回信息;
  1194. dwSendLen = sizeof(TheProPackage);
  1195. pSendData = new BYTE[dwSendLen];
  1196. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1197. pPackage->flag = PACKAGE_ONESELF;
  1198. pPackage->nCmd = thepackage.nCmd;;
  1199. pPackage->nDataLen = 0;
  1200. pPackage->dwReserve = bRet;
  1201. }
  1202. EnHandleResult CServerPtr::Ask_ProductType(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1203. {
  1204. CObList tagProductTypeArray;
  1205. INT nCount = g_pODBCPool->QueryProductType(thepackage.szStudioId, &tagProductTypeArray);
  1206. CMemFile mf;
  1207. CArchive ar(&mf, CArchive::store);
  1208. tagProductTypeArray.Serialize(ar);
  1209. ar.Close();
  1210. // 删除列表对象;
  1211. POSITION pos = tagProductTypeArray.GetHeadPosition();
  1212. while (pos)
  1213. {
  1214. CProductTypeObj *pProductType = (CProductTypeObj*)tagProductTypeArray.GetNext(pos);
  1215. if (pProductType)
  1216. delete pProductType;
  1217. }
  1218. tagProductTypeArray.RemoveAll();
  1219. BOOL bResult = FALSE;
  1220. __int64 nArchive = mf.GetLength();
  1221. if ((nArchive + sizeof(TheProPackage) - 2) > 0x3FFFFF)
  1222. {
  1223. __int64 nSubLen = nArchive;
  1224. BYTE *pMf = mf.Detach();
  1225. while (nSubLen > 0)
  1226. {
  1227. if (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2 > 0)
  1228. dwSendLen = 0x3FFFFF;
  1229. else
  1230. dwSendLen = nSubLen + sizeof(TheProPackage) - 2;
  1231. pSendData = new BYTE[dwSendLen];
  1232. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1233. pPackage->flag = PACKAGE_MULTIPLE;
  1234. pPackage->nCmd = thepackage.nCmd;
  1235. pPackage->nDataLen = nArchive;
  1236. pPackage->nSubDataLen = (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2) > 0 ? (0x3FFFFF - sizeof(TheProPackage) + 2) : nSubLen;
  1237. pPackage->dwReserve = nCount;
  1238. memcpy(pPackage->byBody, pMf + nArchive - nSubLen, pPackage->nSubDataLen);
  1239. nSubLen -= (0x3FFFFF - sizeof(TheProPackage) + 2);
  1240. bResult = ::HP_Server_Send(m_spThis->m_pServer, dwConnID, pSendData, dwSendLen);
  1241. if (pSendData)
  1242. delete[]pSendData;
  1243. pSendData = NULL;
  1244. if (!bResult)
  1245. {
  1246. if (pMf)
  1247. delete pMf;
  1248. return HR_ERROR;
  1249. }
  1250. }
  1251. if (pMf)
  1252. delete pMf;
  1253. return HR_OK;
  1254. }
  1255. else
  1256. {// 单包;
  1257. dwSendLen = sizeof(TheProPackage) - 2 + nArchive;
  1258. pSendData = new BYTE[dwSendLen];
  1259. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1260. pPackage->flag = PACKAGE_ONESELF;
  1261. pPackage->nCmd = thepackage.nCmd;
  1262. pPackage->nDataLen = nArchive;
  1263. pPackage->dwReserve = nCount;
  1264. BYTE *pMf = mf.Detach();
  1265. memcpy(pPackage->byBody, pMf, nArchive);
  1266. if (pMf)
  1267. delete pMf;
  1268. }
  1269. return HR_IGNORE;
  1270. }
  1271. // 商品信息;
  1272. void CServerPtr::New_ProductInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1273. {
  1274. CMemFile mf;
  1275. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  1276. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  1277. CArchive ar(&mf, CArchive::load);
  1278. CProductInfoObj tagProductInfoObj;
  1279. tagProductInfoObj.Serialize(ar);
  1280. ar.Close();
  1281. mf.Detach();
  1282. CString strSQL = _T("");
  1283. strSQL.Format(_T("INSERT INTO [ProductInfo] (")
  1284. _T("[StudioID],")
  1285. _T("[ProductSN],")
  1286. _T("[ProductName],")
  1287. _T("[ProductCost],")
  1288. _T("[ProductPrice],")
  1289. _T("[ProductTypes],")
  1290. _T("[ProductUnit],")
  1291. _T("[ProductShelves],")
  1292. _T("[ProductNote]) ")
  1293. _T("VALUES ('%s','%s','%s',%lf,%lf,'%s','%s',%d,'%s')"),
  1294. thepackage.szStudioId,
  1295. tagProductInfoObj.m_ProductSN,
  1296. tagProductInfoObj.m_ProductName,
  1297. tagProductInfoObj.m_ProductCost,
  1298. tagProductInfoObj.m_ProductPrice,
  1299. tagProductInfoObj.m_ProductTypes,
  1300. tagProductInfoObj.m_ProductUnit,
  1301. tagProductInfoObj.m_ProductShelves, tagProductInfoObj.m_ProductNote);
  1302. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  1303. // 返回信息;
  1304. dwSendLen = sizeof(TheProPackage);
  1305. pSendData = new BYTE[dwSendLen];
  1306. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1307. pPackage->flag = PACKAGE_ONESELF;
  1308. pPackage->nCmd = thepackage.nCmd;
  1309. pPackage->nDataLen = 0;
  1310. pPackage->dwReserve = bRet;
  1311. }
  1312. void CServerPtr::Del_ProductInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1313. {
  1314. CString strSQL;
  1315. strSQL.Format(_T("DELETE FROM [ProductInfo] WHERE [StudioID] = '%s' and [AutoID] = %d "), thepackage.szStudioId, thepackage.dwReserve);
  1316. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  1317. // 返回信息;
  1318. dwSendLen = sizeof(TheProPackage);
  1319. pSendData = new BYTE[dwSendLen];
  1320. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1321. pPackage->flag = PACKAGE_ONESELF;
  1322. pPackage->nCmd = thepackage.nCmd;
  1323. pPackage->nDataLen = 0;
  1324. pPackage->dwReserve = bRet;
  1325. }
  1326. void CServerPtr::Mod_ProductInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1327. {
  1328. CMemFile mf;
  1329. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  1330. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  1331. CArchive ar(&mf, CArchive::load);
  1332. CProductInfoObj tagProductInfoObj;
  1333. tagProductInfoObj.Serialize(ar);
  1334. ar.Close();
  1335. mf.Detach();
  1336. CString strSQL = _T("");
  1337. strSQL.Format(_T("UPDATE [ProductInfo] SET ")
  1338. _T("[ProductSN] = '%s',")
  1339. _T("[ProductName] = '%s',")
  1340. _T("[ProductCost] = %lf,")
  1341. _T("[ProductPrice] = %lf,")
  1342. _T("[ProductTypes] = '%s',")
  1343. _T("[ProductUnit] = '%s',")
  1344. _T("[ProductShelves] = %d,")
  1345. _T("[ProductNote] = '%s' ")
  1346. _T("WHERE [StudioID] = '%s' AND [AutoID] = %d"),
  1347. tagProductInfoObj.m_ProductSN,
  1348. tagProductInfoObj.m_ProductName,
  1349. tagProductInfoObj.m_ProductCost,
  1350. tagProductInfoObj.m_ProductPrice,
  1351. tagProductInfoObj.m_ProductTypes,
  1352. tagProductInfoObj.m_ProductUnit,
  1353. tagProductInfoObj.m_ProductShelves,
  1354. tagProductInfoObj.m_ProductNote,
  1355. thepackage.szStudioId, tagProductInfoObj.m_AutoID);
  1356. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  1357. // 返回信息;
  1358. dwSendLen = sizeof(TheProPackage);
  1359. pSendData = new BYTE[dwSendLen];
  1360. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1361. pPackage->flag = PACKAGE_ONESELF;
  1362. pPackage->nCmd = thepackage.nCmd;;
  1363. pPackage->nDataLen = 0;
  1364. pPackage->dwReserve = bRet;
  1365. }
  1366. EnHandleResult CServerPtr::Ask_ProductInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1367. {
  1368. CObList tagProductInfoArray;
  1369. INT nCount = g_pODBCPool->QueryProductInfo(thepackage.szStudioId, &tagProductInfoArray);
  1370. CMemFile mf;
  1371. CArchive ar(&mf, CArchive::store);
  1372. tagProductInfoArray.Serialize(ar);
  1373. ar.Close();
  1374. // 删除列表对象;
  1375. POSITION pos = tagProductInfoArray.GetHeadPosition();
  1376. while (pos)
  1377. {
  1378. CProductInfoObj *pProductInfo = (CProductInfoObj*)tagProductInfoArray.GetNext(pos);
  1379. if (pProductInfo)
  1380. delete pProductInfo;
  1381. }
  1382. tagProductInfoArray.RemoveAll();
  1383. BOOL bResult = FALSE;
  1384. __int64 nArchive = mf.GetLength();
  1385. if ((nArchive + sizeof(TheProPackage) - 2) > 0x3FFFFF)
  1386. {
  1387. __int64 nSubLen = nArchive;
  1388. BYTE *pMf = mf.Detach();
  1389. while (nSubLen > 0)
  1390. {
  1391. if (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2 > 0)
  1392. dwSendLen = 0x3FFFFF;
  1393. else
  1394. dwSendLen = nSubLen + sizeof(TheProPackage) - 2;
  1395. pSendData = new BYTE[dwSendLen];
  1396. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1397. pPackage->flag = PACKAGE_MULTIPLE;
  1398. pPackage->nCmd = thepackage.nCmd;
  1399. pPackage->nDataLen = nArchive;
  1400. pPackage->nSubDataLen = (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2) > 0 ? (0x3FFFFF - sizeof(TheProPackage) + 2) : nSubLen;
  1401. pPackage->dwReserve = nCount;
  1402. memcpy(pPackage->byBody, pMf + nArchive - nSubLen, pPackage->nSubDataLen);
  1403. nSubLen -= (0x3FFFFF - sizeof(TheProPackage) + 2);
  1404. bResult = ::HP_Server_Send(m_spThis->m_pServer, dwConnID, pSendData, dwSendLen);
  1405. if (pSendData)
  1406. delete[]pSendData;
  1407. pSendData = NULL;
  1408. if (!bResult)
  1409. {
  1410. if (pMf)
  1411. delete pMf;
  1412. return HR_ERROR;
  1413. }
  1414. }
  1415. if (pMf)
  1416. delete pMf;
  1417. return HR_OK;
  1418. }
  1419. else
  1420. {// 单包;
  1421. dwSendLen = sizeof(TheProPackage) - 2 + nArchive;
  1422. pSendData = new BYTE[dwSendLen];
  1423. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1424. pPackage->flag = PACKAGE_ONESELF;
  1425. pPackage->nCmd = thepackage.nCmd;
  1426. pPackage->nDataLen = nArchive;
  1427. pPackage->dwReserve = nCount;
  1428. BYTE *pMf = mf.Detach();
  1429. memcpy(pPackage->byBody, pMf, nArchive);
  1430. if (pMf)
  1431. delete pMf;
  1432. }
  1433. return HR_IGNORE;
  1434. }
  1435. // 景点;
  1436. void CServerPtr::New_Scenery(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1437. {
  1438. CMemFile mf;
  1439. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  1440. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  1441. CArchive ar(&mf, CArchive::load);
  1442. CSceneryInfoObj tagSceneryInfoObj;
  1443. tagSceneryInfoObj.Serialize(ar);
  1444. ar.Close();
  1445. mf.Detach();
  1446. CString strSQL = _T("");
  1447. strSQL.Format(_T("INSERT INTO [SceneryInfo](")
  1448. _T("[StudioID],")
  1449. _T("[ScenerySN],")
  1450. _T("[SceneryName],")
  1451. _T("[SceneryCostPrice],")
  1452. _T("[ScenerySalePrice],")
  1453. _T("[SceneryShelves],")
  1454. _T("[SceneryNote])VALUES('%s','%s','%s',%lf,%lf,%d,'%s')"),
  1455. thepackage.szStudioId,
  1456. tagSceneryInfoObj.m_ScenerySN,
  1457. tagSceneryInfoObj.m_SceneryName,
  1458. tagSceneryInfoObj.m_SceneryCostPrice,
  1459. tagSceneryInfoObj.m_ScenerySalePrice,
  1460. tagSceneryInfoObj.m_SceneryShelves,
  1461. tagSceneryInfoObj.m_SceneryNote);
  1462. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  1463. // 返回信息;
  1464. dwSendLen = sizeof(TheProPackage);
  1465. pSendData = new BYTE[dwSendLen];
  1466. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1467. pPackage->flag = PACKAGE_ONESELF;
  1468. pPackage->nCmd = thepackage.nCmd;
  1469. pPackage->nDataLen = 0;
  1470. pPackage->dwReserve = bRet;
  1471. }
  1472. void CServerPtr::Del_Scenery(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1473. {
  1474. CString strSQL;
  1475. strSQL.Format(_T("DELETE FROM [SceneryInfo] WHERE [StudioID] = '%s' and [AutoID] = %d "), thepackage.szStudioId, thepackage.dwReserve);
  1476. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  1477. // 返回信息;
  1478. dwSendLen = sizeof(TheProPackage);
  1479. pSendData = new BYTE[dwSendLen];
  1480. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1481. pPackage->flag = PACKAGE_ONESELF;
  1482. pPackage->nCmd = thepackage.nCmd;
  1483. pPackage->nDataLen = 0;
  1484. pPackage->dwReserve = bRet;
  1485. }
  1486. void CServerPtr::Mod_Scenery(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1487. {
  1488. CMemFile mf;
  1489. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  1490. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  1491. CArchive ar(&mf, CArchive::load);
  1492. CSceneryInfoObj tagSceneryInfoObj;
  1493. tagSceneryInfoObj.Serialize(ar);
  1494. ar.Close();
  1495. mf.Detach();
  1496. CString strSQL = _T("");
  1497. strSQL.Format(_T("UPDATE [SceneryInfo] SET ")
  1498. _T("[ScenerySN] = '%s',")
  1499. _T("[SceneryName] = '%s',")
  1500. _T("[SceneryCostPrice] = %lf,")
  1501. _T("[ScenerySalePrice] = %lf,")
  1502. _T("[SceneryShelves] = %d,")
  1503. _T("[SceneryNote] = '%s' ")
  1504. _T("WHERE [StudioID] = '%s' AND [AutoID] = %d"),
  1505. tagSceneryInfoObj.m_ScenerySN,
  1506. tagSceneryInfoObj.m_SceneryName,
  1507. tagSceneryInfoObj.m_SceneryCostPrice,
  1508. tagSceneryInfoObj.m_ScenerySalePrice,
  1509. tagSceneryInfoObj.m_SceneryShelves,
  1510. tagSceneryInfoObj.m_SceneryNote,
  1511. thepackage.szStudioId, tagSceneryInfoObj.m_AutoID);
  1512. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  1513. // 返回信息;
  1514. dwSendLen = sizeof(TheProPackage);
  1515. pSendData = new BYTE[dwSendLen];
  1516. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1517. pPackage->flag = PACKAGE_ONESELF;
  1518. pPackage->nCmd = thepackage.nCmd;
  1519. pPackage->nDataLen = 0;
  1520. pPackage->dwReserve = bRet;
  1521. }
  1522. EnHandleResult CServerPtr::Ask_Scenery(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1523. {
  1524. CObList tagSceneryInfoArray;
  1525. INT nCount = g_pODBCPool->QuerySceneryInfo(thepackage.szStudioId, &tagSceneryInfoArray);
  1526. CMemFile mf;
  1527. CArchive ar(&mf, CArchive::store);
  1528. tagSceneryInfoArray.Serialize(ar);
  1529. ar.Close();
  1530. // 删除列表对象;
  1531. POSITION pos = tagSceneryInfoArray.GetHeadPosition();
  1532. while (pos)
  1533. {
  1534. CSceneryInfoObj *pSceneryInfo = (CSceneryInfoObj*)tagSceneryInfoArray.GetNext(pos);
  1535. if (pSceneryInfo)
  1536. delete pSceneryInfo;
  1537. }
  1538. tagSceneryInfoArray.RemoveAll();
  1539. BOOL bResult = FALSE;
  1540. __int64 nArchive = mf.GetLength();
  1541. if ((nArchive + sizeof(TheProPackage) - 2) > 0x3FFFFF)
  1542. {
  1543. __int64 nSubLen = nArchive;
  1544. BYTE *pMf = mf.Detach();
  1545. while (nSubLen > 0)
  1546. {
  1547. if (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2 > 0)
  1548. dwSendLen = 0x3FFFFF;
  1549. else
  1550. dwSendLen = nSubLen + sizeof(TheProPackage) - 2;
  1551. pSendData = new BYTE[dwSendLen];
  1552. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1553. pPackage->flag = PACKAGE_MULTIPLE;
  1554. pPackage->nCmd = thepackage.nCmd;
  1555. pPackage->nDataLen = nArchive;
  1556. pPackage->nSubDataLen = (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2) > 0 ? (0x3FFFFF - sizeof(TheProPackage) + 2) : nSubLen;
  1557. pPackage->dwReserve = nCount;
  1558. memcpy(pPackage->byBody, pMf + nArchive - nSubLen, pPackage->nSubDataLen);
  1559. nSubLen -= (0x3FFFFF - sizeof(TheProPackage) + 2);
  1560. bResult = ::HP_Server_Send(m_spThis->m_pServer, dwConnID, pSendData, dwSendLen);
  1561. if (pSendData)
  1562. delete[]pSendData;
  1563. pSendData = NULL;
  1564. if (!bResult)
  1565. {
  1566. if (pMf)
  1567. delete pMf;
  1568. return HR_ERROR;
  1569. }
  1570. }
  1571. if (pMf)
  1572. delete pMf;
  1573. return HR_OK;
  1574. }
  1575. else
  1576. {// 单包;
  1577. dwSendLen = sizeof(TheProPackage) - 2 + nArchive;
  1578. pSendData = new BYTE[dwSendLen];
  1579. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1580. pPackage->flag = PACKAGE_ONESELF;
  1581. pPackage->nCmd = thepackage.nCmd;
  1582. pPackage->nDataLen = nArchive;
  1583. pPackage->dwReserve = nCount;
  1584. BYTE *pMf = mf.Detach();
  1585. memcpy(pPackage->byBody, pMf, nArchive);
  1586. if (pMf)
  1587. delete pMf;
  1588. }
  1589. return HR_IGNORE;
  1590. }
  1591. // 套餐类型;
  1592. void CServerPtr::New_PackageType(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1593. {
  1594. CMemFile mf;
  1595. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  1596. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  1597. CArchive ar(&mf, CArchive::load);
  1598. CPackageTypeObj tagPackageTypeObj;
  1599. tagPackageTypeObj.Serialize(ar);
  1600. ar.Close();
  1601. mf.Detach();
  1602. CString strSQL = _T("");
  1603. strSQL.Format(_T("INSERT INTO [PackageType]([StudioID],[PackageTypesName],[PackageTypesNote])VALUES('%s','%s','%s')"),
  1604. thepackage.szStudioId, tagPackageTypeObj.m_PackageTypesName, tagPackageTypeObj.m_PackageTypesNote);
  1605. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  1606. // 返回信息;
  1607. dwSendLen = sizeof(TheProPackage);
  1608. pSendData = new BYTE[dwSendLen];
  1609. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1610. pPackage->flag = PACKAGE_ONESELF;
  1611. pPackage->nCmd = thepackage.nCmd;
  1612. pPackage->nDataLen = 0;
  1613. pPackage->dwReserve = bRet;
  1614. }
  1615. void CServerPtr::Del_PackageType(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1616. {
  1617. INT nlen = nReceiveLength - sizeof(TheProPackage) + 2;
  1618. TCHAR szPackageTypeName[17] = { 0 }; // 注:长度16是数据库中设定的长度;
  1619. memcpy(szPackageTypeName, pReceiveData + sizeof(TheProPackage) - 2, nlen);
  1620. CString strSQL;
  1621. strSQL.Format(_T("DELETE FROM [PackageType] WHERE [StudioID] = '%s' and [PackageTypesName] = '%s' "), thepackage.szStudioId, szPackageTypeName);
  1622. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  1623. // 返回信息;
  1624. dwSendLen = sizeof(TheProPackage);
  1625. pSendData = new BYTE[dwSendLen];
  1626. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1627. pPackage->flag = PACKAGE_ONESELF;
  1628. pPackage->nCmd = thepackage.nCmd;
  1629. pPackage->nDataLen = 0;
  1630. pPackage->dwReserve = bRet;
  1631. }
  1632. void CServerPtr::Mod_PackageType(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1633. {
  1634. CMemFile mf;
  1635. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  1636. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  1637. CArchive ar(&mf, CArchive::load);
  1638. CPackageTypeObj tagPackageTypeObj;
  1639. tagPackageTypeObj.Serialize(ar);
  1640. ar.Close();
  1641. mf.Detach();
  1642. CString strSQL = _T("");
  1643. strSQL.Format(_T("UPDATE [PackageType] SET [PackageTypesNote] = '%s' WHERE [StudioID] = '%s' AND [PackageTypesName] = '%s'"),
  1644. tagPackageTypeObj.m_PackageTypesNote, thepackage.szStudioId, tagPackageTypeObj.m_PackageTypesName);
  1645. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  1646. // 返回信息;
  1647. dwSendLen = sizeof(TheProPackage);
  1648. pSendData = new BYTE[dwSendLen];
  1649. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1650. pPackage->flag = PACKAGE_ONESELF;
  1651. pPackage->nCmd = thepackage.nCmd;
  1652. pPackage->nDataLen = 0;
  1653. pPackage->dwReserve = bRet;
  1654. }
  1655. EnHandleResult CServerPtr::Ask_PackageType(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1656. {
  1657. CObList tagPackageTypeArray;
  1658. INT nCount = g_pODBCPool->QueryPackageType(thepackage.szStudioId, &tagPackageTypeArray);
  1659. CMemFile mf;
  1660. CArchive ar(&mf, CArchive::store);
  1661. tagPackageTypeArray.Serialize(ar);
  1662. ar.Close();
  1663. // 删除列表对象;
  1664. POSITION pos = tagPackageTypeArray.GetHeadPosition();
  1665. while (pos)
  1666. {
  1667. CPackageTypeObj *pPackageType = (CPackageTypeObj*)tagPackageTypeArray.GetNext(pos);
  1668. if (pPackageType)
  1669. delete pPackageType;
  1670. }
  1671. tagPackageTypeArray.RemoveAll();
  1672. BOOL bResult = FALSE;
  1673. __int64 nArchive = mf.GetLength();
  1674. if ((nArchive + sizeof(TheProPackage) - 2) > 0x3FFFFF)
  1675. {
  1676. __int64 nSubLen = nArchive;
  1677. BYTE *pMf = mf.Detach();
  1678. while (nSubLen > 0)
  1679. {
  1680. if (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2 > 0)
  1681. dwSendLen = 0x3FFFFF;
  1682. else
  1683. dwSendLen = nSubLen + sizeof(TheProPackage) - 2;
  1684. pSendData = new BYTE[dwSendLen];
  1685. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1686. pPackage->flag = PACKAGE_MULTIPLE;
  1687. pPackage->nCmd = thepackage.nCmd;
  1688. pPackage->nDataLen = nArchive;
  1689. pPackage->nSubDataLen = (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2) > 0 ? (0x3FFFFF - sizeof(TheProPackage) + 2) : nSubLen;
  1690. pPackage->dwReserve = nCount;
  1691. memcpy(pPackage->byBody, pMf + nArchive - nSubLen, pPackage->nSubDataLen);
  1692. nSubLen -= (0x3FFFFF - sizeof(TheProPackage) + 2);
  1693. bResult = ::HP_Server_Send(m_spThis->m_pServer, dwConnID, pSendData, dwSendLen);
  1694. if (pSendData)
  1695. delete[]pSendData;
  1696. pSendData = NULL;
  1697. if (!bResult)
  1698. {
  1699. if (pMf)
  1700. delete pMf;
  1701. return HR_ERROR;
  1702. }
  1703. }
  1704. if (pMf)
  1705. delete pMf;
  1706. return HR_OK;
  1707. }
  1708. else
  1709. {// 单包;
  1710. dwSendLen = sizeof(TheProPackage) - 2 + nArchive;
  1711. pSendData = new BYTE[dwSendLen];
  1712. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1713. pPackage->flag = PACKAGE_ONESELF;
  1714. pPackage->nCmd = thepackage.nCmd;
  1715. pPackage->nDataLen = nArchive;
  1716. pPackage->dwReserve = nCount;
  1717. BYTE *pMf = mf.Detach();
  1718. memcpy(pPackage->byBody, pMf, nArchive);
  1719. if (pMf)
  1720. delete pMf;
  1721. }
  1722. return HR_IGNORE;
  1723. }
  1724. // 套餐信息;
  1725. void CServerPtr::New_PackageInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1726. {
  1727. CMemFile mf;
  1728. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  1729. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  1730. CArchive ar(&mf, CArchive::load);
  1731. CPackageInfoObj tagPackageInfoObj;
  1732. tagPackageInfoObj.Serialize(ar);
  1733. ar.Close();
  1734. mf.Detach();
  1735. CString strSQL = _T("");
  1736. strSQL.Format(_T("INSERT INTO [PackageInfo]")
  1737. _T("([StudioID]")
  1738. _T(", [PackageSN]")
  1739. _T(", [PackageTypes]")
  1740. _T(", [PackageName]")
  1741. _T(", [PackageCostPrice]")
  1742. _T(", [PackageSalesPrice]")
  1743. _T(", [PackageAlbum]")
  1744. _T(", [PackageFilm]")
  1745. _T(", [PackageShelves]")
  1746. _T(", [PackageNote])")
  1747. _T("VALUES('%s', '%s', '%s', '%s', '%lf', '%lf', '%d', '%d', '%d', '%s')"),
  1748. thepackage.szStudioId, tagPackageInfoObj.m_PackageSN, tagPackageInfoObj.m_PackageTypes, tagPackageInfoObj.m_PackageName,
  1749. tagPackageInfoObj.m_PackageCostPrice, tagPackageInfoObj.m_PackageSalesPrice, tagPackageInfoObj.m_PackageAlbum, tagPackageInfoObj.m_PackageFilm,
  1750. tagPackageInfoObj.m_PackageShelves, tagPackageInfoObj.m_PackageNote);
  1751. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  1752. // 返回信息;
  1753. dwSendLen = sizeof(TheProPackage);
  1754. pSendData = new BYTE[dwSendLen];
  1755. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1756. pPackage->flag = PACKAGE_ONESELF;
  1757. pPackage->nCmd = thepackage.nCmd;
  1758. pPackage->nDataLen = 0;
  1759. pPackage->dwReserve = bRet;
  1760. }
  1761. void CServerPtr::Del_PackageInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1762. {
  1763. CString strSQL;
  1764. strSQL.Format(_T("DELETE FROM [PackageInfo] WHERE [StudioID] = '%s' and [AutoID] = %d "), thepackage.szStudioId, thepackage.dwReserve);
  1765. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  1766. // 返回信息;
  1767. dwSendLen = sizeof(TheProPackage);
  1768. pSendData = new BYTE[dwSendLen];
  1769. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1770. pPackage->flag = PACKAGE_ONESELF;
  1771. pPackage->nCmd = thepackage.nCmd;
  1772. pPackage->nDataLen = 0;
  1773. pPackage->dwReserve = bRet;
  1774. }
  1775. void CServerPtr::Mod_PackageInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1776. {
  1777. CMemFile mf;
  1778. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  1779. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  1780. CArchive ar(&mf, CArchive::load);
  1781. CPackageInfoObj tagPackageInfoObj;
  1782. tagPackageInfoObj.Serialize(ar);
  1783. ar.Close();
  1784. mf.Detach();
  1785. CString strSQL = _T("");
  1786. strSQL.Format(_T("UPDATE [PackageInfo] SET ")
  1787. _T(" [PackageSN] = '%s',")
  1788. _T(" [PackageTypes] = '%s',")
  1789. _T(" [PackageName] = '%s',")
  1790. _T(" [PackageCostPrice] = '%lf',")
  1791. _T(" [PackageSalesPrice] = '%lf',")
  1792. _T(" [PackageAlbum] = '%d',")
  1793. _T(" [PackageFilm] = '%d',")
  1794. _T(" [PackageShelves] = '%d',")
  1795. _T(" [PackageNote] = '%s' WHERE [StudioID] = '%s' AND [AutoID] = %d"),
  1796. tagPackageInfoObj.m_PackageSN,
  1797. tagPackageInfoObj.m_PackageTypes,
  1798. tagPackageInfoObj.m_PackageName,
  1799. tagPackageInfoObj.m_PackageCostPrice,
  1800. tagPackageInfoObj.m_PackageSalesPrice,
  1801. tagPackageInfoObj.m_PackageAlbum,
  1802. tagPackageInfoObj.m_PackageFilm,
  1803. tagPackageInfoObj.m_PackageShelves,
  1804. tagPackageInfoObj.m_PackageNote,
  1805. thepackage.szStudioId, tagPackageInfoObj.m_AutoID);
  1806. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  1807. // 返回信息;
  1808. dwSendLen = sizeof(TheProPackage);
  1809. pSendData = new BYTE[dwSendLen];
  1810. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1811. pPackage->flag = PACKAGE_ONESELF;
  1812. pPackage->nCmd = thepackage.nCmd;
  1813. pPackage->nDataLen = 0;
  1814. pPackage->dwReserve = bRet;
  1815. }
  1816. EnHandleResult CServerPtr::Ask_PackageInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1817. {
  1818. CObList tagPackageInfoArray;
  1819. INT nCount = g_pODBCPool->QueryPackageInfo(thepackage.szStudioId, &tagPackageInfoArray);
  1820. CMemFile mf;
  1821. CArchive ar(&mf, CArchive::store);
  1822. tagPackageInfoArray.Serialize(ar);
  1823. ar.Close();
  1824. // 删除列表对象;
  1825. POSITION pos = tagPackageInfoArray.GetHeadPosition();
  1826. while (pos)
  1827. {
  1828. CPackageInfoObj *pPackageInfo = (CPackageInfoObj*)tagPackageInfoArray.GetNext(pos);
  1829. if (pPackageInfo)
  1830. delete pPackageInfo;
  1831. }
  1832. tagPackageInfoArray.RemoveAll();
  1833. BOOL bResult = FALSE;
  1834. __int64 nArchive = mf.GetLength();
  1835. if ((nArchive + sizeof(TheProPackage) - 2) > 0x3FFFFF)
  1836. {
  1837. __int64 nSubLen = nArchive;
  1838. BYTE *pMf = mf.Detach();
  1839. while (nSubLen > 0)
  1840. {
  1841. if (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2 > 0)
  1842. dwSendLen = 0x3FFFFF;
  1843. else
  1844. dwSendLen = nSubLen + sizeof(TheProPackage) - 2;
  1845. pSendData = new BYTE[dwSendLen];
  1846. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1847. pPackage->flag = PACKAGE_MULTIPLE;
  1848. pPackage->nCmd = thepackage.nCmd;
  1849. pPackage->nDataLen = nArchive;
  1850. pPackage->nSubDataLen = (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2) > 0 ? (0x3FFFFF - sizeof(TheProPackage) + 2) : nSubLen;
  1851. pPackage->dwReserve = nCount;
  1852. memcpy(pPackage->byBody, pMf + nArchive - nSubLen, pPackage->nSubDataLen);
  1853. nSubLen -= (0x3FFFFF - sizeof(TheProPackage) + 2);
  1854. bResult = ::HP_Server_Send(m_spThis->m_pServer, dwConnID, pSendData, dwSendLen);
  1855. if (pSendData)
  1856. delete[]pSendData;
  1857. pSendData = NULL;
  1858. if (!bResult)
  1859. {
  1860. if (pMf)
  1861. delete pMf;
  1862. return HR_ERROR;
  1863. }
  1864. }
  1865. if (pMf)
  1866. delete pMf;
  1867. return HR_OK;
  1868. }
  1869. else
  1870. {// 单包;
  1871. dwSendLen = sizeof(TheProPackage) - 2 + nArchive;
  1872. pSendData = new BYTE[dwSendLen];
  1873. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1874. pPackage->flag = PACKAGE_ONESELF;
  1875. pPackage->nCmd = thepackage.nCmd;
  1876. pPackage->nDataLen = nArchive;
  1877. pPackage->dwReserve = nCount;
  1878. BYTE *pMf = mf.Detach();
  1879. memcpy(pPackage->byBody, pMf, nArchive);
  1880. if (pMf)
  1881. delete pMf;
  1882. }
  1883. return HR_IGNORE;
  1884. }
  1885. // 套餐项目信息;
  1886. void CServerPtr::New_PackageItem(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1887. {
  1888. CMemFile mf;
  1889. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  1890. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  1891. CArchive ar(&mf, CArchive::load);
  1892. CPackageItemsObj tagPackageItemsObj;
  1893. tagPackageItemsObj.Serialize(ar);
  1894. ar.Close();
  1895. mf.Detach();
  1896. CString strSQL = _T("");
  1897. strSQL.Format(_T("INSERT INTO [PackageItems](")
  1898. _T("[StudioID],")
  1899. _T("[PackageSN],")
  1900. _T("[PackageItemSN],")
  1901. _T("[PackageItemName],")
  1902. _T("[PackageItemType],")
  1903. _T("[PackageItemCount],")
  1904. _T("[PackageItemNote]) VALUES ('%s','%s','%s','%s','%s',%d,'%s')"),
  1905. thepackage.szStudioId,
  1906. tagPackageItemsObj.m_PackageSN,
  1907. tagPackageItemsObj.m_PackageItemSN,
  1908. tagPackageItemsObj.m_PackageItemName,
  1909. tagPackageItemsObj.m_PackageItemType,
  1910. tagPackageItemsObj.m_PackageItemCount,
  1911. tagPackageItemsObj.m_PackageItemNote);
  1912. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  1913. // 返回信息;
  1914. dwSendLen = sizeof(TheProPackage);
  1915. pSendData = new BYTE[dwSendLen];
  1916. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1917. pPackage->flag = PACKAGE_ONESELF;
  1918. pPackage->nCmd = thepackage.nCmd;
  1919. pPackage->nDataLen = 0;
  1920. pPackage->dwReserve = bRet;
  1921. }
  1922. void CServerPtr::New_PackageItem2(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1923. {
  1924. CMemFile mf;
  1925. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  1926. CArchive ar(&mf, CArchive::load);
  1927. CObList Objlist;
  1928. Objlist.Serialize(ar);
  1929. ar.Close();
  1930. mf.Detach();
  1931. // 更新所有操作;
  1932. BOOL bRet = TRUE;
  1933. CString strSQL = _T("");
  1934. POSITION pos = Objlist.GetHeadPosition();
  1935. while (pos)
  1936. {
  1937. CPackageItemsObj *pObj = (CPackageItemsObj*)Objlist.GetNext(pos);
  1938. switch (pObj->m_byOpType)
  1939. {
  1940. case OPT_NEW: // 新记录;
  1941. {
  1942. strSQL.Format(_T("INSERT INTO [PackageItems](")
  1943. _T("[StudioID],")
  1944. _T("[PackageSN],")
  1945. _T("[PackageItemSN],")
  1946. _T("[PackageItemName],")
  1947. _T("[PackageItemType],")
  1948. _T("[PackageItemCount],")
  1949. _T("[PackageItemNote]) VALUES ('%s','%s','%s','%s','%s',%d,'%s')"),
  1950. thepackage.szStudioId,
  1951. pObj->m_PackageSN,
  1952. pObj->m_PackageItemSN,
  1953. pObj->m_PackageItemName,
  1954. pObj->m_PackageItemType,
  1955. pObj->m_PackageItemCount,
  1956. pObj->m_PackageItemNote);
  1957. }
  1958. break;
  1959. case OPT_ORG | OPT_DEL: // 原数据删除;
  1960. {
  1961. strSQL.Format(_T("DELETE FROM [PackageItems] WHERE StudioID = '%s' AND PackageSN = '%s' AND PackageItemName = '%s' AND PackageItemType = '%s'"),
  1962. thepackage.szStudioId, pObj->m_PackageSN, pObj->m_PackageItemName, pObj->m_PackageItemType);
  1963. }
  1964. break;
  1965. case OPT_ORG | OPT_UPD: // 原数据更新;
  1966. {
  1967. strSQL.Format(_T("UPDATE [PackageItems] SET ")
  1968. _T("[PackageItemCount] = %d,")
  1969. _T("[PackageItemNote] = '%s' WHERE [StudioID] = '%s' AND PackageSN = '%s' AND PackageItemSN = '%s' AND PackageItemName = '%s' AND PackageItemType = '%s'"),
  1970. pObj->m_PackageItemCount,
  1971. pObj->m_PackageItemNote,
  1972. thepackage.szStudioId,
  1973. pObj->m_PackageSN,
  1974. pObj->m_PackageItemSN,
  1975. pObj->m_PackageItemName,
  1976. pObj->m_PackageItemType);
  1977. }
  1978. break;
  1979. default:
  1980. strSQL.Empty();
  1981. break;
  1982. }
  1983. if (!strSQL.IsEmpty())
  1984. {
  1985. if (!g_pODBCPool->ExecuteSQL(strSQL))
  1986. bRet = FALSE;
  1987. }
  1988. }
  1989. // 返回信息;
  1990. dwSendLen = sizeof(TheProPackage);
  1991. pSendData = new BYTE[dwSendLen];
  1992. TheProPackage *pPackage = (TheProPackage*)pSendData;
  1993. pPackage->flag = PACKAGE_ONESELF;
  1994. pPackage->nCmd = thepackage.nCmd;
  1995. pPackage->nDataLen = 0;
  1996. pPackage->dwReserve = bRet;
  1997. }
  1998. void CServerPtr::Del_PackageItem(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  1999. {
  2000. CString strSQL;
  2001. strSQL.Format(_T("DELETE FROM [PackageItems] WHERE [StudioID] = '%s' and [AutoID] = %d "), thepackage.szStudioId, thepackage.dwReserve);
  2002. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  2003. // 返回信息;
  2004. dwSendLen = sizeof(TheProPackage);
  2005. pSendData = new BYTE[dwSendLen];
  2006. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2007. pPackage->flag = PACKAGE_ONESELF;
  2008. pPackage->nCmd = thepackage.nCmd;
  2009. pPackage->nDataLen = 0;
  2010. pPackage->dwReserve = bRet;
  2011. }
  2012. void CServerPtr::Mod_PackageItem(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2013. {
  2014. CMemFile mf;
  2015. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  2016. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  2017. CArchive ar(&mf, CArchive::load);
  2018. CPackageItemsObj tagPackageItemsObj;
  2019. tagPackageItemsObj.Serialize(ar);
  2020. ar.Close();
  2021. mf.Detach();
  2022. CString strSQL = _T("");
  2023. strSQL.Format(_T("UPDATE [PackageItems] SET ")
  2024. _T("[PackageSN] = '%s',")
  2025. _T("[PackageItemSN] = '%s',")
  2026. _T("[PackageItemName] = '%s',")
  2027. _T("[PackageItemType] = '%s',")
  2028. _T("[PackageItemCount] = %d,")
  2029. _T("[PackageItemNote] = '%s' WHERE [StudioID] = '%s' AND [AutoID] = %d"),
  2030. tagPackageItemsObj.m_PackageSN,
  2031. tagPackageItemsObj.m_PackageItemSN,
  2032. tagPackageItemsObj.m_PackageItemName,
  2033. tagPackageItemsObj.m_PackageItemType,
  2034. tagPackageItemsObj.m_PackageItemCount,
  2035. tagPackageItemsObj.m_PackageItemNote,
  2036. thepackage.szStudioId,
  2037. tagPackageItemsObj.m_AutoID);
  2038. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  2039. // 返回信息;
  2040. dwSendLen = sizeof(TheProPackage);
  2041. pSendData = new BYTE[dwSendLen];
  2042. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2043. pPackage->flag = PACKAGE_ONESELF;
  2044. pPackage->nCmd = thepackage.nCmd;
  2045. pPackage->nDataLen = 0;
  2046. pPackage->dwReserve = bRet;
  2047. }
  2048. EnHandleResult CServerPtr::Ask_PackageItem(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2049. {
  2050. CObList tagPackageItemsArray;
  2051. INT nCount = g_pODBCPool->QueryPackageItems(thepackage.szStudioId, &tagPackageItemsArray);
  2052. CMemFile mf;
  2053. CArchive ar(&mf, CArchive::store);
  2054. tagPackageItemsArray.Serialize(ar);
  2055. ar.Close();
  2056. // 删除列表对象;
  2057. POSITION pos = tagPackageItemsArray.GetHeadPosition();
  2058. while (pos)
  2059. {
  2060. CPackageItemsObj *pPackageItems = (CPackageItemsObj*)tagPackageItemsArray.GetNext(pos);
  2061. if (pPackageItems)
  2062. delete pPackageItems;
  2063. }
  2064. tagPackageItemsArray.RemoveAll();
  2065. BOOL bResult = FALSE;
  2066. __int64 nArchive = mf.GetLength();
  2067. if ((nArchive + sizeof(TheProPackage) - 2) > 0x3FFFFF)
  2068. {
  2069. __int64 nSubLen = nArchive;
  2070. BYTE *pMf = mf.Detach();
  2071. while (nSubLen > 0)
  2072. {
  2073. if (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2 > 0)
  2074. dwSendLen = 0x3FFFFF;
  2075. else
  2076. dwSendLen = nSubLen + sizeof(TheProPackage) - 2;
  2077. pSendData = new BYTE[dwSendLen];
  2078. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2079. pPackage->flag = PACKAGE_MULTIPLE;
  2080. pPackage->nCmd = thepackage.nCmd;
  2081. pPackage->nDataLen = nArchive;
  2082. pPackage->nSubDataLen = (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2) > 0 ? (0x3FFFFF - sizeof(TheProPackage) + 2) : nSubLen;
  2083. pPackage->dwReserve = nCount;
  2084. memcpy(pPackage->byBody, pMf + nArchive - nSubLen, pPackage->nSubDataLen);
  2085. nSubLen -= (0x3FFFFF - sizeof(TheProPackage) + 2);
  2086. bResult = ::HP_Server_Send(m_spThis->m_pServer, dwConnID, pSendData, dwSendLen);
  2087. if (pSendData)
  2088. delete[]pSendData;
  2089. pSendData = NULL;
  2090. if (!bResult)
  2091. {
  2092. if (pMf)
  2093. delete pMf;
  2094. return HR_ERROR;
  2095. }
  2096. }
  2097. if (pMf)
  2098. delete pMf;
  2099. return HR_OK;
  2100. }
  2101. else
  2102. {// 单包;
  2103. dwSendLen = sizeof(TheProPackage) - 2 + nArchive;
  2104. pSendData = new BYTE[dwSendLen];
  2105. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2106. pPackage->flag = PACKAGE_ONESELF;
  2107. pPackage->nCmd = thepackage.nCmd;
  2108. pPackage->nDataLen = nArchive;
  2109. pPackage->dwReserve = nCount;
  2110. BYTE *pMf = mf.Detach();
  2111. memcpy(pPackage->byBody, pMf, nArchive);
  2112. if (pMf)
  2113. delete pMf;
  2114. }
  2115. return HR_IGNORE;
  2116. }
  2117. EnHandleResult CServerPtr::Ask_PackageItemDetail(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2118. {
  2119. INT nlen = nReceiveLength - sizeof(TheProPackage) + 2;
  2120. TCHAR szPackageSN[17] = { 0 }; // 注:长度16是数据库中设定的长度;
  2121. if (nlen)
  2122. memcpy(szPackageSN, pReceiveData + sizeof(TheProPackage) - 2, nlen);
  2123. CObList Objlist;
  2124. INT nCount = g_pODBCPool->QueryPackageItemsDetail(thepackage.szStudioId, szPackageSN, &Objlist);
  2125. CMemFile mf;
  2126. CArchive ar(&mf, CArchive::store);
  2127. Objlist.Serialize(ar);
  2128. ar.Close();
  2129. // 删除列表对象;
  2130. POSITION pos = Objlist.GetHeadPosition();
  2131. while (pos)
  2132. {
  2133. CPackageItemDetailObj *pObj = (CPackageItemDetailObj*)Objlist.GetNext(pos);
  2134. if (pObj)
  2135. delete pObj;
  2136. }
  2137. Objlist.RemoveAll();
  2138. BOOL bResult = FALSE;
  2139. __int64 nArchive = mf.GetLength();
  2140. if ((nArchive + sizeof(TheProPackage) - 2) > 0x3FFFFF)
  2141. {
  2142. __int64 nSubLen = nArchive;
  2143. BYTE *pMf = mf.Detach();
  2144. while (nSubLen > 0)
  2145. {
  2146. if (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2 > 0)
  2147. dwSendLen = 0x3FFFFF;
  2148. else
  2149. dwSendLen = nSubLen + sizeof(TheProPackage) - 2;
  2150. pSendData = new BYTE[dwSendLen];
  2151. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2152. pPackage->flag = PACKAGE_MULTIPLE;
  2153. pPackage->nCmd = thepackage.nCmd;
  2154. pPackage->nDataLen = nArchive;
  2155. pPackage->nSubDataLen = (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2) > 0 ? (0x3FFFFF - sizeof(TheProPackage) + 2) : nSubLen;
  2156. pPackage->dwReserve = nCount;
  2157. memcpy(pPackage->byBody, pMf + nArchive - nSubLen, pPackage->nSubDataLen);
  2158. nSubLen -= (0x3FFFFF - sizeof(TheProPackage) + 2);
  2159. bResult = ::HP_Server_Send(m_spThis->m_pServer, dwConnID, pSendData, dwSendLen);
  2160. if (pSendData)
  2161. delete[]pSendData;
  2162. pSendData = NULL;
  2163. if (!bResult)
  2164. {
  2165. if (pMf)
  2166. delete pMf;
  2167. return HR_ERROR;
  2168. }
  2169. }
  2170. if (pMf)
  2171. delete pMf;
  2172. return HR_OK;
  2173. }
  2174. else
  2175. {// 单包;
  2176. dwSendLen = sizeof(TheProPackage) - 2 + nArchive;
  2177. pSendData = new BYTE[dwSendLen];
  2178. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2179. pPackage->flag = PACKAGE_ONESELF;
  2180. pPackage->nCmd = thepackage.nCmd;
  2181. pPackage->nDataLen = nArchive;
  2182. pPackage->dwReserve = nCount;
  2183. BYTE *pMf = mf.Detach();
  2184. memcpy(pPackage->byBody, pMf, nArchive);
  2185. if (pMf)
  2186. delete pMf;
  2187. }
  2188. return HR_IGNORE;
  2189. }
  2190. EnHandleResult CServerPtr::Ask_PackageItemView(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2191. {
  2192. CObList Objlist;
  2193. INT nCount = g_pODBCPool->QueryPackageItemsView(thepackage.szStudioId, &Objlist);
  2194. CMemFile mf;
  2195. CArchive ar(&mf, CArchive::store);
  2196. Objlist.Serialize(ar);
  2197. ar.Close();
  2198. // 删除列表对象;
  2199. POSITION pos = Objlist.GetHeadPosition();
  2200. while (pos)
  2201. {
  2202. CPackageItemViewObj *pObj = (CPackageItemViewObj*)Objlist.GetNext(pos);
  2203. if (pObj)
  2204. delete pObj;
  2205. }
  2206. Objlist.RemoveAll();
  2207. BOOL bResult = FALSE;
  2208. __int64 nArchive = mf.GetLength();
  2209. if ((nArchive + sizeof(TheProPackage) - 2) > 0x3FFFFF)
  2210. {
  2211. __int64 nSubLen = nArchive;
  2212. BYTE *pMf = mf.Detach();
  2213. while (nSubLen > 0)
  2214. {
  2215. if (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2 > 0)
  2216. dwSendLen = 0x3FFFFF;
  2217. else
  2218. dwSendLen = nSubLen + sizeof(TheProPackage) - 2;
  2219. pSendData = new BYTE[dwSendLen];
  2220. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2221. pPackage->flag = PACKAGE_MULTIPLE;
  2222. pPackage->nCmd = thepackage.nCmd;
  2223. pPackage->nDataLen = nArchive;
  2224. pPackage->nSubDataLen = (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2) > 0 ? (0x3FFFFF - sizeof(TheProPackage) + 2) : nSubLen;
  2225. pPackage->dwReserve = nCount;
  2226. memcpy(pPackage->byBody, pMf + nArchive - nSubLen, pPackage->nSubDataLen);
  2227. nSubLen -= (0x3FFFFF - sizeof(TheProPackage) + 2);
  2228. bResult = ::HP_Server_Send(m_spThis->m_pServer, dwConnID, pSendData, dwSendLen);
  2229. if (pSendData)
  2230. delete[]pSendData;
  2231. pSendData = NULL;
  2232. if (!bResult)
  2233. {
  2234. if (pMf)
  2235. delete pMf;
  2236. return HR_ERROR;
  2237. }
  2238. }
  2239. if (pMf)
  2240. delete pMf;
  2241. return HR_OK;
  2242. }
  2243. else
  2244. {// 单包;
  2245. dwSendLen = sizeof(TheProPackage) - 2 + nArchive;
  2246. pSendData = new BYTE[dwSendLen];
  2247. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2248. pPackage->flag = PACKAGE_ONESELF;
  2249. pPackage->nCmd = thepackage.nCmd;
  2250. pPackage->nDataLen = nArchive;
  2251. pPackage->dwReserve = nCount;
  2252. BYTE *pMf = mf.Detach();
  2253. memcpy(pPackage->byBody, pMf, nArchive);
  2254. if (pMf)
  2255. delete pMf;
  2256. }
  2257. return HR_IGNORE;
  2258. }
  2259. // 顾客信息;
  2260. void CServerPtr::New_CustomerInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2261. {
  2262. CMemFile mf;
  2263. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  2264. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  2265. CArchive ar(&mf, CArchive::load);
  2266. CCustomerInfoObj tagCustomerInfoObj;
  2267. tagCustomerInfoObj.Serialize(ar);
  2268. ar.Close();
  2269. mf.Detach();
  2270. CString strSQL = _T("");
  2271. strSQL.Format(_T("INSERT INTO [CustomerInfo](")
  2272. _T("[StudioID],")
  2273. _T("[CustomerID],")
  2274. _T("[CustomerName],")
  2275. _T("[CustomerGender],")
  2276. _T("[CustomerPhone],")
  2277. _T("[CustomerQQ],")
  2278. _T("[CustomerWX],")
  2279. _T("[CustomerEMail],")
  2280. _T("[CustomerFrom],")
  2281. _T("[CustomerAddress],")
  2282. _T("[CustomerBirthday],")
  2283. _T("[CustomerNote])")
  2284. _T("VALUES('%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')"),
  2285. thepackage.szStudioId,
  2286. tagCustomerInfoObj.m_CustomerID,
  2287. tagCustomerInfoObj.m_CustomerName,
  2288. tagCustomerInfoObj.m_CustomerGender,
  2289. tagCustomerInfoObj.m_CustomerPhone,
  2290. tagCustomerInfoObj.m_CustomerQQ,
  2291. tagCustomerInfoObj.m_CustomerWX,
  2292. tagCustomerInfoObj.m_CustomerEMail,
  2293. tagCustomerInfoObj.m_CustomerFrom,
  2294. tagCustomerInfoObj.m_CustomerAddress,
  2295. tagCustomerInfoObj.m_CustomerBirthday,
  2296. tagCustomerInfoObj.m_CustomerNote);
  2297. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  2298. // 返回信息;
  2299. dwSendLen = sizeof(TheProPackage);
  2300. pSendData = new BYTE[dwSendLen];
  2301. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2302. pPackage->flag = PACKAGE_ONESELF;
  2303. pPackage->nCmd = thepackage.nCmd;
  2304. pPackage->nDataLen = 0;
  2305. pPackage->dwReserve = bRet;
  2306. }
  2307. void CServerPtr::Del_CustomerInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2308. {
  2309. INT nlen = nReceiveLength - sizeof(TheProPackage) + 2;
  2310. TCHAR szCustomerID[33] = { 0 }; // 注:长度16是数据库中设定的长度;
  2311. memcpy(szCustomerID, pReceiveData + sizeof(TheProPackage) - 2, nlen);
  2312. CString strSQL;
  2313. strSQL.Format(_T("DELETE FROM [CustomerInfo] WHERE [StudioID] = '%s' AND [CustomerID] = '%s' "), thepackage.szStudioId, szCustomerID);
  2314. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  2315. // 返回信息;
  2316. dwSendLen = sizeof(TheProPackage);
  2317. pSendData = new BYTE[dwSendLen];
  2318. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2319. pPackage->flag = PACKAGE_ONESELF;
  2320. pPackage->nCmd = thepackage.nCmd;
  2321. pPackage->nDataLen = 0;
  2322. pPackage->dwReserve = bRet;
  2323. }
  2324. void CServerPtr::Mod_CustomerInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2325. {
  2326. CMemFile mf;
  2327. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  2328. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  2329. CArchive ar(&mf, CArchive::load);
  2330. CCustomerInfoObj tagCustomerInfoObj;
  2331. tagCustomerInfoObj.Serialize(ar);
  2332. ar.Close();
  2333. mf.Detach();
  2334. CString strSQL = _T("");
  2335. strSQL.Format(_T("UPDATE [CustomerInfo] SET ")
  2336. _T("[CustomerName] = '%s', ")
  2337. _T("[CustomerGender] = %d,")
  2338. _T("[CustomerPhone] = '%s',")
  2339. _T("[CustomerQQ] = '%s',")
  2340. _T("[CustomerWX] = '%s',")
  2341. _T("[CustomerEMail] = '%s',")
  2342. _T("[CustomerFrom] = '%s',")
  2343. _T("[CustomerAddress] = '%s',")
  2344. _T("[CustomerBirthday] = '%s',")
  2345. _T("[CustomerNote] = '%s' ")
  2346. _T("WHERE [StudioID] = '%s' AND [CustomerID] = '%s'"),
  2347. tagCustomerInfoObj.m_CustomerName,
  2348. tagCustomerInfoObj.m_CustomerGender,
  2349. tagCustomerInfoObj.m_CustomerPhone,
  2350. tagCustomerInfoObj.m_CustomerQQ,
  2351. tagCustomerInfoObj.m_CustomerWX,
  2352. tagCustomerInfoObj.m_CustomerEMail,
  2353. tagCustomerInfoObj.m_CustomerFrom,
  2354. tagCustomerInfoObj.m_CustomerAddress,
  2355. tagCustomerInfoObj.m_CustomerNote,
  2356. thepackage.szStudioId,
  2357. tagCustomerInfoObj.m_CustomerID);
  2358. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  2359. // 返回信息;
  2360. dwSendLen = sizeof(TheProPackage);
  2361. pSendData = new BYTE[dwSendLen];
  2362. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2363. pPackage->flag = PACKAGE_ONESELF;
  2364. pPackage->nCmd = thepackage.nCmd;
  2365. pPackage->nDataLen = 0;
  2366. pPackage->dwReserve = bRet;
  2367. }
  2368. EnHandleResult CServerPtr::Ask_CustomerInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2369. {
  2370. INT nlen = nReceiveLength - sizeof(TheProPackage) + 2;
  2371. TCHAR *pFilter = NULL;
  2372. if (nlen != 0)
  2373. {
  2374. pFilter = new TCHAR[nlen];
  2375. memcpy(pFilter, pReceiveData + sizeof(TheProPackage) - 2, nlen);
  2376. }
  2377. CObList tagCustomerInfoArray;
  2378. INT nCount = g_pODBCPool->QueryCustomerInfo(thepackage.szStudioId, &tagCustomerInfoArray, pFilter);
  2379. CMemFile mf;
  2380. CArchive ar(&mf, CArchive::store);
  2381. tagCustomerInfoArray.Serialize(ar);
  2382. ar.Close();
  2383. // 删除列表对象;
  2384. POSITION pos = tagCustomerInfoArray.GetHeadPosition();
  2385. while (pos)
  2386. {
  2387. CCustomerInfoObj *pCustomerInfoObj = (CCustomerInfoObj*)tagCustomerInfoArray.GetNext(pos);
  2388. if (pCustomerInfoObj)
  2389. delete pCustomerInfoObj;
  2390. }
  2391. tagCustomerInfoArray.RemoveAll();
  2392. BOOL bResult = FALSE;
  2393. __int64 nArchive = mf.GetLength();
  2394. if ((nArchive + sizeof(TheProPackage) - 2) > 0x3FFFFF)
  2395. {
  2396. __int64 nSubLen = nArchive;
  2397. BYTE *pMf = mf.Detach();
  2398. while (nSubLen > 0)
  2399. {
  2400. if (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2 > 0)
  2401. dwSendLen = 0x3FFFFF;
  2402. else
  2403. dwSendLen = nSubLen + sizeof(TheProPackage) - 2;
  2404. pSendData = new BYTE[dwSendLen];
  2405. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2406. pPackage->flag = PACKAGE_MULTIPLE;
  2407. pPackage->nCmd = thepackage.nCmd;
  2408. pPackage->nDataLen = nArchive;
  2409. pPackage->nSubDataLen = (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2) > 0 ? (0x3FFFFF - sizeof(TheProPackage) + 2) : nSubLen;
  2410. pPackage->dwReserve = nCount;
  2411. memcpy(pPackage->byBody, pMf + nArchive - nSubLen, pPackage->nSubDataLen);
  2412. nSubLen -= (0x3FFFFF - sizeof(TheProPackage) + 2);
  2413. bResult = ::HP_Server_Send(m_spThis->m_pServer, dwConnID, pSendData, dwSendLen);
  2414. if (pSendData)
  2415. delete[]pSendData;
  2416. pSendData = NULL;
  2417. if (!bResult)
  2418. {
  2419. if (pMf)
  2420. delete pMf;
  2421. return HR_ERROR;
  2422. }
  2423. }
  2424. if (pMf)
  2425. delete pMf;
  2426. return HR_OK;
  2427. }
  2428. else
  2429. {// 单包;
  2430. dwSendLen = sizeof(TheProPackage) - 2 + nArchive;
  2431. pSendData = new BYTE[dwSendLen];
  2432. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2433. pPackage->flag = PACKAGE_ONESELF;
  2434. pPackage->nCmd = thepackage.nCmd;
  2435. pPackage->nDataLen = nArchive;
  2436. pPackage->dwReserve = nCount;
  2437. BYTE *pMf = mf.Detach();
  2438. memcpy(pPackage->byBody, pMf, nArchive);
  2439. if (pMf)
  2440. delete pMf;
  2441. }
  2442. return HR_IGNORE;
  2443. }
  2444. // 顾客来源;
  2445. void CServerPtr::New_CustomerFrom(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2446. {
  2447. CMemFile mf;
  2448. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  2449. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  2450. CArchive ar(&mf, CArchive::load);
  2451. CCustomerFromObj tagCustomerFromObj;
  2452. tagCustomerFromObj.Serialize(ar);
  2453. ar.Close();
  2454. mf.Detach();
  2455. CString strSQL = _T("");
  2456. strSQL.Format(_T("INSERT INTO [dbo].[CustomerFrom]([StudioID],[CustomerFrom],[CustomerFromNote])VALUES('%s','%s','%s')"),
  2457. thepackage.szStudioId, tagCustomerFromObj.m_CustomerFrom, tagCustomerFromObj.m_CustomerFromNote);
  2458. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  2459. // 返回信息;
  2460. dwSendLen = sizeof(TheProPackage);
  2461. pSendData = new BYTE[dwSendLen];
  2462. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2463. pPackage->flag = PACKAGE_ONESELF;
  2464. pPackage->nCmd = thepackage.nCmd;
  2465. pPackage->nDataLen = 0;
  2466. pPackage->dwReserve = bRet;
  2467. }
  2468. void CServerPtr::Del_CustomerFrom(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2469. {
  2470. INT nlen = nReceiveLength - sizeof(TheProPackage) + 2;
  2471. TCHAR szCustomerFrom[17] = { 0 }; // 注:长度16是数据库中设定的长度;
  2472. memcpy(szCustomerFrom, pReceiveData + sizeof(TheProPackage) - 2, nlen);
  2473. CString strSQL;
  2474. strSQL.Format(_T("DELETE FROM [dbo].[CustomerFrom] WHERE [StudioID] = '%s' and [CustomerFrom] = '%s' "), thepackage.szStudioId, szCustomerFrom);
  2475. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  2476. // 返回信息;
  2477. dwSendLen = sizeof(TheProPackage);
  2478. pSendData = new BYTE[dwSendLen];
  2479. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2480. pPackage->flag = PACKAGE_ONESELF;
  2481. pPackage->nCmd = thepackage.nCmd;
  2482. pPackage->nDataLen = 0;
  2483. pPackage->dwReserve = bRet;
  2484. }
  2485. void CServerPtr::Mod_CustomerFrom(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2486. {
  2487. CMemFile mf;
  2488. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  2489. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  2490. CArchive ar(&mf, CArchive::load);
  2491. CCustomerFromObj tagCustomerFromObj;
  2492. tagCustomerFromObj.Serialize(ar);
  2493. ar.Close();
  2494. mf.Detach();
  2495. CString strSQL = _T("");
  2496. strSQL.Format(_T("UPDATE [dbo].[CustomerFrom] SET [CustomerFromNote] = '%s' WHERE [StudioID] = '%s' AND [CustomerFrom] = '%s'"),
  2497. tagCustomerFromObj.m_CustomerFromNote, thepackage.szStudioId, tagCustomerFromObj.m_CustomerFrom);
  2498. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  2499. // 返回信息;
  2500. dwSendLen = sizeof(TheProPackage);
  2501. pSendData = new BYTE[dwSendLen];
  2502. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2503. pPackage->flag = PACKAGE_ONESELF;
  2504. pPackage->nCmd = thepackage.nCmd;
  2505. pPackage->nDataLen = 0;
  2506. pPackage->dwReserve = bRet;
  2507. }
  2508. EnHandleResult CServerPtr::Ask_CustomerFrom(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2509. {
  2510. CObList tagCustomerFromArray;
  2511. INT nCount = g_pODBCPool->QueryCustomerType(thepackage.szStudioId, &tagCustomerFromArray);
  2512. CMemFile mf;
  2513. CArchive ar(&mf, CArchive::store);
  2514. tagCustomerFromArray.Serialize(ar);
  2515. ar.Close();
  2516. // 删除列表对象;
  2517. POSITION pos = tagCustomerFromArray.GetHeadPosition();
  2518. while (pos)
  2519. {
  2520. CCustomerFromObj *pCustomerFromObj = (CCustomerFromObj*)tagCustomerFromArray.GetNext(pos);
  2521. if (pCustomerFromObj)
  2522. delete pCustomerFromObj;
  2523. }
  2524. tagCustomerFromArray.RemoveAll();
  2525. BOOL bResult = FALSE;
  2526. __int64 nArchive = mf.GetLength();
  2527. if ((nArchive + sizeof(TheProPackage) - 2) > 0x3FFFFF)
  2528. {
  2529. __int64 nSubLen = nArchive;
  2530. BYTE *pMf = mf.Detach();
  2531. while (nSubLen > 0)
  2532. {
  2533. if (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2 > 0)
  2534. dwSendLen = 0x3FFFFF;
  2535. else
  2536. dwSendLen = nSubLen + sizeof(TheProPackage) - 2;
  2537. pSendData = new BYTE[dwSendLen];
  2538. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2539. pPackage->flag = PACKAGE_MULTIPLE;
  2540. pPackage->nCmd = thepackage.nCmd;
  2541. pPackage->nDataLen = nArchive;
  2542. pPackage->nSubDataLen = (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2) > 0 ? (0x3FFFFF - sizeof(TheProPackage) + 2) : nSubLen;
  2543. pPackage->dwReserve = nCount;
  2544. memcpy(pPackage->byBody, pMf + nArchive - nSubLen, pPackage->nSubDataLen);
  2545. nSubLen -= (0x3FFFFF - sizeof(TheProPackage) + 2);
  2546. bResult = ::HP_Server_Send(m_spThis->m_pServer, dwConnID, pSendData, dwSendLen);
  2547. if (pSendData)
  2548. delete[]pSendData;
  2549. pSendData = NULL;
  2550. if (!bResult)
  2551. {
  2552. if (pMf)
  2553. delete pMf;
  2554. return HR_ERROR;
  2555. }
  2556. }
  2557. if (pMf)
  2558. delete pMf;
  2559. return HR_OK;
  2560. }
  2561. else
  2562. {// 单包;
  2563. dwSendLen = sizeof(TheProPackage) - 2 + nArchive;
  2564. pSendData = new BYTE[dwSendLen];
  2565. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2566. pPackage->flag = PACKAGE_ONESELF;
  2567. pPackage->nCmd = thepackage.nCmd;
  2568. pPackage->nDataLen = nArchive;
  2569. pPackage->dwReserve = nCount;
  2570. BYTE *pMf = mf.Detach();
  2571. memcpy(pPackage->byBody, pMf, nArchive);
  2572. if (pMf)
  2573. delete pMf;
  2574. }
  2575. return HR_IGNORE;
  2576. }
  2577. // 订单类型;
  2578. void CServerPtr::New_OrderType(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2579. {
  2580. CMemFile mf;
  2581. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  2582. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  2583. CArchive ar(&mf, CArchive::load);
  2584. COrderTypeObj tagOrderTypeObj;
  2585. tagOrderTypeObj.Serialize(ar);
  2586. ar.Close();
  2587. mf.Detach();
  2588. CString strSQL = _T("");
  2589. strSQL.Format(_T("INSERT INTO [OrderType]([StudioID],[OrderTypesName],[OrderTypesNote]) VALUES ('%s','%s','%s')"),
  2590. thepackage.szStudioId, tagOrderTypeObj.m_OrderTypesName, tagOrderTypeObj.m_OrderTypesNote);
  2591. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  2592. // 返回信息;
  2593. dwSendLen = sizeof(TheProPackage);
  2594. pSendData = new BYTE[dwSendLen];
  2595. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2596. pPackage->flag = PACKAGE_ONESELF;
  2597. pPackage->nCmd = thepackage.nCmd;
  2598. pPackage->nDataLen = 0;
  2599. pPackage->dwReserve = bRet;
  2600. }
  2601. void CServerPtr::Del_OrderType(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2602. {
  2603. INT nlen = nReceiveLength - sizeof(TheProPackage) + 2;
  2604. TCHAR szOrderTypeName[9] = { 0 }; // 注:长度16是数据库中设定的长度;
  2605. memcpy(szOrderTypeName, pReceiveData + sizeof(TheProPackage) - 2, nlen);
  2606. CString strSQL;
  2607. strSQL.Format(_T("DELETE FROM [OrderType] WHERE [StudioID] = '%s' and [OrderTypesName] = '%s' "), thepackage.szStudioId, szOrderTypeName);
  2608. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  2609. // 返回信息;
  2610. dwSendLen = sizeof(TheProPackage);
  2611. pSendData = new BYTE[dwSendLen];
  2612. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2613. pPackage->flag = PACKAGE_ONESELF;
  2614. pPackage->nCmd = thepackage.nCmd;
  2615. pPackage->nDataLen = 0;
  2616. pPackage->dwReserve = bRet;
  2617. }
  2618. void CServerPtr::Mod_OrderType(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2619. {
  2620. CMemFile mf;
  2621. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  2622. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  2623. CArchive ar(&mf, CArchive::load);
  2624. COrderType tagOrderTypeObj;
  2625. tagOrderTypeObj.Serialize(ar);
  2626. ar.Close();
  2627. mf.Detach();
  2628. CString strSQL = _T("");
  2629. strSQL.Format(_T("UPDATE [OrderType] SET [OrderTypesNote] = '%s' WHERE [StudioID] = '%s' AND [OrderTypesName] = '%s')"),
  2630. tagOrderTypeObj.m_OrderTypesNote, thepackage.szStudioId, tagOrderTypeObj.m_OrderTypesName);
  2631. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  2632. // 返回信息;
  2633. dwSendLen = sizeof(TheProPackage);
  2634. pSendData = new BYTE[dwSendLen];
  2635. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2636. pPackage->flag = PACKAGE_ONESELF;
  2637. pPackage->nCmd = thepackage.nCmd;
  2638. pPackage->nDataLen = 0;
  2639. pPackage->dwReserve = bRet;
  2640. }
  2641. EnHandleResult CServerPtr::Ask_OrderType(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2642. {
  2643. CObList tagOrderTypeArray;
  2644. INT nCount = g_pODBCPool->QueryOrderType(thepackage.szStudioId, &tagOrderTypeArray);
  2645. CMemFile mf;
  2646. CArchive ar(&mf, CArchive::store);
  2647. tagOrderTypeArray.Serialize(ar);
  2648. ar.Close();
  2649. // 删除列表对象;
  2650. POSITION pos = tagOrderTypeArray.GetHeadPosition();
  2651. while (pos)
  2652. {
  2653. COrderTypeObj *pOrderTypeObj = (COrderTypeObj*)tagOrderTypeArray.GetNext(pos);
  2654. if (pOrderTypeObj)
  2655. delete pOrderTypeObj;
  2656. }
  2657. tagOrderTypeArray.RemoveAll();
  2658. BOOL bResult = FALSE;
  2659. __int64 nArchive = mf.GetLength();
  2660. if ((nArchive + sizeof(TheProPackage) - 2) > 0x3FFFFF)
  2661. {
  2662. __int64 nSubLen = nArchive;
  2663. BYTE *pMf = mf.Detach();
  2664. while (nSubLen > 0)
  2665. {
  2666. if (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2 > 0)
  2667. dwSendLen = 0x3FFFFF;
  2668. else
  2669. dwSendLen = nSubLen + sizeof(TheProPackage) - 2;
  2670. pSendData = new BYTE[dwSendLen];
  2671. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2672. pPackage->flag = PACKAGE_MULTIPLE;
  2673. pPackage->nCmd = thepackage.nCmd;
  2674. pPackage->nDataLen = nArchive;
  2675. pPackage->nSubDataLen = (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2) > 0 ? (0x3FFFFF - sizeof(TheProPackage) + 2) : nSubLen;
  2676. pPackage->dwReserve = nCount;
  2677. memcpy(pPackage->byBody, pMf + nArchive - nSubLen, pPackage->nSubDataLen);
  2678. nSubLen -= (0x3FFFFF - sizeof(TheProPackage) + 2);
  2679. bResult = ::HP_Server_Send(m_spThis->m_pServer, dwConnID, pSendData, dwSendLen);
  2680. if (pSendData)
  2681. delete[]pSendData;
  2682. pSendData = NULL;
  2683. if (!bResult)
  2684. {
  2685. if (pMf)
  2686. delete pMf;
  2687. return HR_ERROR;
  2688. }
  2689. }
  2690. if (pMf)
  2691. delete pMf;
  2692. return HR_OK;
  2693. }
  2694. else
  2695. {// 单包;
  2696. dwSendLen = sizeof(TheProPackage) - 2 + nArchive;
  2697. pSendData = new BYTE[dwSendLen];
  2698. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2699. pPackage->flag = PACKAGE_ONESELF;
  2700. pPackage->nCmd = thepackage.nCmd;
  2701. pPackage->nDataLen = nArchive;
  2702. pPackage->dwReserve = nCount;
  2703. BYTE *pMf = mf.Detach();
  2704. memcpy(pPackage->byBody, pMf, nArchive);
  2705. if (pMf)
  2706. delete pMf;
  2707. }
  2708. return HR_IGNORE;
  2709. }
  2710. // 订单信息;
  2711. void CServerPtr::New_OrderInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2712. {
  2713. CMemFile mf;
  2714. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  2715. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  2716. CArchive ar(&mf, CArchive::load);
  2717. COrderInfoObj tagOrderInfoObj;
  2718. tagOrderInfoObj.Serialize(ar);
  2719. ar.Close();
  2720. mf.Detach();
  2721. INT nMaxId = Ask_OrderSerialNum(thepackage.szStudioId);
  2722. tagOrderInfoObj.m_OrderNum.Format(_T("%s-%03d"), CTime::GetCurrentTime().Format(_T("%Y%m%d")), ++nMaxId);
  2723. CString strSQL = _T("");
  2724. strSQL.Format(_T("INSERT INTO [OrderInfo](")
  2725. _T("[StudioID]")
  2726. _T(",[OrderNum]")
  2727. _T(",[CustomerFrom]")
  2728. _T(",[CustomerName]")
  2729. _T(",[CustomerGender]")
  2730. _T(",[CustomerPhone]")
  2731. _T(",[OrderAmountPaid]")
  2732. _T(",[OrderSignPerson]")
  2733. _T(",[OrderTypes]")
  2734. _T(",[OrderSubsist]")
  2735. _T(",[OrderPackageAlbum]")
  2736. _T(",[OrderPackageFilm]")
  2737. _T(",[OrderFinishStatus]")
  2738. _T(",[OrderFinishTime]")
  2739. _T(",[OrderGenerateDate]")
  2740. _T(",[OrderSelectionStatus]")
  2741. _T(",[OrderExraPhoto]")
  2742. _T(",[OrderAdditionalAmount]")
  2743. _T(",[OrderLateStageAmount]")
  2744. _T(",[OrderPackageName]")
  2745. _T(",[OrderPackageSales]")
  2746. _T(",[OrderPackageType]")
  2747. _T(",[OrderSelectionAppointment]")
  2748. _T(",[OrderSelectionFinishDate]")
  2749. _T(",[OrderNote]")
  2750. _T(",[OrderSelectionNote])")
  2751. _T("VALUES ('%s','%s','%s','%s',%d,'%s',%lf,'%s','%s',%lf,%d, %d, %d, '%s','%s',%d,%d,%lf,%lf,'%s',%lf,'%s','%s','%s','%s','%s')"),
  2752. thepackage.szStudioId,
  2753. tagOrderInfoObj.m_OrderNum,
  2754. tagOrderInfoObj.m_CustomerFrom,
  2755. tagOrderInfoObj.m_CustomerName,
  2756. tagOrderInfoObj.m_CustomerGender,
  2757. tagOrderInfoObj.m_CustomerPhone,
  2758. tagOrderInfoObj.m_OrderAmountPaid,
  2759. tagOrderInfoObj.m_OrderSignPerson,
  2760. tagOrderInfoObj.m_OrderTypes,
  2761. tagOrderInfoObj.m_OrderSubsist,
  2762. tagOrderInfoObj.m_OrderPackageAlbum,
  2763. tagOrderInfoObj.m_OrderPackageFilm,
  2764. tagOrderInfoObj.m_OrderFinishStatus,
  2765. tagOrderInfoObj.m_OrderFinishTime,
  2766. tagOrderInfoObj.m_OrderGenerateDate,
  2767. tagOrderInfoObj.m_OrderSelectionStatus,
  2768. tagOrderInfoObj.m_OrderExtraPhoto,
  2769. tagOrderInfoObj.m_OrderAdditionalAmount,
  2770. tagOrderInfoObj.m_OrderLateStageAmount,
  2771. tagOrderInfoObj.m_OrderPackageName,
  2772. tagOrderInfoObj.m_OrderPackageSales,
  2773. tagOrderInfoObj.m_OrderPackageType,
  2774. tagOrderInfoObj.m_OrderSelectionAppointment,
  2775. tagOrderInfoObj.m_OrderSelectionFinishDate,
  2776. tagOrderInfoObj.m_OrderNote,
  2777. tagOrderInfoObj.m_OrderSelectionNote);
  2778. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  2779. // 返回信息;
  2780. dwSendLen = sizeof(TheProPackage);
  2781. pSendData = new BYTE[dwSendLen];
  2782. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2783. pPackage->flag = PACKAGE_ONESELF;
  2784. pPackage->nCmd = thepackage.nCmd;
  2785. pPackage->nDataLen = 0;
  2786. pPackage->dwReserve = bRet;
  2787. }
  2788. void CServerPtr::Del_OrderInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2789. {
  2790. INT nlen = nReceiveLength - sizeof(TheProPackage) + 2;
  2791. TCHAR szOrderNum[25] = { 0 }; // 注:长度16是数据库中设定的长度;
  2792. memcpy(szOrderNum, pReceiveData + sizeof(TheProPackage) - 2, nlen);
  2793. CString strSQL;
  2794. strSQL.Format(_T("DELETE FROM [OrderInfo] WHERE [StudioID] = '%s' and [OrderNum] = '%s' "), thepackage.szStudioId, szOrderNum);
  2795. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  2796. // 返回信息;
  2797. dwSendLen = sizeof(TheProPackage);
  2798. pSendData = new BYTE[dwSendLen];
  2799. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2800. pPackage->flag = PACKAGE_ONESELF;
  2801. pPackage->nCmd = thepackage.nCmd;
  2802. pPackage->nDataLen = 0;
  2803. pPackage->dwReserve = bRet;
  2804. }
  2805. void CServerPtr::Mod_OrderInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2806. {
  2807. CMemFile mf;
  2808. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  2809. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  2810. CArchive ar(&mf, CArchive::load);
  2811. COrderInfoObj tagOrderInfoObj;
  2812. tagOrderInfoObj.Serialize(ar);
  2813. ar.Close();
  2814. mf.Detach();
  2815. CString strSQL = _T("");
  2816. strSQL.Format(_T("UPDATE [OrderInfo]")
  2817. _T("SET [CustomerFrom] = '%s'")
  2818. _T(",[CustomerName] = '%s'")
  2819. _T(",[CustomerGender] = %d")
  2820. _T(",[CustomerPhone] = '%s'")
  2821. _T(",[OrderAmountPaid] = %lf")
  2822. _T(",[OrderSignPerson] = '%s'")
  2823. _T(",[OrderTypes] = '%s'")
  2824. _T(",[OrderSubsist] = %lf")
  2825. _T(",[OrderFinishStatus] = %d")
  2826. _T(",[OrderFinishTime] = '%s'")
  2827. _T(",[OrderGenerateDate] = '%s'")
  2828. _T(",[OrderSelectionStatus] = %d")
  2829. _T(",[OrderExraPhoto] = %d")
  2830. _T(",[OrderAdditionalAmount] = %lf")
  2831. _T(",[OrderLateStageAmount] = %lf")
  2832. _T(",[OrderPackageName] = '%s'")
  2833. _T(",[OrderPackageSales] = %lf")
  2834. _T(",[OrderPackageType] = '%s'")
  2835. _T(",[OrderSelectionAppointment] = '%s'")
  2836. _T(",[OrderSelectionFinishDate] = '%s'")
  2837. _T(",[OrderNote] = '%s'")
  2838. _T(",[OrderSelectionNote] = '%s'")
  2839. _T(",[CustomerRequirements] = '%s'")
  2840. _T("WHERE [StudioID] = '%s' AND [OrderNum] = '%s'"),
  2841. tagOrderInfoObj.m_CustomerFrom,
  2842. tagOrderInfoObj.m_CustomerName,
  2843. tagOrderInfoObj.m_CustomerGender,
  2844. tagOrderInfoObj.m_CustomerPhone,
  2845. tagOrderInfoObj.m_OrderAmountPaid,
  2846. tagOrderInfoObj.m_OrderSignPerson,
  2847. tagOrderInfoObj.m_OrderTypes,
  2848. tagOrderInfoObj.m_OrderSubsist,
  2849. tagOrderInfoObj.m_OrderFinishStatus,
  2850. tagOrderInfoObj.m_OrderFinishTime,
  2851. tagOrderInfoObj.m_OrderGenerateDate,
  2852. tagOrderInfoObj.m_OrderSelectionStatus,
  2853. tagOrderInfoObj.m_OrderExtraPhoto,
  2854. tagOrderInfoObj.m_OrderAdditionalAmount,
  2855. tagOrderInfoObj.m_OrderLateStageAmount,
  2856. tagOrderInfoObj.m_OrderPackageName,
  2857. tagOrderInfoObj.m_OrderPackageSales,
  2858. tagOrderInfoObj.m_OrderPackageType,
  2859. tagOrderInfoObj.m_OrderSelectionAppointment,
  2860. tagOrderInfoObj.m_OrderSelectionFinishDate,
  2861. tagOrderInfoObj.m_OrderNote,
  2862. tagOrderInfoObj.m_OrderSelectionNote,
  2863. tagOrderInfoObj.m_CustomerRequirements,
  2864. thepackage.szStudioId,
  2865. tagOrderInfoObj.m_OrderNum);
  2866. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  2867. // 返回信息;
  2868. dwSendLen = sizeof(TheProPackage);
  2869. pSendData = new BYTE[dwSendLen];
  2870. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2871. pPackage->flag = PACKAGE_ONESELF;
  2872. pPackage->nCmd = thepackage.nCmd;
  2873. pPackage->nDataLen = 0;
  2874. pPackage->dwReserve = bRet;
  2875. }
  2876. void CServerPtr::Mod_OrderInfo2(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2877. {
  2878. CMemFile mf;
  2879. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  2880. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  2881. CArchive ar(&mf, CArchive::load);
  2882. COrderInfoObj tagOrderInfoObj;
  2883. tagOrderInfoObj.Serialize(ar);
  2884. ar.Close();
  2885. mf.Detach();
  2886. CString strSQL = _T("");
  2887. strSQL.Format(_T("UPDATE [OrderInfo] SET ")
  2888. _T("[OrderSelectionStatus] = %d")
  2889. _T(",[OrderExraPhoto] = %d")
  2890. _T(",[OrderAdditionalAmount] = %lf")
  2891. _T(",[OrderLateStageAmount] = %lf")
  2892. _T(",[OrderSelectionAppointment] = '%s'")
  2893. _T(",[OrderSelectionFinishDate] = '%s'")
  2894. _T(",[OrderSelectionNote] = '%s'")
  2895. _T(",[CustomerRequirements] = '%s'")
  2896. _T("WHERE [StudioID] = '%s' AND [OrderNum] = '%s'"),
  2897. tagOrderInfoObj.m_OrderSelectionStatus,
  2898. tagOrderInfoObj.m_OrderExtraPhoto,
  2899. tagOrderInfoObj.m_OrderAdditionalAmount,
  2900. tagOrderInfoObj.m_OrderLateStageAmount,
  2901. tagOrderInfoObj.m_OrderSelectionAppointment,
  2902. tagOrderInfoObj.m_OrderSelectionFinishDate,
  2903. tagOrderInfoObj.m_OrderSelectionNote,
  2904. tagOrderInfoObj.m_CustomerRequirements,
  2905. thepackage.szStudioId,
  2906. tagOrderInfoObj.m_OrderNum);
  2907. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  2908. // 返回信息;
  2909. dwSendLen = sizeof(TheProPackage);
  2910. pSendData = new BYTE[dwSendLen];
  2911. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2912. pPackage->flag = PACKAGE_ONESELF;
  2913. pPackage->nCmd = thepackage.nCmd;
  2914. pPackage->nDataLen = 0;
  2915. pPackage->dwReserve = bRet;
  2916. }
  2917. EnHandleResult CServerPtr::Ask_OrderInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  2918. {
  2919. INT nlen = nReceiveLength - sizeof(TheProPackage) + 2;
  2920. TCHAR *pFilter = new TCHAR[nlen];
  2921. memcpy(pFilter, pReceiveData + sizeof(TheProPackage) - 2, nlen);
  2922. CObList tagOrderInfoArray;
  2923. INT nCount = g_pODBCPool->QueryOrderInfo(thepackage.szStudioId, &tagOrderInfoArray, pFilter);
  2924. CMemFile mf;
  2925. CArchive ar(&mf, CArchive::store);
  2926. tagOrderInfoArray.Serialize(ar);
  2927. ar.Close();
  2928. // 删除列表对象;
  2929. POSITION pos = tagOrderInfoArray.GetHeadPosition();
  2930. while (pos)
  2931. {
  2932. COrderInfoObj *pOrderInfoObj = (COrderInfoObj*)tagOrderInfoArray.GetNext(pos);
  2933. if (pOrderInfoObj)
  2934. delete pOrderInfoObj;
  2935. }
  2936. tagOrderInfoArray.RemoveAll();
  2937. BOOL bResult = FALSE;
  2938. __int64 nArchive = mf.GetLength();
  2939. BYTE *pMf = mf.Detach();
  2940. #if 0 // 使用lzmar压缩数据比不压缩要慢更多;
  2941. byte prop[5] = { 0 };
  2942. size_t nPropSize = 5;
  2943. size_t nDesLen = nArchive;
  2944. BYTE *pDesData = new BYTE[nDesLen];
  2945. int nRet = LzmaCompress(pDesData, &nDesLen, pMf, nArchive, prop, &nPropSize, 9, 1 << 24, 3, 0, 2, 32, 2);
  2946. while (SZ_ERROR_OUTPUT_EOF == nRet)
  2947. {//申请内存不足;
  2948. delete[]pDesData;
  2949. nDesLen += nArchive;
  2950. pDesData = new BYTE[nDesLen];
  2951. nRet = LzmaCompress(pDesData, &nDesLen, pMf, nArchive, prop, &nPropSize, 9, (1 << 24), 3, 0, 2, 32, 2);
  2952. }
  2953. if (pMf)
  2954. delete[]pMf;
  2955. if ((nDesLen + sizeof(TheProPackage) - 2) > 0x3FFFFF)
  2956. {
  2957. __int64 nSubLen = nDesLen;
  2958. while (nSubLen > 0)
  2959. {
  2960. if (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2 > 0)
  2961. dwSendLen = 0x3FFFFF;
  2962. else
  2963. dwSendLen = nSubLen + sizeof(TheProPackage) - 2;
  2964. pSendData = new BYTE[dwSendLen];
  2965. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2966. pPackage->flag = PACKAGE_MULTIPLE;
  2967. pPackage->nCmd = thepackage.nCmd;
  2968. pPackage->nUnCompressLen = nArchive;
  2969. pPackage->nDataLen = nDesLen;
  2970. pPackage->nSubDataLen = (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2) > 0 ? (0x3FFFFF - sizeof(TheProPackage) + 2) : nSubLen;
  2971. pPackage->dwReserve = nCount;
  2972. memcpy(pPackage->byProp, prop, 5);
  2973. memcpy(pPackage->byBody, pDesData + nDesLen - nSubLen, pPackage->nSubDataLen);
  2974. nSubLen -= (0x3FFFFF - sizeof(TheProPackage) + 2);
  2975. bResult = ::HP_Server_Send(m_spThis->m_pServer, dwConnID, pSendData, dwSendLen);
  2976. if (pSendData)
  2977. delete[]pSendData;
  2978. pSendData = NULL;
  2979. if (!bResult)
  2980. {
  2981. if (pDesData)
  2982. delete pDesData;
  2983. return HR_ERROR;
  2984. }
  2985. }
  2986. if (pDesData)
  2987. delete pDesData;
  2988. return HR_OK;
  2989. }
  2990. else
  2991. {// 单包;
  2992. dwSendLen = sizeof(TheProPackage) - 2 + nDesLen;
  2993. pSendData = new BYTE[dwSendLen];
  2994. TheProPackage *pPackage = (TheProPackage*)pSendData;
  2995. pPackage->flag = PACKAGE_ONESELF;
  2996. pPackage->nCmd = thepackage.nCmd;
  2997. pPackage->nUnCompressLen = nArchive;
  2998. pPackage->nDataLen = nDesLen;
  2999. pPackage->dwReserve = nCount;
  3000. memcpy(pPackage->byProp, prop, 5);
  3001. memcpy(pPackage->byBody, pDesData, nDesLen);
  3002. if (pDesData)
  3003. delete pDesData;
  3004. }
  3005. #else
  3006. if ((nArchive + sizeof(TheProPackage) - 2) > 0x3FFFFF)
  3007. {
  3008. __int64 nSubLen = nArchive;
  3009. while (nSubLen > 0)
  3010. {
  3011. if (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2 > 0)
  3012. dwSendLen = 0x3FFFFF;
  3013. else
  3014. dwSendLen = nSubLen + sizeof(TheProPackage) - 2;
  3015. pSendData = new BYTE[dwSendLen];
  3016. TheProPackage *pPackage = (TheProPackage*)pSendData;
  3017. pPackage->flag = PACKAGE_MULTIPLE;
  3018. pPackage->nCmd = thepackage.nCmd;
  3019. pPackage->nDataLen = nArchive;
  3020. pPackage->nSubDataLen = (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2) > 0 ? (0x3FFFFF - sizeof(TheProPackage) + 2) : nSubLen;
  3021. pPackage->dwReserve = nCount;
  3022. memcpy(pPackage->byBody, pMf + nArchive - nSubLen, pPackage->nSubDataLen);
  3023. nSubLen -= (0x3FFFFF - sizeof(TheProPackage) + 2);
  3024. bResult = ::HP_Server_Send(m_spThis->m_pServer, dwConnID, pSendData, dwSendLen);
  3025. if (pSendData)
  3026. delete[]pSendData;
  3027. pSendData = NULL;
  3028. if (!bResult)
  3029. {
  3030. if (pMf)
  3031. delete pMf;
  3032. return HR_ERROR;
  3033. }
  3034. }
  3035. if (pMf)
  3036. delete pMf;
  3037. return HR_OK;
  3038. }
  3039. else
  3040. {// 单包;
  3041. dwSendLen = sizeof(TheProPackage) - 2 + nArchive;
  3042. pSendData = new BYTE[dwSendLen];
  3043. TheProPackage *pPackage = (TheProPackage*)pSendData;
  3044. pPackage->flag = PACKAGE_ONESELF;
  3045. pPackage->nCmd = thepackage.nCmd;
  3046. pPackage->nDataLen = nArchive;
  3047. pPackage->dwReserve = nCount;
  3048. memcpy(pPackage->byBody, pMf, nArchive);
  3049. if (pMf)
  3050. delete pMf;
  3051. }
  3052. #endif
  3053. return HR_IGNORE;
  3054. }
  3055. // 订单套餐信息;
  3056. void CServerPtr::New_OrderPackageItem(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  3057. {
  3058. CMemFile mf;
  3059. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  3060. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  3061. CArchive ar(&mf, CArchive::load);
  3062. COrderPackageItemsObj tagOrderItemsObj;
  3063. tagOrderItemsObj.Serialize(ar);
  3064. ar.Close();
  3065. mf.Detach();
  3066. CString strSQL = _T("");
  3067. strSQL.Format(_T("INSERT INTO [OrderPackageItems]")
  3068. _T("([StudioID]")
  3069. _T(",[OrderNum]")
  3070. _T(",[PackageItemSN]")
  3071. _T(",[PackageItemName]")
  3072. _T(",[PackageItemType]")
  3073. _T(",[PackageItemCost]")
  3074. _T(",[PackageItemSales]")
  3075. _T(",[PackageItemUnit]")
  3076. _T(",[PackageItemCount]")
  3077. _T(",[ItemRelatedPhotos]")
  3078. _T(",[ItemNote])")
  3079. _T("VALUES ('%s','%s','%s','%s','%s',%lf,%lf,'%s',%d,'%s','%s')"),
  3080. thepackage.szStudioId,
  3081. tagOrderItemsObj.m_OrderNum,
  3082. tagOrderItemsObj.m_PackageItemSN,
  3083. tagOrderItemsObj.m_PackageItemName,
  3084. tagOrderItemsObj.m_PackageItemType,
  3085. tagOrderItemsObj.m_PackageItemCost,
  3086. tagOrderItemsObj.m_PackageItemSales,
  3087. tagOrderItemsObj.m_PackageItemUnit,
  3088. tagOrderItemsObj.m_PackageItemCount,
  3089. tagOrderItemsObj.m_ItemRelatedPhotos,
  3090. tagOrderItemsObj.m_ItemNote);
  3091. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  3092. // 返回信息;
  3093. dwSendLen = sizeof(TheProPackage);
  3094. pSendData = new BYTE[dwSendLen];
  3095. TheProPackage *pPackage = (TheProPackage*)pSendData;
  3096. pPackage->flag = PACKAGE_ONESELF;
  3097. pPackage->nCmd = thepackage.nCmd;
  3098. pPackage->nDataLen = 0;
  3099. pPackage->dwReserve = bRet;
  3100. }
  3101. void CServerPtr::New_OrderPackageItem2(IN HP_CONNID dwConnID, IN const BYTE * pReceiveData, IN INT nReceiveLength, IN TheProPackage & thepackage, OUT BYTE *& pSendData, OUT DWORD & dwSendLen)
  3102. {
  3103. CMemFile mf;
  3104. mf.Attach(const_cast<BYTE*>(pReceiveData) + sizeof(TheProPackage) - 2, thepackage.nDataLen);
  3105. CArchive ar(&mf, CArchive::load);
  3106. CObList Objlist;
  3107. Objlist.Serialize(ar);
  3108. ar.Close();
  3109. mf.Detach();
  3110. // 更新所有操作;
  3111. BOOL bRet = TRUE;
  3112. BOOL bDeleted = FALSE;
  3113. CString strSQL = _T("");
  3114. POSITION pos = Objlist.GetHeadPosition();
  3115. while (pos)
  3116. {
  3117. COrderPackageItemsObj *pObj = (COrderPackageItemsObj*)Objlist.GetNext(pos);
  3118. if (!bDeleted)
  3119. {
  3120. strSQL.Format(_T("delete from [OrderPackageItems] where [StudioID] = '%s' and [OrderNum] = '%s'"), thepackage.szStudioId, pObj->m_OrderNum );
  3121. g_pODBCPool->ExecuteSQL(strSQL);
  3122. bDeleted = TRUE;
  3123. }
  3124. strSQL.Format(_T("INSERT INTO [OrderPackageItems]")
  3125. _T("([StudioID]")
  3126. _T(",[OrderNum]")
  3127. _T(",[PackageItemSN]")
  3128. _T(",[PackageItemName]")
  3129. _T(",[PackageItemType]")
  3130. _T(",[PackageItemCost]")
  3131. _T(",[PackageItemSales]")
  3132. _T(",[PackageItemUnit]")
  3133. _T(",[PackageItemCount]")
  3134. _T(",[ItemRelatedPhotos]")
  3135. _T(",[ItemNote])")
  3136. _T("VALUES ('%s','%s','%s','%s','%s',%lf,%lf,'%s',%d,'%s','%s')"),
  3137. thepackage.szStudioId,
  3138. pObj->m_OrderNum,
  3139. pObj->m_PackageItemSN,
  3140. pObj->m_PackageItemName,
  3141. pObj->m_PackageItemType,
  3142. pObj->m_PackageItemCost,
  3143. pObj->m_PackageItemSales,
  3144. pObj->m_PackageItemUnit,
  3145. pObj->m_PackageItemCount,
  3146. pObj->m_ItemRelatedPhotos,
  3147. pObj->m_ItemNote);
  3148. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  3149. }
  3150. // 返回信息;
  3151. dwSendLen = sizeof(TheProPackage);
  3152. pSendData = new BYTE[dwSendLen];
  3153. TheProPackage *pPackage = (TheProPackage*)pSendData;
  3154. pPackage->flag = PACKAGE_ONESELF;
  3155. pPackage->nCmd = thepackage.nCmd;
  3156. pPackage->nDataLen = 0;
  3157. pPackage->dwReserve = bRet;
  3158. }
  3159. void CServerPtr::Del_OrderPackageItem(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  3160. {
  3161. CString strSQL;
  3162. strSQL.Format(_T("DELETE FROM [OrderPackageItems] WHERE [StudioID] = '%s' and [AutoID] = '%s' "), thepackage.szStudioId, thepackage.dwReserve);
  3163. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  3164. // 返回信息;
  3165. dwSendLen = sizeof(TheProPackage);
  3166. pSendData = new BYTE[dwSendLen];
  3167. TheProPackage *pPackage = (TheProPackage*)pSendData;
  3168. pPackage->flag = PACKAGE_ONESELF;
  3169. pPackage->nCmd = thepackage.nCmd;
  3170. pPackage->nDataLen = 0;
  3171. pPackage->dwReserve = bRet;
  3172. }
  3173. void CServerPtr::Mod_OrderPackageItem(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  3174. {
  3175. CMemFile mf;
  3176. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  3177. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  3178. CArchive ar(&mf, CArchive::load);
  3179. COrderPackageItemsObj tagOrderItemsObj;
  3180. tagOrderItemsObj.Serialize(ar);
  3181. ar.Close();
  3182. mf.Detach();
  3183. CString strSQL = _T("");
  3184. strSQL.Format(_T("UPDATE [OrderPackageItems]")
  3185. _T("SET [PackageItemName] = '%s'")
  3186. _T(",[PackageItemType] = '%s'")
  3187. _T(",[PackageItemCost] = %lf")
  3188. _T(",[PackageItemSales] = %lf")
  3189. _T(",[PackageItemUnit] = '%s'")
  3190. _T(",[PackageItemCount] = %d")
  3191. _T(",[ItemRelatedPhotos] = '%s'")
  3192. _T(",[ItemNote] = '%s'")
  3193. _T("WHERE [StudioID] = '%s' AND [OrderNum] = '%s' AND [AutoID] = %d"),
  3194. tagOrderItemsObj.m_PackageItemName,
  3195. tagOrderItemsObj.m_PackageItemType,
  3196. tagOrderItemsObj.m_PackageItemCost,
  3197. tagOrderItemsObj.m_PackageItemSales,
  3198. tagOrderItemsObj.m_PackageItemUnit,
  3199. tagOrderItemsObj.m_PackageItemCount,
  3200. tagOrderItemsObj.m_ItemRelatedPhotos,
  3201. tagOrderItemsObj.m_ItemNote,
  3202. thepackage.szStudioId,
  3203. tagOrderItemsObj.m_OrderNum,
  3204. tagOrderItemsObj.m_AutoID);
  3205. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  3206. // 返回信息;
  3207. dwSendLen = sizeof(TheProPackage);
  3208. pSendData = new BYTE[dwSendLen];
  3209. TheProPackage *pPackage = (TheProPackage*)pSendData;
  3210. pPackage->flag = PACKAGE_ONESELF;
  3211. pPackage->nCmd = thepackage.nCmd;
  3212. pPackage->nDataLen = 0;
  3213. pPackage->dwReserve = bRet;
  3214. }
  3215. EnHandleResult CServerPtr::Ask_OrderPackageItem(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  3216. {
  3217. INT nlen = nReceiveLength - sizeof(TheProPackage) + 2;
  3218. TCHAR *pFilter = new TCHAR[nlen];
  3219. memcpy(pFilter, pReceiveData + sizeof(TheProPackage) - 2, nlen);
  3220. CObList tagObList;
  3221. INT nCount = g_pODBCPool->QueryOrderPackageItems(thepackage.szStudioId, &tagObList, pFilter);
  3222. CMemFile mf;
  3223. CArchive ar(&mf, CArchive::store);
  3224. tagObList.Serialize(ar);
  3225. ar.Close();
  3226. // 删除列表对象;
  3227. POSITION pos = tagObList.GetHeadPosition();
  3228. while (pos)
  3229. {
  3230. COrderPackageItemsObj *pOrderPackageItemsObj = (COrderPackageItemsObj*)tagObList.GetNext(pos);
  3231. if (pOrderPackageItemsObj)
  3232. delete pOrderPackageItemsObj;
  3233. }
  3234. tagObList.RemoveAll();
  3235. BOOL bResult = FALSE;
  3236. __int64 nArchive = mf.GetLength();
  3237. if ((nArchive + sizeof(TheProPackage) - 2) > 0x3FFFFF)
  3238. {
  3239. __int64 nSubLen = nArchive;
  3240. BYTE *pMf = mf.Detach();
  3241. while (nSubLen > 0)
  3242. {
  3243. if (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2 > 0)
  3244. dwSendLen = 0x3FFFFF;
  3245. else
  3246. dwSendLen = nSubLen + sizeof(TheProPackage) - 2;
  3247. pSendData = new BYTE[dwSendLen];
  3248. TheProPackage *pPackage = (TheProPackage*)pSendData;
  3249. pPackage->flag = PACKAGE_MULTIPLE;
  3250. pPackage->nCmd = thepackage.nCmd;
  3251. pPackage->nDataLen = nArchive;
  3252. pPackage->nSubDataLen = (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2) > 0 ? (0x3FFFFF - sizeof(TheProPackage) + 2) : nSubLen;
  3253. pPackage->dwReserve = nCount;
  3254. memcpy(pPackage->byBody, pMf + nArchive - nSubLen, pPackage->nSubDataLen);
  3255. nSubLen -= (0x3FFFFF - sizeof(TheProPackage) + 2);
  3256. bResult = ::HP_Server_Send(m_spThis->m_pServer, dwConnID, pSendData, dwSendLen);
  3257. if (pSendData)
  3258. delete[]pSendData;
  3259. pSendData = NULL;
  3260. if (!bResult)
  3261. {
  3262. if (pMf)
  3263. delete pMf;
  3264. return HR_ERROR;
  3265. }
  3266. }
  3267. if (pMf)
  3268. delete pMf;
  3269. return HR_OK;
  3270. }
  3271. else
  3272. {// 单包;
  3273. dwSendLen = sizeof(TheProPackage) - 2 + nArchive;
  3274. pSendData = new BYTE[dwSendLen];
  3275. TheProPackage *pPackage = (TheProPackage*)pSendData;
  3276. pPackage->flag = PACKAGE_ONESELF;
  3277. pPackage->nCmd = thepackage.nCmd;
  3278. pPackage->nDataLen = nArchive;
  3279. pPackage->dwReserve = nCount;
  3280. BYTE *pMf = mf.Detach();
  3281. memcpy(pPackage->byBody, pMf, nArchive);
  3282. if (pMf)
  3283. delete pMf;
  3284. }
  3285. return HR_IGNORE;
  3286. }
  3287. // 影楼信息;
  3288. void CServerPtr::New_StudioInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  3289. {
  3290. CMemFile mf;
  3291. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  3292. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  3293. CArchive ar(&mf, CArchive::load);
  3294. CStudioInfoObj tagStudioInfoObj;
  3295. tagStudioInfoObj.Serialize(ar);
  3296. ar.Close();
  3297. mf.Detach();
  3298. tagStudioInfoObj.m_StudioQRCode.SetSize(thepackage.nSubDataLen);
  3299. memcpy(tagStudioInfoObj.m_StudioQRCode.GetData(), const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2 + thepackage.nDataLen, thepackage.nSubDataLen);
  3300. BOOL bRet = g_pODBCPool->InsertStudioInfo(&tagStudioInfoObj);
  3301. // 返回信息;
  3302. dwSendLen = sizeof(TheProPackage);
  3303. pSendData = new BYTE[dwSendLen];
  3304. TheProPackage *pPackage = (TheProPackage*)pSendData;
  3305. pPackage->flag = PACKAGE_ONESELF;
  3306. pPackage->nCmd = thepackage.nCmd;
  3307. pPackage->nDataLen = 0;
  3308. pPackage->dwReserve = bRet;
  3309. }
  3310. void CServerPtr::Del_StudioInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  3311. {
  3312. }
  3313. void CServerPtr::Mod_StudioInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  3314. {
  3315. CMemFile mf;
  3316. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  3317. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  3318. CArchive ar(&mf, CArchive::load);
  3319. CStudioInfoObj tagStudioInfoObj;
  3320. tagStudioInfoObj.Serialize(ar);
  3321. ar.Close();
  3322. mf.Detach();
  3323. tagStudioInfoObj.m_StudioQRCode.SetSize(thepackage.nSubDataLen);
  3324. memcpy(tagStudioInfoObj.m_StudioQRCode.GetData(), const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2 + thepackage.nDataLen, thepackage.nSubDataLen);
  3325. BOOL bRet = g_pODBCPool->UpdateStudioInfo(&tagStudioInfoObj);
  3326. // 返回信息;
  3327. dwSendLen = sizeof(TheProPackage);
  3328. pSendData = new BYTE[dwSendLen];
  3329. TheProPackage *pPackage = (TheProPackage*)pSendData;
  3330. pPackage->flag = PACKAGE_ONESELF;
  3331. pPackage->nCmd = thepackage.nCmd;
  3332. pPackage->nDataLen = 0;
  3333. pPackage->dwReserve = bRet;
  3334. }
  3335. EnHandleResult CServerPtr::Ask_StudioInfo(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  3336. {
  3337. CStudioInfoObj tagStudioInfoObj;
  3338. INT nCount = g_pODBCPool->QueryStudioInfo(thepackage.szStudioId, &tagStudioInfoObj);
  3339. CMemFile mf;
  3340. CArchive ar(&mf, CArchive::store);
  3341. tagStudioInfoObj.Serialize(ar);
  3342. ar.Close();
  3343. BOOL bResult = FALSE;
  3344. __int64 nArchive = mf.GetLength();
  3345. if ((nArchive + sizeof(TheProPackage) - 2) > 0x3FFFFF)
  3346. {
  3347. __int64 nSubLen = nArchive;
  3348. BYTE *pMf = mf.Detach();
  3349. while (nSubLen > 0)
  3350. {
  3351. if (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2 > 0)
  3352. dwSendLen = 0x3FFFFF;
  3353. else
  3354. dwSendLen = nSubLen + sizeof(TheProPackage) - 2;
  3355. pSendData = new BYTE[dwSendLen];
  3356. TheProPackage *pPackage = (TheProPackage*)pSendData;
  3357. pPackage->flag = PACKAGE_MULTIPLE;
  3358. pPackage->nCmd = thepackage.nCmd;
  3359. pPackage->nDataLen = nArchive;
  3360. pPackage->nSubDataLen = (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2) > 0 ? (0x3FFFFF - sizeof(TheProPackage) + 2) : nSubLen;
  3361. pPackage->dwReserve = nCount;
  3362. memcpy(pPackage->byBody, pMf + nArchive - nSubLen, pPackage->nSubDataLen);
  3363. nSubLen -= (0x3FFFFF - sizeof(TheProPackage) + 2);
  3364. bResult = ::HP_Server_Send(m_spThis->m_pServer, dwConnID, pSendData, dwSendLen);
  3365. if (pSendData)
  3366. delete[]pSendData;
  3367. pSendData = NULL;
  3368. if (!bResult)
  3369. {
  3370. if (pMf)
  3371. delete pMf;
  3372. return HR_ERROR;
  3373. }
  3374. }
  3375. if (pMf)
  3376. delete pMf;
  3377. return HR_OK;
  3378. }
  3379. else
  3380. {// 单包;
  3381. dwSendLen = sizeof(TheProPackage) - 2 + nArchive;
  3382. pSendData = new BYTE[dwSendLen];
  3383. TheProPackage *pPackage = (TheProPackage*)pSendData;
  3384. pPackage->flag = PACKAGE_ONESELF;
  3385. pPackage->nCmd = thepackage.nCmd;
  3386. pPackage->nDataLen = nArchive;
  3387. pPackage->dwReserve = nCount;
  3388. BYTE *pMf = mf.Detach();
  3389. memcpy(pPackage->byBody, pMf, nArchive);
  3390. if (pMf)
  3391. delete pMf;
  3392. }
  3393. return HR_IGNORE;
  3394. }
  3395. // 订单景点信息;
  3396. void CServerPtr::New_OrderScenery(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  3397. {
  3398. CMemFile mf;
  3399. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  3400. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  3401. CArchive ar(&mf, CArchive::load);
  3402. COrderSceneryObj tagObj;
  3403. tagObj.Serialize(ar);
  3404. ar.Close();
  3405. mf.Detach();
  3406. CString strSQL = _T("");
  3407. strSQL.Format(_T("INSERT INTO [OrderScenery](")
  3408. _T("[StudioID]")
  3409. _T(", [OrderNum]")
  3410. _T(", [ScenerySN]")
  3411. _T(", [SceneryName]")
  3412. _T(", [SceneryPhotog]")
  3413. _T(", [SceneryMakeupArtist]")
  3414. _T(", [SceneryPhotogAssistant]")
  3415. _T(", [SceneryMakeupArtistAssistant]")
  3416. _T(", [SceneryAppointment]")
  3417. _T(", [SceneryFinishDate]")
  3418. _T(", [SceneryPhotoStatus]")
  3419. _T(", [SceneryNote])")
  3420. _T("VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, '%s')"),
  3421. thepackage.szStudioId,
  3422. tagObj.m_OrderNum,
  3423. tagObj.m_ScenerySN,
  3424. tagObj.m_SceneryName,
  3425. tagObj.m_SceneryPhotog,
  3426. tagObj.m_SceneryMakeupArtist,
  3427. tagObj.m_SceneryPhotogAssistant,
  3428. tagObj.m_SceneryMakeupArtistAssistant,
  3429. tagObj.m_SceneryAppointment,
  3430. tagObj.m_SceneryFinishDate,
  3431. tagObj.m_SceneryPhotoStatus,
  3432. tagObj.m_SceneryNote
  3433. );
  3434. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  3435. // 返回信息;
  3436. dwSendLen = sizeof(TheProPackage);
  3437. pSendData = new BYTE[dwSendLen];
  3438. TheProPackage *pPackage = (TheProPackage*)pSendData;
  3439. pPackage->flag = PACKAGE_ONESELF;
  3440. pPackage->nCmd = thepackage.nCmd;
  3441. pPackage->nDataLen = 0;
  3442. pPackage->dwReserve = bRet;
  3443. }
  3444. void CServerPtr::Del_OrderScenery(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  3445. {
  3446. CString strSQL;
  3447. strSQL.Format(_T("DELETE FROM [OrderScenery] WHERE [StudioID] = '%s' and [AutoID] = '%s' "), thepackage.szStudioId, thepackage.dwReserve);
  3448. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  3449. // 返回信息;
  3450. dwSendLen = sizeof(TheProPackage);
  3451. pSendData = new BYTE[dwSendLen];
  3452. TheProPackage *pPackage = (TheProPackage*)pSendData;
  3453. pPackage->flag = PACKAGE_ONESELF;
  3454. pPackage->nCmd = thepackage.nCmd;
  3455. pPackage->nDataLen = 0;
  3456. pPackage->dwReserve = bRet;
  3457. }
  3458. void CServerPtr::Del_OrderScenery2(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  3459. {
  3460. CMemFile mf;
  3461. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  3462. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  3463. CArchive ar(&mf, CArchive::load);
  3464. COrderSceneryObj tagObj;
  3465. tagObj.Serialize(ar);
  3466. ar.Close();
  3467. mf.Detach();
  3468. CString strSQL = _T("");
  3469. strSQL.Format(_T("DELETE FROM [OrderScenery] WHERE [StudioID] = '%s' and [OrderNum] = '%s' and [SceneryName] = '%s'"), thepackage.szStudioId, tagObj.m_OrderNum, tagObj.m_SceneryName);
  3470. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  3471. // 返回信息;
  3472. dwSendLen = sizeof(TheProPackage);
  3473. pSendData = new BYTE[dwSendLen];
  3474. TheProPackage *pPackage = (TheProPackage*)pSendData;
  3475. pPackage->flag = PACKAGE_ONESELF;
  3476. pPackage->nCmd = thepackage.nCmd;
  3477. pPackage->nDataLen = 0;
  3478. pPackage->dwReserve = bRet;
  3479. }
  3480. void CServerPtr::Mod_OrderScenery(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  3481. {
  3482. CMemFile mf;
  3483. //mf.Attach(thepackage.szBody, thepackage.nDataLen);//错误方式;
  3484. mf.Attach(const_cast<BYTE*>(pReceiveData)+sizeof(TheProPackage) - 2, thepackage.nDataLen);
  3485. CArchive ar(&mf, CArchive::load);
  3486. COrderSceneryObj tagObj;
  3487. tagObj.Serialize(ar);
  3488. ar.Close();
  3489. mf.Detach();
  3490. CString strSQL = _T("");
  3491. strSQL.Format(_T("UPDATE [OrderScenery] SET ")
  3492. _T("[SceneryName] = '%s'")
  3493. _T(", [SceneryPhotog] = '%s'")
  3494. _T(", [SceneryMakeupArtist] = '%s'")
  3495. _T(", [SceneryPhotogAssistant] = '%s'")
  3496. _T(", [SceneryMakeupArtistAssistant] = '%s'")
  3497. _T(", [SceneryAppointment] = '%s'")
  3498. _T(", [SceneryFinishDate] = '%s'")
  3499. _T(", [SceneryPhotoStatus] = %d")
  3500. _T(", [SceneryNote] = '%s'")
  3501. _T(" WHERE [StudioID] = '%s' and [AutoID] = %d"),
  3502. tagObj.m_SceneryName,
  3503. tagObj.m_SceneryPhotog,
  3504. tagObj.m_SceneryMakeupArtist,
  3505. tagObj.m_SceneryPhotogAssistant,
  3506. tagObj.m_SceneryMakeupArtistAssistant,
  3507. tagObj.m_SceneryAppointment,
  3508. tagObj.m_SceneryFinishDate,
  3509. tagObj.m_SceneryPhotoStatus,
  3510. tagObj.m_SceneryNote,
  3511. thepackage.szStudioId,
  3512. tagObj.m_nAutoID
  3513. );
  3514. BOOL bRet = g_pODBCPool->ExecuteSQL(strSQL);
  3515. // 返回信息;
  3516. dwSendLen = sizeof(TheProPackage);
  3517. pSendData = new BYTE[dwSendLen];
  3518. TheProPackage *pPackage = (TheProPackage*)pSendData;
  3519. pPackage->flag = PACKAGE_ONESELF;
  3520. pPackage->nCmd = thepackage.nCmd;
  3521. pPackage->nDataLen = 0;
  3522. pPackage->dwReserve = bRet;
  3523. }
  3524. EnHandleResult CServerPtr::Ask_OrderScenery(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  3525. {
  3526. INT nlen = nReceiveLength - sizeof(TheProPackage) + 2;
  3527. TCHAR *pFilter = new TCHAR[nlen];
  3528. memcpy(pFilter, pReceiveData + sizeof(TheProPackage) - 2, nlen);
  3529. CObList tagObList;
  3530. INT nCount = g_pODBCPool->QueryOrderScenery(thepackage.szStudioId, &tagObList, pFilter);
  3531. CMemFile mf;
  3532. CArchive ar(&mf, CArchive::store);
  3533. tagObList.Serialize(ar);
  3534. ar.Close();
  3535. // 删除列表对象;
  3536. POSITION pos = tagObList.GetHeadPosition();
  3537. while (pos)
  3538. {
  3539. COrderSceneryObj *pObj = (COrderSceneryObj*)tagObList.GetNext(pos);
  3540. if (pObj)
  3541. delete pObj;
  3542. }
  3543. tagObList.RemoveAll();
  3544. BOOL bResult = FALSE;
  3545. __int64 nArchive = mf.GetLength();
  3546. if ((nArchive + sizeof(TheProPackage) - 2) > 0x3FFFFF)
  3547. {
  3548. __int64 nSubLen = nArchive;
  3549. BYTE *pMf = mf.Detach();
  3550. while (nSubLen > 0)
  3551. {
  3552. if (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2 > 0)
  3553. dwSendLen = 0x3FFFFF;
  3554. else
  3555. dwSendLen = nSubLen + sizeof(TheProPackage) - 2;
  3556. pSendData = new BYTE[dwSendLen];
  3557. TheProPackage *pPackage = (TheProPackage*)pSendData;
  3558. pPackage->flag = PACKAGE_MULTIPLE;
  3559. pPackage->nCmd = thepackage.nCmd;
  3560. pPackage->nDataLen = nArchive;
  3561. pPackage->nSubDataLen = (nSubLen - 0x3FFFFF + sizeof(TheProPackage) - 2) > 0 ? (0x3FFFFF - sizeof(TheProPackage) + 2) : nSubLen;
  3562. pPackage->dwReserve = nCount;
  3563. memcpy(pPackage->byBody, pMf + nArchive - nSubLen, pPackage->nSubDataLen);
  3564. nSubLen -= (0x3FFFFF - sizeof(TheProPackage) + 2);
  3565. bResult = ::HP_Server_Send(m_spThis->m_pServer, dwConnID, pSendData, dwSendLen);
  3566. if (pSendData)
  3567. delete[]pSendData;
  3568. pSendData = NULL;
  3569. if (!bResult)
  3570. {
  3571. if (pMf)
  3572. delete pMf;
  3573. return HR_ERROR;
  3574. }
  3575. }
  3576. if (pMf)
  3577. delete pMf;
  3578. return HR_OK;
  3579. }
  3580. else
  3581. {// 单包;
  3582. dwSendLen = sizeof(TheProPackage) - 2 + nArchive;
  3583. pSendData = new BYTE[dwSendLen];
  3584. TheProPackage *pPackage = (TheProPackage*)pSendData;
  3585. pPackage->flag = PACKAGE_ONESELF;
  3586. pPackage->nCmd = thepackage.nCmd;
  3587. pPackage->nDataLen = nArchive;
  3588. pPackage->dwReserve = nCount;
  3589. BYTE *pMf = mf.Detach();
  3590. memcpy(pPackage->byBody, pMf, nArchive);
  3591. if (pMf)
  3592. delete pMf;
  3593. }
  3594. return HR_IGNORE;
  3595. }
  3596. // 订单序号;
  3597. INT CServerPtr::Ask_OrderSerialNum(IN LPCTSTR lpStudioId)
  3598. {
  3599. static ThreadSection critSection;
  3600. AutoThreadSection aSection(&critSection);
  3601. return g_pODBCPool->QueryMaxOrderId(lpStudioId);
  3602. }
  3603. void CServerPtr::Ask_OrderSerialNum(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  3604. {
  3605. dwSendLen = sizeof(TheProPackage);
  3606. pSendData = new BYTE[dwSendLen];
  3607. TheProPackage *pPackage = (TheProPackage*)pSendData;
  3608. pPackage->flag = PACKAGE_ONESELF;
  3609. pPackage->nCmd = thepackage.nCmd;
  3610. pPackage->nDataLen = 0;
  3611. pPackage->dwReserve = Ask_OrderSerialNum(thepackage.szStudioId);
  3612. }
  3613. // 打印序号;
  3614. INT CServerPtr::Ask_PrintSerialNum(IN LPCTSTR lpStudioId)
  3615. {
  3616. static ThreadSection critSection;
  3617. AutoThreadSection aSection(&critSection);
  3618. return g_pODBCPool->QueryMaxPrintId(lpStudioId);
  3619. }
  3620. void CServerPtr::Ask_PrintSerialNum(IN HP_CONNID dwConnID, IN const BYTE* pReceiveData, IN INT nReceiveLength, IN TheProPackage &thepackage, OUT BYTE*& pSendData, OUT DWORD &dwSendLen)
  3621. {
  3622. dwSendLen = sizeof(TheProPackage);
  3623. pSendData = new BYTE[dwSendLen];
  3624. TheProPackage *pPackage = (TheProPackage*)pSendData;
  3625. pPackage->flag = PACKAGE_ONESELF;
  3626. pPackage->nCmd = thepackage.nCmd;
  3627. pPackage->nDataLen = 0;
  3628. pPackage->dwReserve = Ask_PrintSerialNum(thepackage.szStudioId);
  3629. }