This commit is contained in:
邹宗楠
2022-08-25 16:10:01 +08:00
parent be87623211
commit 66db5867a4
49 changed files with 2364 additions and 649 deletions

24
conf/apiclient_cert.pem Normal file
View File

@@ -0,0 +1,24 @@
-----BEGIN CERTIFICATE-----
MIID/jCCAuagAwIBAgIUahJVy5/uo88B8ZcW9PcRyZOPkBowDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMTkwMTE1MDQyNzEwWhcNMjQwMTE0MDQyNzEwWjCBjzETMBEGA1UEAwwK
MTM5MDY4NjcwMjEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMScwJQYDVQQL
DB7miJDpg73oi6Xmuqrnp5HmioDmnInpmZDlhazlj7gxCzAJBgNVBAYMAkNOMRIw
EAYDVQQIDAlHdWFuZ0RvbmcxETAPBgNVBAcMCFNoZW5aaGVuMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5/ewqoqhiuackazAzJNUXC2eh/EKzWkiEZ7q
sLLKQ+ZilYOHF+GLmpmgGwM5jM4xY667l2sIWAvF7Z7IdHViGxABbOjkea0AmMMA
H4hHyczQGuRa66BiJ14l4ez+ZfKD9u5DEMgMH38/CGKZsyj5KebozBHiso8riC0E
Pb+O4oeUD6N20WD6GLrXBYUfzOQ3bklzWQiSit5G69lScmVrB57N0DndEXWAtCd+
os9mSW9YKJvR3+5IlXn7VNRWYxdoO+oG1TZuFBgO1Ar751Iw2VKuaU5ytsxZFr6Y
I+HjUMbkMWwr97mcZLuLn5st7/GWa7qbJK+4JiDtf4Z3zrpyaQIDAQABo4GBMH8w
CQYDVR0TBAIwADALBgNVHQ8EBAMCBPAwZQYDVR0fBF4wXDBaoFigVoZUaHR0cDov
L2V2Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUw
REJDMDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyMA0GCSqGSIb3DQEBCwUAA4IB
AQBUkt45/yL9ucpJwzvdFwPyV8RfQZmljqhFhJKt1TlFyeB0HKpOaC6fDdM+2GTZ
p2t7U9OTjTo2GUSFNy2ZHAwOw75PSnsX7Y63IdM53ieuRCq4xSPIqgUTu8Xrl4da
BKjuf6ZozYaY3x5ApagEEGibjCVzC/QUm1skMb+r6RRlp3DKWVa4CkDVXtEfwLnZ
KxZd3nY8v4zTBR0hQs/j9e/8wiI+C56nf4XTa50DlQPvkxTG1QTmM/iTGCy7x3ni
7WHxpCuOTwvF/9pbYQ3g5uJVop3DIYcVjFtIsewA/X5VwJK7c5vLoyM/hS4lYLZV
mJv81fv5chMHzTKMlki4JL7X
-----END CERTIFICATE-----

28
conf/apiclient_key.pem Normal file
View File

@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDn97CqiqGK5pyR
rMDMk1RcLZ6H8QrNaSIRnuqwsspD5mKVg4cX4YuamaAbAzmMzjFjrruXawhYC8Xt
nsh0dWIbEAFs6OR5rQCYwwAfiEfJzNAa5FrroGInXiXh7P5l8oP27kMQyAwffz8I
YpmzKPkp5ujMEeKyjyuILQQ9v47ih5QPo3bRYPoYutcFhR/M5DduSXNZCJKK3kbr
2VJyZWsHns3QOd0RdYC0J36iz2ZJb1gom9Hf7kiVeftU1FZjF2g76gbVNm4UGA7U
CvvnUjDZUq5pTnK2zFkWvpgj4eNQxuQxbCv3uZxku4ufmy3v8ZZrupskr7gmIO1/
hnfOunJpAgMBAAECggEAKIqTp9q+zQXtC1DECX0eW1XlxSCNoMTlHWtG3UcCLsfP
Jw5rx/K1cXm0D8SKhF9tJlzdkGM2fBzipNsBcckqMkyj0yMI+3MPDaPXG6u30D8p
h+mtMk0/ml3MBSZkd/Dgu4F82yv7Ym3c2FxTPIrGsVoYCcJ+enKnSw+DFD+se06d
gyWNvyt/uy5sKBo7lt0FUK8+clL+TwozoaiTCKNlwlEbJkCwYFoAHh1mZ4Kecrwf
V1ltwpAdnEJML2vKJq5GOV+tUeKRkQqBRVwo/82MUWSH6/SS1NodO8cAOZ2rDP3V
DkTfhNZXFw58Za88K0TINqlUPtMOKvd2kUeTYOTY4QKBgQD99JrhBoKqQQGw+TM9
Rt/HAAKhhMHep77FmnHbNWP0gnOHPLJGAEEXwwpR/gBzYIMp/iHwpXgmjYMzwnXL
eZ1dfsV02r5qUdxKU3yKGN3fzR9Bfd6Kw9UKAYLRNoCx0DxD0karcQFrt4OHhkTt
HPKKJRj4GXe5+gExWlS7Ps2ATQKBgQDp1cTBIsQ7OHOnccgJB+dKWj0BRCEj3H74
crOTSHvu/pngcyuJoj/jMfw37sPRwamqCv1dLuMFAxf7bkB3/kDCpQ0tJM1+j1Fl
SwSUfrJE0slSW0+/r84A8uXztBNxuNguSyq8nDk+Asj9+J/VZcWHqW4IPg8R1xEs
SEfwItnojQKBgQD3bRZpH9q23lczgdh2X1Mvo8bsb1gkAvNPu0Yq+T3FwEOnA2/9
28mPySuI7xypTOL+Sufueokxprap+1ChSoAT06u2SlkzZUZn9CdmtQuXPVayjFwC
fwJVmVtHUv7YP7Y3revEpXlo5Yd0x1DoZEe6aKKHNuj7faUj3IqpVGsMEQKBgD2A
WPiHQV9mEJ0owvkFGCMpKsRre9/nvYlw+aQyO053rlcnU3smrnD+E51Ocjh4HDy6
GTtp+pG155fcvp4QxE2thZKrDFVOMpVWrsSzsgWB/ytnEsmS3rbHLA31/es6N7mt
UXc8C54ws1aBDuDcnKB6wpLuZ55El6Ky/CC/udp9AoGBALOnuEfpU78mkhXZfsXR
xQz+9z4fkS3e1Ku67Rdcom2TQAP5R5Dx7cSBhxhkB9LobPcqgZzokRwxMsR6e2DY
XPWGpBHtIwwRg6EhQi3bQWSBKeTgLT+ND4wL6R5/7niN0GUFX1QyDtW6x2PRJCNP
gQPd0x04LZXgOcyyv/3fhb0Y
-----END PRIVATE KEY-----

639
conf/app.conf Normal file
View File

@@ -0,0 +1,639 @@
appname = jx-callback
httpport = 8080
runmode = dev
autorender = false
copyrequestbody = true
EnableDocs = true
RouterCaseSensitive = false
filelinenum = true
routinePoolSize = 1000
dadaAppKey = "dada154e2a41fd6cef3"
dadaAppSecret = "7f97d8f258b70b450f04e7ab274ed8f8"
mtwmAppID = "589"
mtwmSecret = "a81eb3df418d83d6a1a4b7c572156d2f"
mtwmCallbackURL = "http://callback.jxc4.com"
mtwmAppID2 = "5873"
mtwmSecret2 = "41c479790a76f86326f89e8048964739"
mtwmCallbackURL2 = "http://callback.jxc4.com"
# mtwmCookieStr = "_lxsdk_cuid=16ddced5e9a95-0a65869c427a14-48714616-15f900-16ddced5e9b2b; _hc.v=cfebbfd1-79a7-9823-d8df-77e59646cb34.1571369610; _lxsdk=16ddced5e9a95-0a65869c427a14-48714616-15f900-16ddced5e9b2b; uuid_update=true; uuid=7b28e71504f5414e382b.1579155871.1.0.0; device_uuid=!64dedf83-b510-4910-8a31-b2b13d0bdd73; pushToken=00kRvxlerO15kB0dJFWDwYuctAoe04xGMNd0r3BqvLUA*; acctId=57396785; brandId=-1; wmPoiId=-1; isOfflineSelfOpen=0; city_id=0; isChain=1; existBrandPoi=true; ignore_set_router_proxy=true; region_id=; region_version=0; newCategory=false; bsid=OyqgRLyV54i9JKP0zRCI9jPyXc4UBU-6KReDAkPIwSlljhb97JPyFUIXfYQvhlJb6G1erzHQKbvtZ2pSWOYDxQ; cityId=510100; provinceId=510000; city_location_id=0; location_id=0; igateApp=shangouepc; wpush_server_url=wss://wpush.meituan.com; token=0MScAPaSa57iwRpgpCmGLf21tiA4yU4Uy-nDZlv8wNWs*; shopCategory=food; set_info=%7B%22wmPoiId%22%3A-1%2C%22ignoreSetRouterProxy%22%3Atrue%7D; JSESSIONID=105dgww27nsy6yfp68q7wmcni; LX_SC_CONSTANT=c_shangou_online_e_znrurnrc; _lxsdk_s=17041b590ac-3d-689-a8c%7C%7C15"
autonaviKey = "ef64f638f31e05cb7bde28790f7309fe"
baidunaviAK = "eL94zToVOdGDTkNQxV8dnEQ1ZRcB2UKb"
baidunaviSK = "ZG0OOpOsOVURUwAkkmoHQFKRCbzn0zGb"
disableElm = true
disableWeimob = true
enableStoreWrite = false
enableJdStoreWrite = false
enableEbaiStoreWrite = false
enableElmStoreWrite = false
enableMtwmStoreWrite = false
enableWscStoreWrite = false
enableYbStoreWrite = false
enableJdShopWrite = false
jdsCookie = "shshshfpa=13b38d4a-8ba0-df12-0012-82d9a37fb835-1573795914; shshshfpb=abYp8Dq5JobRtp2pkZa7MbA%3D%3D; __jdu=1142616513; pinId=WMIzMhF5BfL6nJp9AcA2-A; pin=shop_jxcs; unick=shop_jxcs; _tp=7FBEvLyPe%2FKcgxsfY5lRgA%3D%3D; _pst=shop_jxcs; areaId=22; ipLoc-djd=22-1930-50948-57092; user-key=3ec204b4-f204-4320-98e3-b2569c757800; cn=0; shshshfp=5d23828ee6ea3a33e1a58588db1713f8; 3AB9D23F7A4B3C9B=AK36FFYF5J6WMPRH7YTXMEX4CATHR6NAA3IQEESU2I33FEJRQ3DRLU4SZJYD2XGFLCFW43DHYP5HQKOMR4EFQSLKLA; navigation=[%22shop_jxcs%22]; __jdv=122270672|baidu|-|organic|not set|1589514011252; language=zh_CN; ceshi3.com=000; csrf_token=b84d0a5c-6288-4db4-84e1-cadf66be3bf7; mba_muid=1142616513; TrackID=1qvZk-6QSAOp1NmaouJGEx58_cFglCFv57HEfoHOezMrOnV3_FSK-5ExeYhHx97IltBADG3dvJqLIt3P57wyUW4Z2Q3Y8ITo8Cfdmlz3kykM; RT="z=1&dm=jd.com&si=mcot45862q&ss=kaf1rcqz&sl=2&tt=38t&ld=22qx&nu=b99e5a7f32b36f184614d34a1d926a39&cl=3clu&ul=3crs&hd=3cz3"; b-sec=S2JWP6CAFP7K4I6PXVBUVCO6YVXUX2JAPDHLX5RZUDE4YKCGOEXJIINB3Q4THCFCMVWZPFAYGLWLG; thor=80FAF09E9A09B6E618A68057BDFCFCB8C86E8252DC9F7D3B34572625904FBA0AB6BF053A5325612EC0407791BB05F5301356E71E8B282C40C06D0B5DF3439DEECB102A78FAFF7AC0FC4E2D1FA8DD8BBAE1A011E50B5C74F1870AD982D7BF453F470F31F2241B73AC4C25485025C2ABEBC8A538AF7257824D2FAEE300A1435175B0B451FB5C19B78D729FC83152CA3BAF; _vender_=TNK3O6PALVQGGA33SGBIUTOKL4OOE6DP6OMNVIPMAMULGTRFWUMTVWGFRUTYP4L4EPN3KP73P33BOBN5SNJFBNQB5OMQYSJ5MORGQLJS7QAPOMIN7AZD6B3ZLP2DV4JCXDI5P3KOXJ3PHLIIRZ2YVS4JSSA3JRSBACNLJSC24ELO46GIMRW53XGW36EBPLZMZP2MQCAMJNO44FKT46B7VDVT7KQTELESOOF6E377AYC3NWKQF6ICIYBW4BA4JL5QG2NHGNOHOUJDNUW3N22UF32DLFLEIQGVO2W55J6AKPPBT227XA5NO4S3NFVIUUUADGOYH56T72MTNXCILWVMN4RMUNVFMGL4ISGXJS7YILE7A2ESPAU43MISAOZM2BR53MGRB5OZSQZPV5DBDCN2OVVT3XT5N2VMFELARQNTMAJCDBGXFURSN2Q7SYULLKZEZHTYWWOI65LS5OIHLUZQKWFGMNSQF2UBSYV7FG46CWJGMVHOGV3FY4RUEVJK6BQ223QK3H3VMTHXCZOZV4GKR5EWGIZZDVUAK4B36BPA5HPBO7PXKBOEXEBX77IYBNQLCGMK72J4VKNOUPYKNB5JE5D5UN3R2MMFGLJARTL2QTC5ZRZ4PJCJZWWOV37VWLWFVAN5IGHPAYME73KTNFABM5W73XLOXJFQWTFRZEK3FCL3BLRV4UOXLBQGA34R4WUBYSZURMKTXXB7U; __jda=65775340.1142616513.1573036516.1589946171.1589952725.54; __jdb=65775340.147.1142616513|54.1589952725; __jdc=65775340; _base_=YKH2KDFHMOZBLCUV7NSRBWQUJPBI7JIMU5R3EFJ5UDHJ5LCU7R2NILKK5UJ6GLA2RGYT464UKXAI4Z6HPCTN4UQM3WHVQ4ENFP57OC2DC7JQLRXRUO5PW6B77O6UXAZ4TCNE6YVKRXISVLBYGYO44RCDDPWDA4AEL7ZLXI2SG4SOQWCP5WPWO6EFS7HEHMRWVKBRVHB33TFD4SMNBHRJCTDFHU6SZXCZD6RFXX2OORYGL5H2GYF2IIH2KKD4T72IR4F577G2E5II2OMMXYF2GDYNTS7WGAUXFEWRJ3CTKDBDWMHUKJQF4ZFOTNBBYBIZRXZYERXXIG6ATJFKID7XOR3NQ2CL6K7A2IEZV5HCBNYDPXFCM2ZMCS474KZ44S5F; _vender_new_=GI63BGTJFDBQ46CD7JXUX3HEPM4P5LEA3TJTFGW4ZGGIVOLTPK5T25EXTBLCENPUTR7E2I23YDFQ4ARO6JW3NHSWBDE73RTUKJTADIPFPLYFE3ARGJUBPHWUIONS72KRQOZC5P7PB4VPPLRHGEP7L3Z5K62L2E2MGTWHFJRQ3CAVBDYVW2Z4J6U73HW4BKKOCDAH5T6OJJKWKLBZFOTI7342QSL7YQ2E3I4T777RNZF23XGOTCP3D4INHNO5MNKT3XJZQBVHWUVZYQUXCK5QQTKWADKQUCYV3JRY6YAYOD7Z5IIKGNLREQTCPO7SYGSIS655JUGOUILFLXVZE6KCFG7ZTPRUD6VPE4KCIE4OUZSED6FTSEZHTM363E7XXCHB4NA7VLZHCQSBHDVGMRA7RM4RGJC3MOI4TJNGCLW6QKUCCZAY7XTGOTMC53TFUYERGNIH2RBULZ7UTZH5GU3TC6RWFI2QL4QTAIARA6GNVXENEOYIPZEHN222YDAJX5OBBEECAMAPNKZ3XNF5CNGDJ3DSU2ZLOCAKLFPCYTIIWPPJMCQ636F5464HS4OVFPFNIDW4OCE23JRPYP5FAL6TKHPAC3H3ZRU7WA5GKJJKBZUGIX7NEO4LZB7FJ3RZZZH3UHPQMNILD5DT2V7HVCUOVNOFBEOW5ID2ZMQ3XV264IU4MYHN64RA; _BELONG_CLIENT_=WPSC4XJXWK5USS4JNZY2X7VRLR5MCBKRSVHEXABGTHDGISIQK5YOLZUXYE7IOIM7MOKO74H6CRN6WHAAR4TMDV3XZWMXZRCRT5XRNE3V356BTOB2Y7LPK66VWQK6HPTGWVXIDXDCPVE3W5WMHAIO6AT2LX2XXVNUCXR34ZWFK6HY45CORGIKOSYDYZBF27WOKTUX6BS4FZMIJWNUX6CB4JAA25ZLF7ZEKYOO4QV5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BMTUJZACIBHXQFAVLRF76VQY5PNJGGJNBEZHSFYYJA3YORRT7FB5AHCOIFQKF3W5RWNUX6CB4JAA26JNMO7AYWNUPZF5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BWZDKMOJ5BS6II53ERY6ALV3ZWPF42L4CPUHEGPYIII35KDC4FCNVCORCXFD6IVNLBEDPB2GGP4UHWNRUDOQBDIW7RZJXBA2WV5ANZOTEGUCDWYRVQS2YUTIZNZ276PRYG4N56V6YTII7MBKBC7LYHO7C555HTSBXGNRM3E466AYN67DHWVM5HQFJ4NFDO5BTOKMOS5L2CXFVYDR2FCOILVYPEI; _lvtc_=5ZH3OJ7CWYNVGEKDRC32XTFXGY"
aliKey = "LTAI4FwZN7pp4dACQHoapkZQ"
aliSecret = "NTegceUFX0FdfMovqCDzqcIKmhcoOu"
qiniuAK = "bKWilgyrJlc8aXgLEpCUmRrYcxJ8OYhoKk5mO3jJ"
qiniuSK = "3MNdU_lKnu22vrNtUELDcLBv23UOUWYKzc16Pmkj"
qiniuBucket = "jingxistandardlib"
showAppID = 82806
showAppSecret = "384f911735334bf7a150f3bd3bdf0c1e"
weixinMsgToken = "weixin"
weixinMsgKey = "duyaeVYUsz8LuKBqJeQO1NX6KmoC43yfMsbJybcRJ3e"
weixinPageAppID = "wx018dbe7daa3d5627"
weixinPageSecret = "c7a84ed3ef3ae04ac78e02fb593ffbe5"
weixinMiniAppID = "wx08a5c2a8581414ff"
weixinMiniSecret = "e7ec67c86cbd4dfa531af7af7533cdc9"
weixinMiniAppIDsc = "wx6be9ae15444fa83f"
weixinMiniSecretsc = "606ac9ff3e98016cee266704c933e687"
wxpayAppID = "wx4b5930c13f8b1170"
wxpayAppKey = "XKJPOIHJ233adf01KJIXlIeQDSDKFJAD"
wxpayAppMchID = "1390686702"
wxpayNotifyURL = "http://callback.test.jxc4.com/wxpay/msg/"
# 抖音支付回调地址
tiktokNotifyUrl = "https://callback.test.jxc4.com/tictoc/tiktokMsg"
qywxID = "ww9a156bfa070e1857"
qywxSecret = "q6H6WFV-c7gyyfBaxLxilIzeJv_mGk1CXtPqUR5qm4E"
tonglianPayAppID = "00183083"
tonglianPayKey = "18048531223"
tonglianPayCusID = "56065105499TVAH"
tonglianPayNotifyURL = "http://callback.test.jxc4.com/tonglian/msg/"
backstageHost = "http://www.jxc4.com"
wxBackstageHost = "http://wx.jxc4.com"
# jdStorePageCookie = "YYJV3NHVBPHLD36FWP6F3EM5PTXJ2XZQS7U4HWRIDPP4IWGUKUIB4XG5N26CZRDLDF7PKOXBPD6BNTUAJLETLZOIWMCVFI3K6MYZIY4QBIXIMXYDJNUKFGJVQTN5356SAD6WPCIHWNQAG7DDMF7L7S3SHD6O37OTAHUCKU6ALXATYTGMHNFLM4XRLVSFUQAJR77M4URSZRKVO55243TDVXLO25PP4UYSPTTPMNRUFXDNP4WPE566Q6V4AH32F7HT"
# jd2StorePageCookie = "CK5GE5MR2UIOBOZC7BBZLLSI7MVDWPEQ4BRJTJQ2OP3ZFKYDDYTFFV4XOXKLERC2UXFT44TMCUMRFP3C25HD6W3PYONTQCOML6YIZA5Z37P62UXFE655IRGYJ4ZLQIEBYQM32FABIN5RVJYZWPQWSRTZURNRLYV57XJEDWZT5UVZRYUBTN3AT6JJJJ22YHE6ZHCN6LCH27JHSRO55YA6TJH6G54IF72X3UAXCKW5P2G2MT3U6I3527NQFMAFLHXBZKQFFMYUKUHUU4GZWD4O7GO45Y"
fakeJdToken = "ndslkv9asl@djf_n7askdjfk$"
fakeJdBaseURL = "http://test.jxc4.com/qqqq"
# ebaiStorePageCookieWMUSS = "B0AAFQCAAAGbhkuMCsvcyYBDkkyAxBGIBlgXAQYVwc7VwYZFkx2HDoPSmo5eV1femopWgJRawhgAALG04cg1RUmhUakBbJRdgPS0tNEhnQhNRewwuWwYYBDEFPCQSDXV5YWA6PAVRHUJ9SnVGMThYAjNjLw9pRxIbS04-XFo05AQgBl%7ERLA33vWcR73gEAKZ"
# ebaiStorePageCookieWMSTOKEN = "gAALgNAAAGfBI5YEBHSQdZY1InIS8CVQU9aBU1f3VLWVQqKHAAAc5LnRLZ1QLLx0S5IuzCSX8ZQ7oUwAAUr-GEm9JpRc9AQAAsLkLHHXzuhh2lZkbyrcAAAWBESKg3ZA"
# ebaiStorePageCookieWMUSS2 = "A8AAIcCAAADJhpNHQoGGjZaLFRBdnE7Uwp9TBQXH1o9RTBgP30NQiQmEEAwFVplbwc6wAAMXwsa082aRxJfzskPX9THj9RKgJ0TxE1fyYPZRYVH0YSSjFgARt8Shs3bVc3QHV2Eh94B24KO20vSlJEXnELcDxTl9sJ35T2Dvg21A3wCT0NMXaNAcPzKhPamv"
# ebaiStorePageCookieWMSTOKEN2 = "A4AANwHAAARMA9ZWhh6BzcGYTQZJjVOHGIxPUdPVElXQz8iahGqiIS5gAAsLaD8yOwpYLCVMU2qqCEN8nAyiUQAAUr-GEu-F2xVbAQAAYcnZGrUx2Rf9qJkbRKQAAONp"
# ebaiStorePageCookieExdTOKEN = "PBE_2.0_5cd1c6141c127d41d12be02a04e58e0a2529c8ac5aad36be932f6e341f8be9a0e56b833c924cc95dd2ced76b31ea6fcbc7341cc9c03e3e2f470441192d51fc8bd81b6c5d24a867630a65400e688ff8f4453895ca9a18d7e91726941b28631cf2ab81797279967fcb03ae57e5bc33bf91e4495727569681c724597fb2c639a85c145723c12de262224e2536ad2c6f94bcae0c10c8f30728a6ea3ab6000940fffaa66271f17ecbae139f0b4fdfff791b7986a88b8f252827e799a2e1862ec522fd4c51c70ae9d17c69da93f1c12715bf9e0b35eccf39ae605d424c83319acaa7acbe191a8ee410afd1d02d1e02834ce6cbd2503b89f30efc1f7635a1e71e10e3370fc79b33e6352290e87f82b1cb8ac91195a09ff28e4418923e89993eb10d01e39fb621d517a14081611b25e83da9ec860fbacd2cb13562271585b53a0a7178e8f614bd62ffa442c78a10f008b3721675cad803024fad0c13aeecd64d1360bab4127883d2e7198201"
# mtpsStoreToken = "M0p9VatZSeSHfrosD5IViAVl73IcA8mlcuHIV5sG6Zpv83a7JE0wY3t26aEhrrs_MR5gtLSFF1UIkt8HAjaXow"
weimobAppID = "319F5E7FB6784DFCA3684C9333EB7744"
weimobAppSecret = "7267AA7F58261F6965599218F5A1D592"
weimobStateSecret = "87ae9570-92dc-4c01-bcd9-1a15d441df6b"
weimobCallbackURL = "http://callback.test.jxc4.com/weimob"
dingdingAgentID = 241047291
dingdingAppKey = "ding7iu9cptairtcls0c"
dingdingSecret = "1zooB4bmEXPesdwb1ElWASVQ1vinOSZM-1XCUFrrSjHsNAId1UuVCT5tmHSmg5_V"
dingdingQRCodeAppKey = "dingoashf4onhetkegzh3i"
dingdingQRCodeSecret = "qjlermCn7wmWh9Qe-zMEaaIr_oDHD02OyOfj_7TZFEjWS5V5lTwAEfa_E8r8Ul42"
dingdingCallbackAESKey = "EjTgnEa377fEcgzlQUbcgTzxPNznRjpOuSPgQAwv9aA"
dingdingCallbackToken = "ITKIL2FeFHZa48fEK9g3dbJ1DOww7shOrIZ2f"
dingdingCallbackURL = "http://callback.test.jxc4.com/dingding/msg"
dingdingCorpID = "ding7ab5687f3784a8db"
alipayAppID = "2019110769024042"
alipayPrivateKey = "MIIEpAIBAAKCAQEAjI46NiIj+Z19+ll4FFR+xss2N69jD5b31LtZVONM8CqNKCe7eBYx6y2pfslgg8R9Xj67PEmc/30euoG7bW23ow6QCj2fS0K2AZBA+TuEbtDpSFr0CUqS+tc/4nEurSyLOOt53ijNFPfVTT56Kl2h0mXLBDA5nvEKlzZTNimJcM/r4yyz4N72zXqfjT7cVTE/3cx6f4fkD3EsYdrxzIAruAYEywqraexLI1oIotGqufBemUhHdcOJquJJtxRLfYC000nEovHFtq1RhtakKRz8j80Edp0X+Dk1vA6JY1sVXnIFh/9QFyT70uFc77GPgwh7OT/qWvWnkBIbY+TGO7+dVQIDAQABAoIBAHQ0do4g5ctO2UOsyqlMPlBO2/Fn8KeH8jgP+MhE8GwzUebcCpM7DmRYqSRoi4IFZn0Psi8i0UktgcVC0tmi90s5E/9TeSp46g8a24zzFwejcutePxqbbC803N1zI9sK08PocyYoZ32pdNFbEReLt+lCPXmmAU2WDWJ9CIjkCHyaO+eadwqckc8VDGuBZU44pKrDDjlYfaWJk3bi7DJ2YqIGL+i0rm+1vVuK7qFTX9fHeeedperVwuBjjA5SPC6xn8I0Uq55fUQ36KQok53VIOzk5HrtiFw9GRBmULthY4/WT7mh44uG93hb+dzFvFNaK1tqgpPwqQTcGuYCNPTkmLUCgYEA4klP52ho3A4+VWXznjblzL2T/uzQPTTbeLUtLoLfKNGg+JiCTc8rJsVFalTyRXPEK8UHveM3/rR0aCc10mh07XHFG6XD7Md20jtTdHoag4HF+aubW2jY6SmbUXlWDxe7FcxRvaP8R2XxacFyIOT41ehphsS1tghU/ipbEDf01N8CgYEAnwMMIfp0ZGNm0IgYVHHKVmqfTC/ZW6epHGyfr/6mQ8hiU5arp2rHWtGUdF3EQFEJu69n8tUYK8hAoCOoPXrnEzMQdLhi389u+2dh8bKuliFzpJy0Ug0z9y4AIzdvCcuKoBMPGV4Db6adXFEHRgR1NIdsQegrtSjvuzgbGIZiwEsCgYEAxX805QRkmMM5tjEgOlMxp8tCUvl/Ghx6/NQsFe8VNDwZ4T7CY4TP5avBVPfE58cNTSJPCnU41u3Kt2iZegW/H8nvPZ0k7hB87SnoQb2cTHDESI91LYfJ4V5199sNuGh+2ZyVLw3jzrDzzdiPcpRFdfS9vWkMK08EVzzCc9pSrkMCgYBkO4iHVpfNu/bQVil3+W6BAJ6/aJ4Lr2jjOPmD9/IYYhTQ+fXkB2P4tIluvLh7jlmjTFMq9/ZPiuBp0XA4qONF7/dci+oPiHM92BIeR/LTQezig8EKw7XRBtchW80LkJkmhD0NUXy7AXzJ922tThwPa5nrBY2fmVlcW2aBFBzldwKBgQCl7y3eMG77BwD0nHxPHopWL6jsowNwxwMyN9eg40yemhfYol8+AhfouRuzaMCzROY9p5nY1N/jmPRa1dM7lXvZuij0ugwIebQXFhEjRtxtENbY5nRU4wlS7Y69oLSqFrQmW/MZbiCuIa6yXirSbEPIUojhHBI17yqq5yRD1vEHGQ=="
feieUser = "jianhua.xu@rosy.net.cn"
feieKey = "2JfKh8TyheQ9mwss"
xiaoWMAppID = 267
xiaoWMAppKey = "94337"
yinbaoAppKey = "682628966212343269"
yinbaoAppID = "18C0E0867E467DBC26EFF5E957B02EC4"
aliUpcAppCode = "00a6eefba0204d3fa310ac0ee7a6fc54"
yilianyunClientID = "1039586024"
yilianyunClientSecret = "4885d07c2997b661102e4b6099c0bf3b"
yilianyunClientID2 = "1098307169"
yilianyunClientSecret2 = "d5eedb40c99e6691b1ca2ba82a363d6a"
zhongwuAppID = 8000192
zhongwuAppSecret = "29435497822f52f3cf659c65da548a79"
getWeixinTokenKey = "c928ed0d-87a3-441a-8517-f92f0167296f"
storeName = "京西菜市"
storeNameMtwm = "京西菜市"
storeNameEbai = "饿鲜达"
storeNameEbai2 = "好菜鲜生"
smsSignName = "京西菜市"
smsMobileVerifyTemplate = "SMS_175583158"
smsNewOrderTemplate = "SMS_218287880"
smsNewOrderTemplateQ = "SMS_218292870"
smsOrderCanceledTemplate = "SMS_175573134"
smsNewUserOrderTemplate = "SMS_190284055"
smsJxOrderDelivering = "SMS_217235545"
smsPickOrderTemplate = "SMS_222861531"
smsBrandBalanceTemplate = "SMS_223190142"
smsVoicePickOrderTemplate = "TTS_222871733"
smsVoiceBrandBalanceTemplate = "TTS_223200132"
addEvent = true
[dev]
jdOrgCode = "320406"
jdToken = "77e703b7-7997-441b-a12a-2e522efb117a"
jdAppKey = "1dba76d40cac446ca500c0391a0b6c9d"
jdSecret = "a88d031a1e7b462cb1579f12e97fe7f4"
jd2OrgCode = "349454"
jd2Token = "7b5f8858-5cd6-493e-a0e1-56c0929396af"
jd2AppKey = "7fb947624ff847ae94ff2f068cc99652"
jd2Secret = "1097abd7ef09427099b4922784af123a"
jd3OrgCode = "359459"
jd3Token = "5e2c0a60-4450-40c0-a1da-b560051251ea"
jd3AppKey = "21b627c23ea04c69b64b48d0b361213e"
jd3Secret = "51cd27a748e64c829b4b7f83f4844610"
jdcsOrgCode = "362665"
jdcsToken = "01536759-9657-4d6d-a256-676d572317bf"
jdcsAppKey = "9e4ebe035ba74c8f913bf51e6af3974c"
jdcsSecret = "8eb9778f1099416795c501b76dbb2e79"
elmIsProd = false
elmToken = "2d2b583447b04b6bba5a6f3faed3559b"
elmAppKey = "RwT214gAsS"
elmSecret = "56afff4b9ebd8a7eb532d18fa33f17be57f9b9db"
ebaiSource = "34665"
ebaiSecret = "c3db75b754ea2d89"
mtpsAppKey = "25e816550bc9484480642f19a95f13fd"
mtpsSecret = "r4$HqrKx9~=7?2Jfo,$Z~a7%~k!Au&pEdI2)oPJvSbH2ao@2N0[8wSIvtuumh_J^"
dadaIsProd = false
dadaCallbackURL = "http://callback.test.jxc4.com/dadadelivery/msg"
dadaSourceID = "73753"
fnAppID = "6705486294797503379"
fnAppSecret = "c1e6c280-e618-4103-9d0a-673bc54fb22e"
fnCode = "uDEyAmTbrfS2qjYbgi20Jm"
fnMerchantId= "51658"
fnCallbackURL = "http://callback.jxc4.com/fn/msg"
weixinAppID = "wxbf235770edaabc5c"
weixinSecret = "ba32b269a068a5b72486a0beafd171e8"
weixinToken = "17_roSCZgkCxhRnyFVtei0KdfHwdGP8PmLzJFhCieka4_X4_d-lgfaTxF6oIS6FE5lkgLbrtstSsO6HyDNHKsHJmpB8YOtJYN4sO-AezdWLF78M2phL0K8xCRjB9YE9-Ci64GCqS50o6LcVqux8ORVbACAFIM"
weixinAppIdPrint = "wx2bfbc02e6251b71b"
weixinAppSecretPrint = "ff4128908947cfb71002f74599c0dbf9"
dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true"
getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken"
getYLYTokenURL = "http://www.jxc4.com/v2/sys/GetYLYToken"
tiktokAppKey = "tta6a1d01c399f264201"
tiktokAppSecret = "5c08a0465cf0f996af254a03b6c2548defef87ad"
tiktokJXDJKey="ttaceeda5333d7a7ab01" #京西到家抖音小程序
TiktokJXDJApiID="ttaceeda5333d7a7ab01"
tiktokJXDJSecret="5c8492ec2744fb72bb6cc356983f3cfc317f85d4"
#国美
gomeiAppKey = "N0R033L2QQFR53"
gomeiAppSecret = "686ffc3e31c24594838baed045563790"
[prod]
EnableDocs = false
jdOrgCode = "320406"
jdLoginName = "jd_jxcs1223"
jdToken = "29afd5a8-f93f-4d4c-9fce-a7297340af59"
jdAppKey = "1dba76d40cac446ca500c0391a0b6c9d"
jdSecret = "a88d031a1e7b462cb1579f12e97fe7f4"
jd2OrgCode = "349454"
jd2Token = "7b5f8858-5cd6-493e-a0e1-56c0929396af"
jd2AppKey = "7fb947624ff847ae94ff2f068cc99652"
jd2Secret = "1097abd7ef09427099b4922784af123a"
jd3OrgCode = "359459"
jd3Token = "5e2c0a60-4450-40c0-a1da-b560051251ea"
jd3AppKey = "21b627c23ea04c69b64b48d0b361213e"
jd3Secret = "51cd27a748e64c829b4b7f83f4844610"
jdcsOrgCode = "362665"
jdcsToken = "01536759-9657-4d6d-a256-676d572317bf"
jdcsAppKey = "9e4ebe035ba74c8f913bf51e6af3974c"
jdcsSecret = "8eb9778f1099416795c501b76dbb2e79"
jdydOrgCode = "363179"
jdydToken = "5c4675f8-c635-4b78-a3a1-e2d91e33eff8"
jdydAppKey = "420624b948d9436daddf6501200f2ebf"
jdydSecret = "23064865bd3f49adaa5fc582daac1baf"
jdEclpAccessToken = "161eff890f2f4fbda942447f85843377wzmo"
jdEclpAppKey = "0D397F05CF11C51BCDCC81744680EBC3"
jdEclpAppSecret = "f16a5e57ff4f4f428b702c40d2d4b933"
# jdShopAccessToken = "de8157b447584885910f429011e49cb93yjq"
# jdShopAppKey = "E1D746D42474D5F1F1A10CECE75D99F6"
# jdShopAppSecret = "efa7e1d1a22640fa990e6cf164b28608"
# jdsCookie = "shshshfpa=13b38d4a-8ba0-df12-0012-82d9a37fb835-1573795914; shshshfpb=abYp8Dq5JobRtp2pkZa7MbA%3D%3D; __jdu=1142616513; pinId=WMIzMhF5BfL6nJp9AcA2-A; pin=shop_jxcs; unick=shop_jxcs; _tp=7FBEvLyPe%2FKcgxsfY5lRgA%3D%3D; _pst=shop_jxcs; areaId=22; ipLoc-djd=22-1930-50948-57092; user-key=3ec204b4-f204-4320-98e3-b2569c757800; cn=0; shshshfp=5d23828ee6ea3a33e1a58588db1713f8; 3AB9D23F7A4B3C9B=AK36FFYF5J6WMPRH7YTXMEX4CATHR6NAA3IQEESU2I33FEJRQ3DRLU4SZJYD2XGFLCFW43DHYP5HQKOMR4EFQSLKLA; navigation=[%22shop_jxcs%22]; __jdv=122270672|baidu|-|organic|not set|1589514011252; language=zh_CN; ceshi3.com=000; csrf_token=b84d0a5c-6288-4db4-84e1-cadf66be3bf7; mba_muid=1142616513; TrackID=1qvZk-6QSAOp1NmaouJGEx58_cFglCFv57HEfoHOezMrOnV3_FSK-5ExeYhHx97IltBADG3dvJqLIt3P57wyUW4Z2Q3Y8ITo8Cfdmlz3kykM; RT="z=1&dm=jd.com&si=mcot45862q&ss=kaf1rcqz&sl=2&tt=38t&ld=22qx&nu=b99e5a7f32b36f184614d34a1d926a39&cl=3clu&ul=3crs&hd=3cz3"; b-sec=S2JWP6CAFP7K4I6PXVBUVCO6YVXUX2JAPDHLX5RZUDE4YKCGOEXJIINB3Q4THCFCMVWZPFAYGLWLG; thor=80FAF09E9A09B6E618A68057BDFCFCB8C86E8252DC9F7D3B34572625904FBA0AB6BF053A5325612EC0407791BB05F5301356E71E8B282C40C06D0B5DF3439DEECB102A78FAFF7AC0FC4E2D1FA8DD8BBAE1A011E50B5C74F1870AD982D7BF453F470F31F2241B73AC4C25485025C2ABEBC8A538AF7257824D2FAEE300A1435175B0B451FB5C19B78D729FC83152CA3BAF; _vender_=TNK3O6PALVQGGA33SGBIUTOKL4OOE6DP6OMNVIPMAMULGTRFWUMTVWGFRUTYP4L4EPN3KP73P33BOBN5SNJFBNQB5OMQYSJ5MORGQLJS7QAPOMIN7AZD6B3ZLP2DV4JCXDI5P3KOXJ3PHLIIRZ2YVS4JSSA3JRSBACNLJSC24ELO46GIMRW53XGW36EBPLZMZP2MQCAMJNO44FKT46B7VDVT7KQTELESOOF6E377AYC3NWKQF6ICIYBW4BA4JL5QG2NHGNOHOUJDNUW3N22UF32DLFLEIQGVO2W55J6AKPPBT227XA5NO4S3NFVIUUUADGOYH56T72MTNXCILWVMN4RMUNVFMGL4ISGXJS7YILE7A2ESPAU43MISAOZM2BR53MGRB5OZSQZPV5DBDCN2OVVT3XT5N2VMFELARQNTMAJCDBGXFURSN2Q7SYULLKZEZHTYWWOI65LS5OIHLUZQKWFGMNSQF2UBSYV7FG46CWJGMVHOGV3FY4RUEVJK6BQ223QK3H3VMTHXCZOZV4GKR5EWGIZZDVUAK4B36BPA5HPBO7PXKBOEXEBX77IYBNQLCGMK72J4VKNOUPYKNB5JE5D5UN3R2MMFGLJARTL2QTC5ZRZ4PJCJZWWOV37VWLWFVAN5IGHPAYME73KTNFABM5W73XLOXJFQWTFRZEK3FCL3BLRV4UOXLBQGA34R4WUBYSZURMKTXXB7U; __jda=65775340.1142616513.1573036516.1589946171.1589952725.54; __jdb=65775340.147.1142616513|54.1589952725; __jdc=65775340; _base_=YKH2KDFHMOZBLCUV7NSRBWQUJPBI7JIMU5R3EFJ5UDHJ5LCU7R2NILKK5UJ6GLA2RGYT464UKXAI4Z6HPCTN4UQM3WHVQ4ENFP57OC2DC7JQLRXRUO5PW6B77O6UXAZ4TCNE6YVKRXISVLBYGYO44RCDDPWDA4AEL7ZLXI2SG4SOQWCP5WPWO6EFS7HEHMRWVKBRVHB33TFD4SMNBHRJCTDFHU6SZXCZD6RFXX2OORYGL5H2GYF2IIH2KKD4T72IR4F577G2E5II2OMMXYF2GDYNTS7WGAUXFEWRJ3CTKDBDWMHUKJQF4ZFOTNBBYBIZRXZYERXXIG6ATJFKID7XOR3NQ2CL6K7A2IEZV5HCBNYDPXFCM2ZMCS474KZ44S5F; _vender_new_=GI63BGTJFDBQ46CD7JXUX3HEPM4P5LEA3TJTFGW4ZGGIVOLTPK5T25EXTBLCENPUTR7E2I23YDFQ4ARO6JW3NHSWBDE73RTUKJTADIPFPLYFE3ARGJUBPHWUIONS72KRQOZC5P7PB4VPPLRHGEP7L3Z5K62L2E2MGTWHFJRQ3CAVBDYVW2Z4J6U73HW4BKKOCDAH5T6OJJKWKLBZFOTI7342QSL7YQ2E3I4T777RNZF23XGOTCP3D4INHNO5MNKT3XJZQBVHWUVZYQUXCK5QQTKWADKQUCYV3JRY6YAYOD7Z5IIKGNLREQTCPO7SYGSIS655JUGOUILFLXVZE6KCFG7ZTPRUD6VPE4KCIE4OUZSED6FTSEZHTM363E7XXCHB4NA7VLZHCQSBHDVGMRA7RM4RGJC3MOI4TJNGCLW6QKUCCZAY7XTGOTMC53TFUYERGNIH2RBULZ7UTZH5GU3TC6RWFI2QL4QTAIARA6GNVXENEOYIPZEHN222YDAJX5OBBEECAMAPNKZ3XNF5CNGDJ3DSU2ZLOCAKLFPCYTIIWPPJMCQ636F5464HS4OVFPFNIDW4OCE23JRPYP5FAL6TKHPAC3H3ZRU7WA5GKJJKBZUGIX7NEO4LZB7FJ3RZZZH3UHPQMNILD5DT2V7HVCUOVNOFBEOW5ID2ZMQ3XV264IU4MYHN64RA; _BELONG_CLIENT_=WPSC4XJXWK5USS4JNZY2X7VRLR5MCBKRSVHEXABGTHDGISIQK5YOLZUXYE7IOIM7MOKO74H6CRN6WHAAR4TMDV3XZWMXZRCRT5XRNE3V356BTOB2Y7LPK66VWQK6HPTGWVXIDXDCPVE3W5WMHAIO6AT2LX2XXVNUCXR34ZWFK6HY45CORGIKOSYDYZBF27WOKTUX6BS4FZMIJWNUX6CB4JAA25ZLF7ZEKYOO4QV5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BMTUJZACIBHXQFAVLRF76VQY5PNJGGJNBEZHSFYYJA3YORRT7FB5AHCOIFQKF3W5RWNUX6CB4JAA26JNMO7AYWNUPZF5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BWZDKMOJ5BS6II53ERY6ALV3ZWPF42L4CPUHEGPYIII35KDC4FCNVCORCXFD6IVNLBEDPB2GGP4UHWNRUDOQBDIW7RZJXBA2WV5ANZOTEGUCDWYRVQS2YUTIZNZ276PRYG4N56V6YTII7MBKBC7LYHO7C555HTSBXGNRM3E466AYN67DHWVM5HQFJ4NFDO5BTOKMOS5L2CXFVYDR2FCOILVYPEI; _lvtc_=5ZH3OJ7CWYNVGEKDRC32XTFXGY"
jdShopAccessToken2 = "9ad9cf5fc8b140b19a1dbbb700b47676kown"
jdShopAppKey2 = "D5E8352BE0786ED16F77B4548F62F09A"
jdShopAppSecret2 = "71e1061ac2f246f6ac27efb900edba12"
elmIsProd = true
elmToken = ""
elmAppKey = "KLRDcOZGrk"
elmSecret = "1fc221f8265506531da36fb613d5f5ad673f2e9a"
ebaiSource = "34665"
ebaiSecret = "c3db75b754ea2d89"
mtpsAppKey = "3c0a05d464c247c19d7ec13accc78605"
mtpsSecret = "b1M}9?:sTbsB[OF2gNORnN(|(iy9rB8(`7]|[wGLnbmt`evfM>E:A90DjHAW:UPE"
dadaIsProd = true
dadaCallbackURL = "http://callback.jxc4.com/dadadelivery/msg"
dadaSourceID = "6660"
weixinAppID = "wx2bb99eb5d2c9b82c"
weixinSecret = "6bbbed1443cc062c20a015a64c07a531"
weixinMiniAppID2 = "wx4b5930c13f8b1170"
weixinMiniSecret2 = "2a57228a716ce991a52739f0ff41111d"
weixinMiniAppID3 = "wx18111a41fd17f24f"
weixinMiniSecret3 = "c79ac6e1b2d6d7968e72a9658a8b6715"
weixinAppIdPrint = "wx2bfbc02e6251b71b"
weixinAppSecretPrint = "ff4128908947cfb71002f74599c0dbf9"
yinbaoAppKey = "682628966212343269"
yinbaoAppID = "18C0E0867E467DBC26EFF5E957B02EC4"
aliUpcAppCode = "00a6eefba0204d3fa310ac0ee7a6fc54"
wxpayNotifyURL = "http://callback.jxc4.com/wxpay/msg/"
# 抖音支付回调地址
tiktokNotifyUrl = "https://callback.jxc4.com/tictoc/tiktokMsg"
tonglianPayAppID = "00183083"
tonglianPayKey = "18048531223"
tonglianPayCusID = "56065105499TVAH"
tonglianPayNotifyURL = "http://callback.jxc4.com/tonglian/msg/"
dbConnectStr = "root:WebServer@1@tcp(db1.int.jxc4.com:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true"
enableStoreWrite = true
enableJdStoreWrite = true
enableEbaiStoreWrite = true
enableMtwmStoreWrite = true
enableWscStoreWrite = true
enableYbStoreWrite = true
enableJdShopWrite = true
disableWeimob = false
weimobCallbackURL = "http://callback.jxc4.com/weimob"
dingdingAgentID = 239461075
dingdingAppKey = "ding7iu9cptairtcls0c"
dingdingSecret = "LWrZAFeqUfuVv7n_tc8vPpCAx6PT4CwManx2XCVhJOqGsx2L5XCDuX1sAN_JtvsI"
dingdingCallbackAESKey = "EjTgnEa377fEcgzlQUbcgTzxPNznRjpOuSPgQAwv9aA"
dingdingCallbackToken = "ITKIL2FeFHZa48fEK9g3dbJ1DOww7shOrIZ2f"
dingdingCallbackURL = "http://callback.jxc4.com/dingding/msg"
pushAppID = "5lyyrvHODG6wC8Sdr3a9h"
pushAppKey = "iFrkUDmR2g5eqQpfh2kQ57"
pushAppSecret = "WTn53qd6WAAdLMXfmXvzb7"
pushMasterSecret= "dGZcR0XGGg7H5Pd7FR3n47"
fnAppID = "6705486294797503379"
fnAppSecret = "c1e6c280-e618-4103-9d0a-673bc54fb22e"
fnCode = "uDEyAmTbrfS2qjYbgi20Jm"
fnMerchantId= "51658"
fnCallbackURL = "http://callback.jxc4.com/fn/msg"
jxPrintAppID = "1000"
jxPrintAppKey = "rfBd56ti2SMtYvSg"
tiktokAppKey = "tta6a1d01c399f264201"
tiktokAppSecret = "5c08a0465cf0f996af254a03b6c2548defef87ad"
tiktokJXDJKey="ttaceeda5333d7a7ab01" #京西到家抖音小程序
TiktokJXDJApiID="ttaceeda5333d7a7ab01"
tiktokJXDJSecret="5c8492ec2744fb72bb6cc356983f3cfc317f85d4"
#国美
gomeiAppKey = "N0R033L2QQFR53"
gomeiAppSecret = "686ffc3e31c24594838baed045563790"
[jxgy]
httpport = 8088
EnableDocs = false
dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxgy?charset=utf8mb4&loc=Local&parseTime=true"
jdOrgCode = "339032"
jdLoginName = "jd_jxgy"
jdToken = "b1138139-9610-4b80-9a63-a63da4773885"
jdAppKey = "5d5577a2506f41b8b4ec520ba83490f5"
jdSecret = "0b01b9eeb15b41dab1c3d05d95c17a26"
jdStorePageCookie = "YDYCWYUGKSROMV3MKJQIFINJ5CLPYH6IRVFUMFJD3JI6VQKHX3YPHTWDIDBNMCBUKSY3P7SKAHHKR7PHQDSFRXZEWXA4XOUTALIQDGDYIEUCMDPWSYGDVT42DJ27CD27QKCR3UN7KF7EPIHGPR7GCRTBD5YGNZW4AIACY4HXDMCETEWCPFKOTM4HRJBSMMQJ77SR62PYMP6RCG33IRQGP6PRCKAO4M7FUA7G2ZM2SFQ6F6WUNO5GXDJSVUELLBJT"
ebaiSource = "35957"
ebaiSecret = "10013fbb7c2ddad7"
ebaiStorePageCookieWMUSS = "AIgAAABBA3NOWA8IckAGYixvPUR0K1s5EhVyCwsoVlRxCFlPSFtCFzRQHiYRIwg9BRPgwAAE0UBCHBcQQJwMw17WmJQTGoqGzMGXEo5LWhePQxmeR4reiYcV2YdSBkqRHMNFD92PVkqQjZze2JbWR9mQBkFaxMrB2kRBCmHC1FNXg6wdesOxNgDAAGs9ZB0A"
ebaiStorePageCookieWMSTOKEN = "QAAGALAAAFd2VaeBVCNBtlDTJUL2NXW2YFIiBzMWksCWFWQRCGlESI_2QAABmRgRwSFsGfRsPhJLuCgHL_g6HUAAAUuy3E2_vQhVHAQAAdPYKHHEB0Rpg_foY_bcAAgB"
mtwmAppID = "4123"
mtwmSecret = "df2c88338b85f830cebce2a9eab56628"
mtwmCallbackURL = "http://callback-jxgy.jxc4.com"
mtwmCookieStr = "_lxsdk_cuid=16f413bd94fc8-0daccb808f461b-1d336b5a-13c680-16f413bd94fc8; _lxsdk=16f413bd94fc8-0daccb808f461b-1d336b5a-13c680-16f413bd94fc8; uuid=d1e8adb3d2774b89fe6e.1577347439.1.0.0; uuid_update=true; wpush_server_url=wss://wpush.meituan.com; acctId=62884810; token=0LhaIAAgrL1Hy0DDATjZqt4lRHauN_bBL3q0AvxUFUWo*; brandId=-1; wmPoiId=-1; isOfflineSelfOpen=0; city_id=0; isChain=1; existBrandPoi=true; ignore_set_router_proxy=true; region_id=; region_version=0; newCategory=false; bsid=SUVq2IfzZ53EHaTVoCE3UsmKkH5ZevxTjkwpNcaLKkbUOBkEyuZp8mPFwhgqkxsCGNjZILNj5aV8uVSQc888bg; device_uuid=!625e0297-431a-49ad-8b18-a0562c38a8eb; cityId=510100; provinceId=510000; city_location_id=0; location_id=0; pushToken=0LhaIAAgrL1Hy0DDATjZqt4lRHauN_bBL3q0AvxUFUWo*; set_info=%7B%22wmPoiId%22%3A-1%2C%22ignoreSetRouterProxy%22%3Atrue%7D; igateApp=shangouepc; LX_SC_CONSTANT=c_nehoktcu; shopCategory=food; JSESSIONID=unlrbu07lvm2s734eyedxr0j; _lxsdk_s=16f413bd950-189-8bb-8df%7C%7C33"
enableStoreWrite = true
enableJdStoreWrite = true
enableEbaiStoreWrite = true
enableMtwmStoreWrite = true
enableYbStoreWrite = true
enableJdShopWrite = true
mtpsAppKey = "3c0a05d464c247c19d7ec13accc78605"
mtpsSecret = "b1M}9?:sTbsB[OF2gNORnN(|(iy9rB8(`7]|[wGLnbmt`evfM>E:A90DjHAW:UPE"
dadaIsProd = true
dadaCallbackURL = "http://callback-jxgy.jxc4.com/dadadelivery/msg"
dadaSourceID = "6660"
weixinAppID = "wx2bb99eb5d2c9b82c"
weixinSecret = "6bbbed1443cc062c20a015a64c07a531"
weixinMiniAppID = "wx2d6949f724b2541d"
weixinMiniSecret = "11f3c380551c4683c149990b004d6df9"
weixinMiniAppID2 = "wx4b5930c13f8b1170"
weixinMiniSecret2 = "2a57228a716ce991a52739f0ff41111d"
weixinAppIdPrint = "wx2bfbc02e6251b71b"
weixinAppSecretPrint = "ff4128908947cfb71002f74599c0dbf9"
wxpayNotifyURL = "http://callback-jxgy.jxc4.com/wxpay/msg/"
# 抖音支付回调地址
tiktokNotifyUrl = "https://callback-jxgy.jxc4.com/tictoc/tiktokMsg"
tonglianPayAppID = "00183083"
tonglianPayKey = "18048531223"
tonglianPayCusID = "56065105499TVAH"
tonglianPayNotifyURL = "http://callback-jxgy.jxc4.com/tonglian/msg/"
backstageHost = "http://www-jxgy.jxc4.com"
wxBackstageHost = "http://wx-jxgy.jxc4.com"
dingdingAgentID = 258707199
dingdingAppKey = "dingtozhutfr98qgwc7d"
dingdingSecret = "7EJ0HDbkxQri-O2RSaYUu7_ZwvvMKtRVHT8cpyfvIvK6A9n9HRwPNCNRJFuEDeT_"
dingdingQRCodeAppKey = "dingoaw990o1jm9jswvwib"
dingdingQRCodeSecret = "N9dyC9qB84sauQPs4_JYrILMsG5Krqm9-PSSVJ8t9hb87rrHiFUirISxGF5G57RV"
dingdingCallbackURL = "http://callback-jxgy.jxc4.com/dingding/msg"
getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken"
getYLYTokenURL = "http://www.jxc4.com/v2/sys/GetYLYToken"
getPushTokenURL = "http://www.jxc4.com/v2/sys/GetPushToken"
jdEclpAccessToken = "161eff890f2f4fbda942447f85843377wzmo"
jdEclpAppKey = "0D397F05CF11C51BCDCC81744680EBC3"
jdEclpAppSecret = "f16a5e57ff4f4f428b702c40d2d4b933"
# jdShopAccessToken = "de8157b447584885910f429011e49cb93yjq"
# jdShopAppKey = "E1D746D42474D5F1F1A10CECE75D99F6"
# jdShopAppSecret = "efa7e1d1a22640fa990e6cf164b28608"
jdShopAccessToken2 = "9ad9cf5fc8b140b19a1dbbb700b47676kown"
jdShopAppKey2 = "D5E8352BE0786ED16F77B4548F62F09A"
jdShopAppSecret2 = "71e1061ac2f246f6ac27efb900edba12"
fnAppID = "6a3e2073-1850-413b-9eb7-6c342ec36e1c"
fnAppSecret = "a8248088-a742-4c33-a0db-03aeae00ca7d"
fnMerchantId = "51658"
fnCode = "uDEyAmTbrfS2qjYbgi20Jm"
fnCallbackURL = "http://callback-jxgy.jxc4.com/fn/msg"
jxPrintAppID = "1000"
jxPrintAppKey = "rfBd56ti2SMtYvSg"
storeName = "京西果园"
tiktokAppKey = "tta6a1d01c399f264201"
tiktokAppSecret = "5c08a0465cf0f996af254a03b6c2548defef87ad"
tiktokJXDJKey="ttaceeda5333d7a7ab01" #京西到家抖音小程序
TiktokJXDJApiID="ttaceeda5333d7a7ab01"
tiktokJXDJSecret="5c8492ec2744fb72bb6cc356983f3cfc317f85d4"
#国美
gomeiAppKey = "N0R033L2QQFR53"
gomeiAppSecret = "686ffc3e31c24594838baed045563790"
[test]
jdOrgCode = "82029"
jdToken = "594ab45a-9a73-4a43-82b0-a64cbd55d883"
jdAppKey = "06692746f7224695ad4788ce340bc854"
jdSecret = "d6b42a35a7414a5490d811654d745c84"
elmIsProd = false
elmToken = "2d2b583447b04b6bba5a6f3faed3559b"
elmAppKey = "RwT214gAsS"
elmSecret = "56afff4b9ebd8a7eb532d18fa33f17be57f9b9db"
ebaiSource = "62923"
ebaiSecret = "aa4cdc6c1108486b"
mtpsAppKey = "25e816550bc9484480642f19a95f13fd"
mtpsSecret = "r4$HqrKx9~=7?2Jfo,$Z~a7%~k!Au&pEdI2)oPJvSbH2ao@2N0[8wSIvtuumh_J^"
dadaIsProd = false
dadaCallbackURL = "http://callback.test.jxc4.com/dadadelivery/msg"
dadaSourceID = "73753"
weixinAppID = "wxbf235770edaabc5c"
weixinSecret = "ba32b269a068a5b72486a0beafd171e8"
dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true"
[alpha]
httpport = 8088
# xiaan
jdOrgCode = "82029"
jdToken = "34eedf6f-78ab-4a3c-9415-a930d37bda6a"
jdAppKey = "06692746f7224695ad4788ce340bc854"
jdSecret = "d6b42a35a7414a5490d811654d745c84"
jdStorePageCookie = "5EOCZRXVCRXBTYD5EPV6FOXRCQWFFQO75FRMJ3BAKZ5JXY6XTJECMWXK5OZIPLZTUWZKZKXHXA6I7G3WMIKSWOHZIHRLNE5FZY3NBD6G5IMBOYHMJSJR3RF4TMZB2JEW2DF755YPFUSA6BMWI3KNLT3I4EAP2Z4JA6ZWAA34MNQX5P6LOI4EGG76QJU3G3VW7QFE6BAVAONMKBEHKNXNZGX3RQF7PHXDXSPJSY5XQEGM7IV2L7LKIG3M2D6QVSPEGQW4NV7SZ4TX32D2XQA7PIX46M"
ebaiSource = "61219"
ebaiSecret = "9ef8be6a53fb33e7"
ebaiStorePageCookieWMUSS = "AHYHAAApIX5oBXUFKFsXKEdObiclRUhTFRZ1MUh7KEMiClB7MnB5G3VvIB5KN0USAABjQ4KngBfQ4Wcj9ebWYiEHBxCyNiBT1Yc111PhQ7UBluCENnCUB0HjIzfCAaHjAKEDoscT8sDL8JDDuQD81NaQ1dW3kN1MS9DeFMPgwC2YYROVy7AV3cKhMPkQrBwA"
ebaiStorePageCookieWMSTOKEN = "UAABRL3ZhLykdGFQBBDxXVDBuYisaB3tQHjUmHlQ5cEAs5dxMdG0R-EwVILAy_CV1Vlw_nbQAA0ijuEe-F2xUzAQAAAdujHKzhohkrxY0c5LsAAH0CeSGnywAHBQAAMA"
mtwmCookieStr = "_lxsdk_cuid=169b7bc1b9fc8-05092471a96611-12376d51-1fa400-169b7bc1b9fc8; _lxsdk=169b7bc1b9fc8-05092471a96611-12376d51-1fa400-169b7bc1b9fc8; uuid=7a6a1345b4a3f7aa5f81.1553565752.1.0.0; _ga=GA1.2.285163436.1559264188; uuid_update=true; pushToken=0sz3wYPQoNug6okzOjEacuvrEWGRhuv6gL5ZWX98prCw*; device_uuid=!88124822-2b68-4425-865d-a3ffffe355af; wpush_server_url=wss://wpush.meituan.com; acctId=26535718; token=0vt6ufSF1X8GXpVq3N5zhE5FhcgONSuNTg4LiqkqEyTM*; brandId=-1; wmPoiId=2523687; isOfflineSelfOpen=0; city_id=999999; isChain=0; existBrandPoi=false; ignore_set_router_proxy=false; region_id=2000000001; region_version=1522820107; newCategory=false; bsid=g54gdBCxg9fu4t99gGLf770bFzBT_eUQXA3_FWLgDeCWrEtsNdXkJtckKTvMEthURtXVg_j0mhDauKPgDUgZyQ; cityId=510100; provinceId=510000; city_location_id=10000004; location_id=10000005; set_info=%7B%22wmPoiId%22%3A2523687%2C%22region_id%22%3A%222000000001%22%2C%22region_version%22%3A1522820107%7D; igateApp=shangouepc; shopCategory=market; LX_SC_CONSTANT=c_nehoktcu; JSESSIONID=43y9tjdcnjh2kojf6qfehvdy; _lxsdk_s=16f4145a84c-d6a-c22-64c%7C%7C19"
mtpsAppKey = "25e816550bc9484480642f19a95f13fd"
mtpsSecret = "r4$HqrKx9~=7?2Jfo,$Z~a7%~k!Au&pEdI2)oPJvSbH2ao@2N0[8wSIvtuumh_J^"
dadaIsProd = false
dadaCallbackURL = "http://callback.alpha.jxc4.com/dadadelivery/msg"
dadaSourceID = "73753"
weixinAppID = "wx2bb99eb5d2c9b82c"
weixinSecret = "6bbbed1443cc062c20a015a64c07a531"
getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken"
getWeixin2TokenURL = "http://www.jxc4.com/v2/sys/GetWX2Token"
weixinMiniAppID2 = "wx4b5930c13f8b1170"
weixinMiniSecret2 = "2a57228a716ce991a52739f0ff41111d"
mtwmCallbackURL = "http://callback.alpha.jxc4.com"
dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxstore_alpha?charset=utf8mb4&loc=Local&parseTime=true"
enableStoreWrite = true
enableJdStoreWrite = true
enableEbaiStoreWrite = true
enableMtwmStoreWrite = true
enableWscStoreWrite = false
enableYbStoreWrite = false
[beta]
EnableDocs = false
jdOrgCode = "320406"
jdLoginName = "jd_jxcs1223"
jdToken = "29afd5a8-f93f-4d4c-9fce-a7297340af59"
jdAppKey = "1dba76d40cac446ca500c0391a0b6c9d"
jdSecret = "a88d031a1e7b462cb1579f12e97fe7f4"
jd2OrgCode = "349454"
jd2Token = "7b5f8858-5cd6-493e-a0e1-56c0929396af"
jd2AppKey = "7fb947624ff847ae94ff2f068cc99652"
jd2Secret = "1097abd7ef09427099b4922784af123a"
jd3OrgCode = "359459"
jd3Token = "5e2c0a60-4450-40c0-a1da-b560051251ea"
jd3AppKey = "21b627c23ea04c69b64b48d0b361213e"
jd3Secret = "51cd27a748e64c829b4b7f83f4844610"
jdcsOrgCode = "362665"
jdcsToken = "01536759-9657-4d6d-a256-676d572317bf"
jdcsAppKey = "9e4ebe035ba74c8f913bf51e6af3974c"
jdcsSecret = "8eb9778f1099416795c501b76dbb2e79"
jdydOrgCode = "363179"
jdydToken = "5c4675f8-c635-4b78-a3a1-e2d91e33eff8"
jdydAppKey = "420624b948d9436daddf6501200f2ebf"
jdydSecret = "23064865bd3f49adaa5fc582daac1baf"
jdEclpAccessToken = "161eff890f2f4fbda942447f85843377wzmo"
jdEclpAppKey = "0D397F05CF11C51BCDCC81744680EBC3"
jdEclpAppSecret = "f16a5e57ff4f4f428b702c40d2d4b933"
jdShopAccessToken2 = "9ad9cf5fc8b140b19a1dbbb700b47676kown"
jdShopAppKey2 = "D5E8352BE0786ED16F77B4548F62F09A"
jdShopAppSecret2 = "71e1061ac2f246f6ac27efb900edba12"
elmIsProd = true
elmToken = ""
elmAppKey = "KLRDcOZGrk"
elmSecret = "1fc221f8265506531da36fb613d5f5ad673f2e9a"
ebaiSource = "34665"
ebaiSecret = "c3db75b754ea2d89"
mtpsAppKey = "3c0a05d464c247c19d7ec13accc78605"
mtpsSecret = "b1M}9?:sTbsB[OF2gNORnN(|(iy9rB8(`7]|[wGLnbmt`evfM>E:A90DjHAW:UPE"
dadaIsProd = true
dadaCallbackURL = "http://callback.beta.jxc4.com/dadadelivery/msg"
dadaSourceID = "6660"
weixinAppID = "wx2bb99eb5d2c9b82c"
weixinSecret = "6bbbed1443cc062c20a015a64c07a531"
weixinMiniAppID2 = "wx4b5930c13f8b1170"
weixinMiniSecret2 = "2a57228a716ce991a52739f0ff41111d"
weixinMiniAppID3 = "wx18111a41fd17f24f"
weixinMiniSecret3 = "c79ac6e1b2d6d7968e72a9658a8b6715"
weixinAppIdPrint = "wx2bfbc02e6251b71b"
weixinAppSecretPrint = "ff4128908947cfb71002f74599c0dbf9"
yinbaoAppKey = "682628966212343269"
yinbaoAppID = "18C0E0867E467DBC26EFF5E957B02EC4"
aliUpcAppCode = "00a6eefba0204d3fa310ac0ee7a6fc54"
wxpayNotifyURL = "http://callback.beta.jxc4.com/wxpay/msg/"
# 抖音支付回调地址
tiktokNotifyUrl = "https://callback.beta.jxc4.com/tictoc/tiktokMsg"
tonglianPayAppID = "00183083"
tonglianPayKey = "18048531223"
tonglianPayCusID = "56065105499TVAH"
tonglianPayNotifyURL = "http://callback.beta.jxc4.com/tonglian/msg/"
dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true"
enableStoreWrite = true
enableJdStoreWrite = true
enableEbaiStoreWrite = true
enableMtwmStoreWrite = true
enableWscStoreWrite = true
enableYbStoreWrite = true
enableJdShopWrite = true
disableWeimob = false
weimobCallbackURL = "http://callback.beta.jxc4.com/weimob"
dingdingAgentID = 239461075
dingdingAppKey = "ding7iu9cptairtcls0c"
dingdingSecret = "LWrZAFeqUfuVv7n_tc8vPpCAx6PT4CwManx2XCVhJOqGsx2L5XCDuX1sAN_JtvsI"
dingdingCallbackAESKey = "EjTgnEa377fEcgzlQUbcgTzxPNznRjpOuSPgQAwv9aA"
dingdingCallbackToken = "ITKIL2FeFHZa48fEK9g3dbJ1DOww7shOrIZ2f"
dingdingCallbackURL = "http://callback.beta.jxc4.com/dingding/msg"
pushAppID = "5lyyrvHODG6wC8Sdr3a9h"
pushAppKey = "iFrkUDmR2g5eqQpfh2kQ57"
pushAppSecret = "WTn53qd6WAAdLMXfmXvzb7"
pushMasterSecret= "dGZcR0XGGg7H5Pd7FR3n47"
fnAppID = "6705486294797503379"
fnAppSecret = "c1e6c280-e618-4103-9d0a-673bc54fb22e"
fnCode = "uDEyAmTbrfS2qjYbgi20Jm"
fnMerchantId= "51658"
fnCallbackURL = "http://callback.jxc4.com/fn/msg"
jxPrintAppID = "1000"
jxPrintAppKey = "rfBd56ti2SMtYvSg"
tiktokAppKey = "tta6a1d01c399f264201"
tiktokAppSecret = "5c08a0465cf0f996af254a03b6c2548defef87ad"
tiktokJXDJKey="ttaceeda5333d7a7ab01" #京西到家抖音小程序
TiktokJXDJApiID="ttaceeda5333d7a7ab01"
tiktokJXDJSecret="5c8492ec2744fb72bb6cc356983f3cfc317f85d4"
#国美
gomeiAppKey = "N0R033L2QQFR53"
gomeiAppSecret = "686ffc3e31c24594838baed045563790"

13
conf/config.json Normal file
View File

@@ -0,0 +1,13 @@
/* ,使 */
{
/* */
"imageActionName": "uploadimage", /* action */
"imageFieldName": "upfile", /* upfile */
"imageMaxSize": 2048000, /* B */
"imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* */
"imageCompressEnable": true, /* ,true */
"imageCompressBorder": 1600, /* */
"imageInsertAlign": "none", /* */
"imageUrlPrefix": "https://image.jxc4.com/", /* 访 */
"imagePathFormat": "/" /* /ueditor/jsp/upload/image, */
}

14
conf/rbac_model.conf Normal file
View File

@@ -0,0 +1,14 @@
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[role_definition]
g = _, _
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act

View File

@@ -0,0 +1,109 @@
package app
import (
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-print/controllers"
"git.rosy.net.cn/jx-print/globals"
"git.rosy.net.cn/jx-print/model"
tempModel "git.rosy.net.cn/jx-print/model/app_model"
printServer "git.rosy.net.cn/jx-print/services/print_server/app_server"
"github.com/gin-gonic/gin"
"net/http"
)
type PrinterBindStore struct {
}
var PrinterBindStoreController = new(PrinterBindStore)
// AddPrinterBindStore 记录授权成功的门店信息
// @Title 记录授权成功的门店信息
// @Description 记录授权成功的门店信息
// @Param token cookie string true "用户登录token"
// @Param data body app_model.AddBindStore true "请求参数"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /bindingStore [post]
func (p *PrinterBindStore) AddPrinterBindStore(c *gin.Context) {
var (
err error
tokenInfo *model.TokenInfo
param = &tempModel.AddBindStore{}
bindServer = printServer.PrintBindStore{}
)
if err = c.ShouldBind(&param); err != nil {
controllers.BuildErrJson(c, err)
return
}
if tokenInfo = controllers.CheckToken(c); tokenInfo == nil {
return
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
err = bindServer.AddStoreBind(tokenInfo.User.UserID, param)
return retVal, "", err
})
}
// CheckStoreBindStatus 检查用户是否可以取消门店打印机绑定
// @Title 检查用户是否可以取消门店打印机绑定
// @Description 检查用户是否可以取消门店打印机绑定
// @Param token cookie string true "用户登录token"
// @Param data body app_model.RelieveStore true "请求参数"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /checkBindingStore [post]
func (p *PrinterBindStore) CheckStoreBindStatus(c *gin.Context) {
var (
err error
tokenInfo *model.TokenInfo
param = &tempModel.RelieveStore{}
bindServer = printServer.PrintBindStore{}
)
if err = c.ShouldBind(&param); err != nil {
controllers.BuildErrJson(c, err)
return
}
if tokenInfo = controllers.CheckToken(c); tokenInfo == nil {
return
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
have, err := bindServer.QueryStoreAndUser(param)
return map[string]bool{"bind": have}, "", err
})
}
// LoseStoreAuthorize 失去授权回调
// @Title 失去授权回调
// @Description 失去授权回调
// @Param token cookie string true "用户登录token"
// @Param data body app_model.RelieveStore true "请求参数"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /loseAuthorize [post]
func (p *PrinterBindStore) LoseStoreAuthorize(c *gin.Context) {
if c.Request.Method == http.MethodPost {
var (
bindServer = printServer.PrintBindStore{}
)
storeId, err := bindServer.AnalysisStore(c.Request)
if err != nil {
globals.SugarLogger.Errorf("京西菜市门店失去授权回调错误:%v", err)
c.JSON(http.StatusNotFound, "")
}
if storeId == "" {
globals.SugarLogger.Errorf("京西菜市门店失去授权回调错误,门店id不能小于等于0:%v", err)
c.JSON(http.StatusNotFound, "")
}
if err := bindServer.LoseAuthorize(utils.Str2Int64(storeId)); err != nil {
globals.SugarLogger.Errorf("通联支付,回调函数错误处理异常:%v", err)
c.JSON(http.StatusNotFound, "")
}
c.JSON(http.StatusOK, "")
} else {
c.JSON(http.StatusNotFound, "")
}
}

View File

@@ -27,12 +27,47 @@ func (p *PrintSetting) UpdatePrintSetting(c *gin.Context) {
param = &tempModel.UpdatePrintSetting{}
server = app_server.PrintSettingInfoServer
)
if tokenInfo = controllers.CheckToken(c); tokenInfo == nil {
return
}
if err = c.ShouldBind(param); err != nil {
controllers.BuildErrJson(c, err)
return
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
err = server.UpdatePrintSetting(tokenInfo.User.UserID, param)
return "", "", err
})
}
// GetPrintSetting 获取当前打印机设置
// @Title 获取当前打印机设置
// @Description 获取当前打印机设置
// @Param token cookie string true "用户登录token"
// @Param data body app_model.GetPrintSetting true "请求参数"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /getPrintSetting [get]
func (p *PrintSetting) GetPrintSetting(c *gin.Context) {
var (
err error
param = &tempModel.GetPrintSetting{}
server = app_server.PrintSettingInfoServer
tokenInfo *model.TokenInfo
)
if tokenInfo = controllers.CheckToken(c); tokenInfo == nil {
return
}
if err = c.ShouldBind(param); err != nil {
controllers.BuildErrJson(c, err)
return
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
retVal, err = server.QueryPrintSetting(param.PrintNo)
return retVal, "", err
})
}

View File

@@ -75,6 +75,7 @@ func (p *PrinterTemp) DeleteTemp(c *gin.Context) {
// @Title 获取用户模板
// @Description 获取用户模板
// @Param token cookie string true "用户登录token"
// @Param data body app_model.QueryUserTemp true "请求参数"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /getUserTempList [get]
@@ -82,7 +83,7 @@ func (p *PrinterTemp) GetUserTempList(c *gin.Context) {
var (
err error
tokenInfo *model.TokenInfo
param = tempModel.DeleteTemp{}
param = tempModel.QueryUserTemp{}
tempServer = printServer.TempServer{}
)
if err = c.ShouldBind(&param); err != nil {
@@ -92,8 +93,9 @@ func (p *PrinterTemp) GetUserTempList(c *gin.Context) {
if tokenInfo = controllers.CheckToken(c); tokenInfo == nil {
return
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
retVal, err = tempServer.QueryTempList(tokenInfo.User.UserID)
retVal, err = tempServer.QueryTempList(tokenInfo.User.UserID, param.PrintSn)
return retVal, "", err
})
}
@@ -117,8 +119,13 @@ func (p *PrinterTemp) SwitchTemp(c *gin.Context) {
controllers.BuildErrJson(c, err)
return
}
if tokenInfo = controllers.CheckToken(c); tokenInfo == nil {
return
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
err = tempServer.SwitchTemp(tokenInfo.User.UserID, param.ID)
err = tempServer.SwitchTemp(tokenInfo.User.UserID, param.PrintSn, param.ID)
return "", "", err
})
}

View File

@@ -0,0 +1,71 @@
package app
import (
"git.rosy.net.cn/jx-print/controllers"
"git.rosy.net.cn/jx-print/globals"
"git.rosy.net.cn/jx-print/model"
"git.rosy.net.cn/jx-print/model/app_model"
"git.rosy.net.cn/jx-print/services/api"
"git.rosy.net.cn/jx-print/services/print_server/app_server"
"github.com/gin-gonic/gin"
"net/http"
)
// Pay4Order 充值打印机
// @Title 充值打印机
// @Description 充值打印机
// @Param token header string true "认证token"
// @Param data body app_model.PayOrder true "请求参数"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /pay4Order [post]
func (a *Auth2Controller) Pay4Order(c *gin.Context) {
// 参数绑定
var (
err error
params *app_model.PayOrder
service = app_server.PrintPayServer
tokenInfo *model.TokenInfo
)
if err = c.ShouldBind(&params); err != nil {
c.JSON(http.StatusOK, &model.CallBack{
Code: model.ErrCodeNormal,
Desc: err.Error(),
})
return
}
if tokenInfo = controllers.CheckToken(c); tokenInfo == nil {
return
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
pay, err := service.Pay4Order(tokenInfo.User, service.GetRealRemoteIP(c), params.TotalFee, params.PayType, params.VendorPayType, params.PrintNo)
if err != nil {
return nil, "", err
}
return map[string]interface{}{"pay": pay}, "", nil
})
}
func (a *Auth2Controller) PayCallBack(c *gin.Context) {
if c.Request.Method == http.MethodPost {
call, err := api.TLpayAPI.GetCallbackMsg(c.Request)
if err != nil {
globals.SugarLogger.Errorf("通联支付,结构体转换错误:%v", err)
c.JSON(http.StatusNotFound, "")
}
var service = app_server.PrintPayServer
if err := service.OnTLPayCallback(call); err != nil {
globals.SugarLogger.Errorf("通联支付,回调函数错误处理异常:%v", err)
c.JSON(http.StatusNotFound, "")
}
c.JSON(http.StatusOK, call)
} else {
c.JSON(http.StatusNotFound, "")
}
}

View File

@@ -2,13 +2,16 @@ package app
import (
"errors"
"fmt"
"git.rosy.net.cn/jx-print/controllers"
"git.rosy.net.cn/jx-print/globals"
"git.rosy.net.cn/jx-print/model"
printModel "git.rosy.net.cn/jx-print/model/app_model"
"git.rosy.net.cn/jx-print/putils"
print "git.rosy.net.cn/jx-print/services/print_server"
printServer "git.rosy.net.cn/jx-print/services/print_server/app_server"
"github.com/gin-gonic/gin"
"time"
)
type Print struct{}
@@ -30,6 +33,8 @@ func (p *Print) AddPrinters(c *gin.Context) {
param = printModel.AddPrintReq{}
printInfo []*model.PrintInfo
setting = printServer.PrintSettingInfoServer
bill = printServer.PrintBillServer
txDB = globals.GetTxDb()
)
if err = c.ShouldBind(&param); err != nil {
@@ -45,18 +50,48 @@ func (p *Print) AddPrinters(c *gin.Context) {
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
// 校验打印机绑定用户
if err := printServer.QueryPrintKeyIsExit(printInfo[0], param.Phone, param.BizId, param.Code, param.AppID); err != nil {
// 查询打印机心跳,服务器接收到打印机心跳请求,才可以继续绑定!防止用户无休止绑定打印机!
// 只有开机联网成功的打印机才可以绑定用户
have, err := printServer.PrintActivationServer.QueryPrintHeard(printInfo[0].PrintNo)
if err != nil {
return nil, "", err
}
if !have {
return nil, "", fmt.Errorf("未检测到打印机心跳,请激活打印机,链接无线网络")
}
// 添加打印机
if err := printServer.AddPrinters(tokenInfo, param.AppID, printInfo); err != nil {
if err := printServer.AddPrinters(txDB, tokenInfo, param.AppID, printInfo, param.Phone); err != nil {
txDB.Rollback()
return nil, "", err
}
// 赋予默认配置
if err := setting.SystemInitPrintSetting(printInfo[0].PrintNo); err != nil {
if err := setting.SystemInitPrintSetting(txDB, printInfo[0].PrintNo); err != nil {
txDB.Rollback()
return nil, "", err
}
// 初始化打印机账户
if err := bill.InitPPrintBill(txDB, &printModel.PrintBill{
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
PrintNo: printInfo[0].PrintNo,
PrintBalance: 20000,
UserId: tokenInfo.User.UserID,
}); err != nil {
txDB.Rollback()
return nil, "", err
}
defer func() {
if r := recover(); r != nil {
txDB.Rollback()
} else {
txDB.Commit()
}
}()
// 初始化打印机余额,如果打印机存在,如果打印机存在,不做修改!打印机不存在则初始化打印机余额
return "", "", nil
})
@@ -85,7 +120,30 @@ func (p *Print) GetPrinters(c *gin.Context) {
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
retVal, err = printServer.GetPrinters(param.AppID, param.PrintNo, param.Name, param.Status, param.IsOnline, param.Offset, param.PageSize, "")
retVal, err = printServer.GetPrinters(param.AppID, param.PrintNo, param.Name, param.Status, param.IsOnline, param.Offset, param.PageSize, tokenInfo.User.UserID)
return retVal, "", err
})
}
// GetPrintIsUse 查询打印机是否被使用 GET
// @Title 查询打印机是否被使用
// @Description 查询打印机是否被使用
// @Param token cookie string true "用户登录token"
// @Param data body app_model.GetPrintIsUse true "请求参数"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /getPrintIsUse [get]
func (p *Print) GetPrintIsUse(c *gin.Context) {
var (
err error
param = printModel.GetPrintIsUse{}
)
if err = c.ShouldBind(&param); err != nil {
controllers.BuildErrJson(c, err)
return
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
retVal, err = printServer.GetPrintIsUse(param.PrintNo)
return retVal, "", err
})
}
@@ -103,7 +161,6 @@ func (p *Print) DelPrinters(c *gin.Context) {
err error
tokenInfo *model.TokenInfo
param = printModel.DeletePrintReq{}
printNos []string
tempServer = printServer.TempServer{}
settingServer = printServer.PrintSettingServer{}
)
@@ -114,21 +171,23 @@ func (p *Print) DelPrinters(c *gin.Context) {
if tokenInfo = controllers.CheckToken(c); tokenInfo == nil {
return
}
if err = putils.UnmarshalUseNumber([]byte(param.PrintNos), &printNos); err != nil {
controllers.BuildErrJson(c, err)
return
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
// 手机号验证
if err := printServer.DeletePrintCheck(param.PrintNos, param.Phone, param.BizId, param.Code, param.AppID); err != nil {
return nil, "", err
}
// 删除打印机
if err := printServer.DelPrinters(param.AppID, tokenInfo, printNos); err != nil {
if err := printServer.DelPrinters(param.AppID, tokenInfo, param.PrintNos); err != nil {
return nil, "", err
}
// 删除模板
err = tempServer.DeleteAllTemp(tokenInfo.User.UserID, printNos)
err = tempServer.DeleteAllTemp(tokenInfo.User.UserID, param.PrintNos)
// 删除设置
err = settingServer.DeletePrintSetting(printNos)
err = settingServer.DeletePrintSetting(param.PrintNos)
// 删除打印消息
err = print.DeletePrintMsg(printNos)
err = print.DeletePrintMsg(param.PrintNos)
return retVal, "", err
})
}
@@ -224,6 +283,35 @@ func (p *Print) GetPrintMessages(c *gin.Context) {
})
}
// QueryPrintBill 查询打印机账户余额 get
// @Title 获取打印机账户余额
// @Description 获取打印机账户余额
// @Param token cookie string true "用户登录token"
// @Param data body app_model.QueryPrintBill true "请求参数"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /queryPrintBill [get]
func (p *Print) QueryPrintBill(c *gin.Context) {
var (
err error
tokenInfo *model.TokenInfo
param = printModel.QueryPrintBill{}
server = printServer.PrintBillServer
)
if err = c.ShouldBind(&param); err != nil {
controllers.BuildErrJson(c, err)
return
}
if tokenInfo = controllers.CheckToken(c); tokenInfo == nil {
return
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
retVal, err = server.QueryPrintBill(tokenInfo.User.UserID, param.PrintNo)
return retVal, "", err
})
}
// StatPrinterReport 查询打印统计(首页) GET
func (p *Print) StatPrinterReport(c *gin.Context) {
var (

View File

@@ -22,10 +22,9 @@ func init() {
func CheckToken(c *gin.Context) (tokenInfo *model.TokenInfo) {
var (
cookie *http.Cookie
err error
tokenMap map[string]interface{}
user *model.User
cookie *http.Cookie
err error
user *model.User
)
tokenInfo = &model.TokenInfo{}
//验证token
@@ -40,8 +39,9 @@ func CheckToken(c *gin.Context) (tokenInfo *model.TokenInfo) {
} else {
tokenInfo.Token = cookie.Value
}
globals.SugarLogger.Debugf("checkToken token: %v", tokenInfo.Token)
if tokenMap = putils.GetKey(tokenInfo.Token).(map[string]interface{}); tokenMap == nil {
tokenMap2 := putils.GetKey(tokenInfo.Token)
if utils.IsNil(tokenMap2) {
err = fmt.Errorf("token过期或无效请重新登录")
c.JSON(http.StatusOK, &model.CallBack{
Desc: err.Error(),
@@ -49,7 +49,8 @@ func CheckToken(c *gin.Context) (tokenInfo *model.TokenInfo) {
})
return nil
}
data, _ := json.Marshal(tokenMap)
data, _ := json.Marshal(tokenMap2)
if err = json.Unmarshal(data, &user); err == nil && user != nil {
tokenInfo.User = user
} else {
@@ -152,8 +153,8 @@ func createToken(user *model.User) (token string) {
wxConst.TokenHeader,
wxConst.TokenVer,
user.UserID,
time.Now().Format("20060102-150405"),
utils.GetUUID(),
time.Now().Format("20060102"),
utils.Int2Str(user.ID),
user.Mobile,
}, wxConst.TokenTypeSep)
}

View File

@@ -53,6 +53,97 @@ func Insert(db *sqlx.DB, obj interface{}) (err error) {
return err
}
func InsertTx(db *sqlx.Tx, obj interface{}) (err error) {
var (
value = reflect.ValueOf(obj)
stype = reflect.TypeOf(obj)
sql, values = strings.Builder{}, strings.Builder{}
sqlParams = []interface{}{}
direct reflect.Value
)
if stype.Kind() != reflect.Struct {
direct = reflect.Indirect(value)
stype = stype.Elem()
} else {
direct = value
}
sname := stype.Name()
sql.WriteString("INSERT INTO ")
for i := 0; i < stype.NumField(); i++ {
if stype.Field(i).Type.String() == "*time.Time" {
if direct.Field(i).Interface().(*time.Time) != nil {
values.WriteString(stype.Field(i).Tag.Get("json") + ",")
sqlParams = append(sqlParams, direct.Field(i).Interface())
}
} else {
if !direct.Field(i).IsZero() {
values.WriteString(stype.Field(i).Tag.Get("json") + ",")
sqlParams = append(sqlParams, direct.Field(i).Interface())
}
}
}
sql.WriteString(putils.UnMarshalHr(sname) + "(")
sql.WriteString(values.String()[:len(values.String())-1])
sql.WriteString(") VALUES(")
for i := 0; i < len(strings.Split(values.String(), ","))-1; i++ {
if i != 0 {
sql.WriteString(",")
}
sql.WriteString("?")
}
sql.WriteString(")")
_, err = db.Exec(sql.String(), sqlParams...)
return err
}
func UpdateTx(db *sqlx.Tx, obj interface{}, fields ...string) (err error) {
var (
value = reflect.ValueOf(obj)
stype = reflect.TypeOf(obj)
sql = strings.Builder{}
sqlParams = []interface{}{}
direct reflect.Value
fieldsMap = make(map[string]*struct{})
)
if stype.Kind() != reflect.Struct {
direct = reflect.Indirect(value)
stype = stype.Elem()
} else {
direct = value
}
sname := stype.Name()
sql.WriteString("UPDATE ")
sql.WriteString(putils.UnMarshalHr(sname) + " SET ")
fieldsStr := []string{}
for _, v := range fields {
fieldsStr = append(fieldsStr, v+"=?")
fieldsMap[v] = &struct{}{}
}
sql.WriteString(strings.Join(fieldsStr, ","))
sql.WriteString(" WHERE id = ?")
for i := 1; i < stype.NumField(); i++ {
if fieldsMap[stype.Field(i).Tag.Get("json")] != nil {
if stype.Field(i).Type.String() == "*time.Time" {
if direct.Field(i).Interface().(*time.Time) != nil {
sqlParams = append(sqlParams, direct.Field(i).Interface())
}
} else {
if !direct.Field(i).IsZero() {
sqlParams = append(sqlParams, direct.Field(i).Interface())
}
}
}
}
if direct.Field(0).Int() == 0 {
return err
} else {
sqlParams = append(sqlParams, direct.Field(0).Int())
}
_, err = db.Exec(sql.String(), sqlParams...)
return err
}
func Update(db *sqlx.DB, obj interface{}, fields ...string) (err error) {
var (
value = reflect.ValueOf(obj)

18
dao/print_activation.go Normal file
View File

@@ -0,0 +1,18 @@
package dao
import "git.rosy.net.cn/jx-print/globals"
type PrintActivation struct {
}
var PrintActivationDao = new(PrintActivation)
// QueryPrintHeartBeat 查询打印机是否心跳监听正常
func (p *PrintActivation) QueryPrintHeartBeat(printNo string) (bool, error) {
count := 0
err := globals.GetDB().QueryRow(`SELECT count(print_no) FROM print_activation WHERE print_no = ?`, []interface{}{printNo}...).Scan(&count)
if err != nil {
return false, err
}
return count == 1, nil
}

49
dao/print_bill.go Normal file
View File

@@ -0,0 +1,49 @@
package dao
import (
"git.rosy.net.cn/jx-print/globals"
"git.rosy.net.cn/jx-print/model/app_model"
"github.com/jmoiron/sqlx"
)
// QueryPrintBill 查询打印机账户是否存在
func QueryPrintBill(userId, printNo string) ([]*app_model.PrintBill, error) {
sql := `SELECT * FROM print_bill WHERE 1 = 1 `
var param []interface{}
if userId != "" {
sql += ` AND user_id = ? `
param = append(param, userId)
}
if printNo != "" {
sql += ` AND print_no = ? `
param = append(param, printNo)
}
var result []*app_model.PrintBill
if err := globals.GetDB().Select(&result, sql, param...); err != nil {
return nil, err
}
return result, nil
}
// InitPrintBill 初始化打印机账户
func InitPrintBill(txDB *sqlx.Tx, param *app_model.PrintBill) error {
if err := InsertTx(txDB, param); err != nil {
return err
}
return nil
}
// AddMoney 添加充值金额
func AddMoney(db *sqlx.Tx, printNo string, money int64) error {
sql := `UPDATE print_bill SET print_balance = print_balance + ? WHERE print_no = ?`
if _, err := db.Exec(sql, []interface{}{printNo, money}...); err != nil {
return err
}
return nil
}
// UpdateBillToUser 当打印机账户从菜市绑定时,未分配用户,用户再使用小程序绑定时,将打印机分配给用户!
func UpdateBillToUser(db *sqlx.Tx, param *app_model.PrintBill) error {
return UpdateTx(db, param, []string{"user_id"}...)
}

35
dao/print_bill_pay.go Normal file
View File

@@ -0,0 +1,35 @@
package dao
import (
"fmt"
"git.rosy.net.cn/jx-print/globals"
order "git.rosy.net.cn/jx-print/model/app_model"
"github.com/jmoiron/sqlx"
)
// InsertPrinterPayRecord 新增充值记录
func InsertPrinterPayRecord(order *order.OrderPay) error {
return Insert(globals.GetDB(), order)
}
// QueryPrinterPayRecord 查询充值记录
func QueryPrinterPayRecord(orderId string) (*order.OrderPay, error) {
sql := `SELECT * FROM order_pay WHERE pay_order_id = ?`
var result []*order.OrderPay
if err := globals.GetDB().Select(&result, sql, []interface{}{orderId}...); err != nil {
return nil, err
}
if len(result) != 1 {
globals.SugarLogger.Errorf("回调查询错误,订单id不存在或者不唯一")
return nil, fmt.Errorf("回调查询错误,订单id不存在或者不唯一")
}
return result[0], nil
}
// UpdatePrinterPayRecord 修改充值表记录状态
func UpdatePrinterPayRecord(db *sqlx.Tx, order *order.OrderPay, field ...string) error {
return UpdateTx(db, order, field...)
}

10
dao/print_bill_record.go Normal file
View File

@@ -0,0 +1,10 @@
package dao
import (
printModel "git.rosy.net.cn/jx-print/model/app_model"
"github.com/jmoiron/sqlx"
)
func AddIncomeRecord(db *sqlx.Tx, param *printModel.PrintBillRecord) error {
return InsertTx(db, param)
}

49
dao/print_bind_store.go Normal file
View File

@@ -0,0 +1,49 @@
package dao
import (
"git.rosy.net.cn/jx-print/globals"
storeModel "git.rosy.net.cn/jx-print/model/app_model"
)
// CreatePrintStoreBind 创建绑定
func CreatePrintStoreBind(param *storeModel.PrintBindStore) error {
return Insert(globals.GetDB(), param)
}
// QueryBindNumber 查询门店绑定数量
func QueryBindNumber(userId, printNo string) (int, error) {
sql := `SELECT count(*) FROM print_bind_store WHERE user_id = ? AND print_no = ?`
count := 0
row := globals.GetDB().DB.QueryRow(sql, []interface{}{userId, printNo}...)
if err := row.Scan(&count); err != nil {
return 0, err
}
return count, nil
}
// RelieveToken 解除授权绑定门店信息
func RelieveToken(userId, printNo string, storeId int64) error {
_, err := globals.GetDB().Exec(`UPDATE print_bind_store SET bind_status = ? WHERE user_id = ? AND print_no = ? AND store_id = ?`, []interface{}{storeModel.StoreBindPrintFail, userId, printNo, storeId}...)
return err
}
// QueryStoreAndUserManager 查询用户门店的绑定关系
func QueryStoreAndUserManager(userId, printNo string, storeId int64) (bool, error) {
count := 0
err := globals.GetDB().DB.QueryRow(`SELECT count(*) FROM print_bind_store WHERE user_id = ? AND print_no = ? AND store_id = ?`, []interface{}{userId, printNo, storeId}...).Scan(&count)
if err != nil {
return false, err
}
if count != 1 {
return false, nil
}
return true, nil
}
// UpdateStoreAuthorize 失去授权
func UpdateStoreAuthorize(storeId int64) error {
_, err := globals.GetDB().Exec(`UPDATE print_bind_store SET store_status = ? WHERE store_id = ?`, []interface{}{storeModel.StoreStatusLose, storeId}...)
return err
}

View File

@@ -79,7 +79,6 @@ func GetPrintersPage(db *sqlx.DB, appID int, printNo, name string, status, isOnl
}
sqlOther += " LIMIT ? OFFSET ?"
sqlParams = append(sqlParams, pageSize, offset)
var printers []model.Printer
if err = db.Select(&printers, sql+sqlOther, sqlParams...); err != nil {
return nil, err
@@ -88,6 +87,16 @@ func GetPrintersPage(db *sqlx.DB, appID int, printNo, name string, status, isOnl
return &model.PagedInfo{TotalCount: count, Data: printers}, err
}
func GetPrintIsUse(printNo string) (bool, error) {
sql := `SELECT * FROM printer WHERE deleted_at = ? AND print_no = ?`
param := []interface{}{utils.DefaultTimeValue, printNo}
var result []*model.Printer
if err := globals.GetDB().Select(&result, sql, param...); err != nil {
return false, err
}
return len(result) == 1, nil
}
func GetPrintMessagesPage(db *sqlx.DB, printNo, msgID, beginAt, endAt string, offset, pageSize int) (page *model.PagedInfo, err error) {
var (
printMsgs []*model.PrintMsg
@@ -229,20 +238,20 @@ func GetPrinter(db *sqlx.DB, printNo, iccID string) (printer *model.Printer, err
}
// GetPrintById 根据用户id和打印机编号获取打印机
func GetPrintById(userId, printNo string) (bool, error) {
func GetPrintById(userId, printNo string) (bool, *model.Printer, error) {
var printer []*model.Printer
sql := `SELECT * FROM printer WHERE print_no = ? AND user_id = ? AND deleted_at = ?`
if err := globals.GetDB().Select(&printer, sql, []interface{}{printNo, userId, utils.DefaultTimeValue}...); err != nil {
return false, err
return false, nil, err
}
if len(printer) != 1 {
return false, errors.New("用户打印机数据异常,联系管理员") // 打印机编号唯一
return false, nil, errors.New("用户打印机数据异常,联系管理员") // 打印机编号唯一
}
return true, nil
return true, printer[0], nil
}
// DeletePrinterMsg 删除打印机消息
func DeletePrinterMsg(printNos []string) error {
_, err := globals.GetDB().Exec(`DELETE FROM print_msg WHERE print_no IN (?) `, []interface{}{printNos}...)
func DeletePrinterMsg(printNos string) error {
_, err := globals.GetDB().Exec(`DELETE FROM print_msg WHERE print_no = ?`, []interface{}{printNos}...)
return err
}

View File

@@ -1,9 +1,11 @@
package dao
import (
"fmt"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-print/globals"
settingModel "git.rosy.net.cn/jx-print/model/app_model"
"github.com/jmoiron/sqlx"
)
type PrintSettingDao struct{}
@@ -26,13 +28,14 @@ func (p *PrintSettingDao) QueryPrintNoIsExit(printNo string) (bool, error) {
}
// InsertPrintSetting 插入打印机设置
func (p *PrintSettingDao) InsertPrintSetting(param *settingModel.PrintSetting) error {
return Insert(globals.GetDB(), param)
func (p *PrintSettingDao) InsertPrintSetting(tx *sqlx.Tx, param *settingModel.PrintSetting) error {
return InsertTx(tx, param)
}
// UpdatePrinterSetting 修改打印机配置
func (p *PrintSettingDao) UpdatePrinterSetting(param *settingModel.UpdatePrintSetting) error {
db := globals.GetDB()
sql := `UPDATE print_setting SET `
var param2 []interface{}
@@ -41,72 +44,50 @@ func (p *PrintSettingDao) UpdatePrinterSetting(param *settingModel.UpdatePrintSe
param2 = append(param2, param.CallNameSetting)
}
if param.SystemVoice != 0 {
sql += ` system_voice = ? `
sql += ` ,system_voice = ? `
param2 = append(param2, param.SystemVoice)
}
if param.PrintVoiceSetting != "" {
sql += ` print_voice_setting = ? `
sql += ` ,print_voice_setting = ? `
param2 = append(param2, param.PrintVoiceSetting)
}
if param.OrderVoiceSetting != "" {
sql += ` order_voice_setting = ? `
sql += ` ,order_voice_setting = ? `
param2 = append(param2, param.OrderVoiceSetting)
}
if param.RiderVoiceSetting != "" {
sql += ` rider_voice_setting = ? `
sql += ` ,rider_voice_setting = ? `
param2 = append(param2, param.RiderVoiceSetting)
}
if param.CustomerVoiceSetting != "" {
sql += ` customer_voice_setting = ? `
sql += ` ,customer_voice_setting = ? `
param2 = append(param2, param.CustomerVoiceSetting)
}
if param.PickingSetting != "" {
sql += ` picking_setting = ? `
sql += ` ,picking_setting = ? `
param2 = append(param2, param.PickingSetting)
}
sql += ` WHERE print_no = ? `
param2 = append(param2, param.PrintNo)
_, err := db.Exec(sql, param2...)
return err
}
// DeleteSetting 删除打印机设置
func (p *PrintSettingDao) DeleteSetting(printNo []string) error {
_, err := globals.GetDB().Exec(`DELETE FROM print_setting WHERE print_no in (?)`, []interface{}{printNo}...)
func (p *PrintSettingDao) DeleteSetting(printNo string) error {
_, err := globals.GetDB().Exec(`DELETE FROM print_setting WHERE print_no = ?`, []interface{}{printNo}...)
return err
}
// GetUserPrintSetting 获取用户打印机设置
func (p *PrintSettingDao) GetUserPrintSetting(userId, printNo string) {
sql := `
SELECT
s.*
FROM
printer p
INNER JOIN print_setting s ON s.print_no = p.print_no
WHERE
p.user_id = ?
AND p.print_no = ?
`
param := []interface{}{userId, printNo}
var setting *settingModel.PrintSetting
if err := globals.GetDB().QueryRow(sql, param...).Scan(&setting); err != nil {
return
}
if setting == nil {
return
}
//json.Unmarshal([]byte(setting.))
}
// QueryPrintSetting 查询打印机设置
func (p *PrintSettingDao) QueryPrintSetting(printNo string) (*settingModel.PrintSetting, error) {
var result *settingModel.PrintSetting
if err := globals.GetDB().QueryRow(`SELECT * FROM print_setting WHERE print_no = ? AND deleted_at = ?`, printNo, utils.DefaultTimeValue).Scan(&result); err != nil {
var result []*settingModel.PrintSetting
if err := globals.GetDB().Select(&result, `SELECT * FROM print_setting WHERE print_no = ? AND deleted_at = ?`, printNo, utils.DefaultTimeValue); err != nil {
return nil, err
}
return result, nil
if len(result) != 1 {
return nil, fmt.Errorf("打印机设置查询错误,联系管理员")
}
return result[0], nil
}

View File

@@ -11,3 +11,9 @@ func TestGetPrinters(t *testing.T) {
fmt.Println("data=======", data)
fmt.Println("data=======", err)
}
func TestGetPrintUse(t *testing.T) {
have, err := PrintActivationDao.QueryPrintHeartBeat("20220818000001")
fmt.Println(have)
fmt.Println(err)
}

View File

@@ -1,27 +1,33 @@
package dao
import (
"fmt"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-print/globals"
"git.rosy.net.cn/jx-print/model/app_model"
)
// GetTempByName 根据模板名称获取模板
func GetTempByName(userID, tempName string) ([]*app_model.SystemTemp, error) {
func GetTempByName(userID, printNo, tempName string) ([]*app_model.SystemTemp, error) {
sql := `SELECT * FROM system_temp WHERE 1=1`
var param []interface{}
if userID != "" {
sql += ` AND user_id = ?`
param = append(param, userID)
}
if printNo != "" {
sql += ` AND print_sn = ?`
param = append(param, printNo)
}
if tempName != "" {
sql += ` AND temp_name = ?`
param = append(param, tempName)
}
sql += ` AND deleted_at = ?`
param = append(param, utils.DefaultTimeValue)
var result []*app_model.SystemTemp
var result []*app_model.SystemTemp
if err := globals.GetDB().Select(&result, sql, param...); err != nil {
return nil, err
}
@@ -34,32 +40,65 @@ func AddTemp(param *app_model.SystemTemp) error {
}
// UpdateOtherTempStatus 修改其他模板为非默认
func UpdateOtherTempStatus(userId string) error {
_, err := globals.GetDB().Exec(`UPDATE system_temp SET is_use = ? WHERE user_id = ?`, []interface{}{2, userId})
func UpdateOtherTempStatus(userId, printNo string) error {
_, err := globals.GetDB().Exec(`UPDATE system_temp SET is_use = ? WHERE user_id = ? AND print_sn = ?`, []interface{}{2, userId, printNo}...)
return err
}
// UpdateTemp 修改模板数据
func UpdateTemp(param *app_model.SystemTemp, fields []string) error {
//sql := `UPDATE system_temp SET `
//var sqlParam []interface{}
//updateBuffer := make([]string, 0, 14)
//if param.CreatedAt != "" {
// updateBuffer = append(updateBuffer, "created_at")
// sqlParam = append(sqlParam, param.Temp)
//}
//if param.UpdatedAt != "" {
//}
//if param.LastOperator != "" {
//}
//if param.DeletedAt != "" {
//}
//if param.TempName != "" {
//}
//if param.TempRank != "" {
//}
//if param.Temp != "" {
//}
//if param.UserId != "" {
//}
//if param.TempType != "" {
//}
//if param.TempSize != "" {
//}
//if param.PrintSn != "" {
//}
//if param.IsUse != "" {
//}
//if param.Properties != "" {
//}
return Update(globals.GetDB(), param, fields...)
}
// DeleteTemp 删除模板数据
func DeleteTemp(id int, userId string) error {
_, err := globals.GetDB().Exec(`DELETE FROM system_temp WHERE id = ? AND user_id = ?`, []interface{}{id, userId}...)
return err
}
// DeleteAllTemp 删除用户所属打印机所有模板
func DeleteAllTemp(userId string, printNo []string) error {
_, err := globals.GetDB().Exec(`DELETE FROM system_temp WHERE user_id = ? AND print_sn IN (?)`, []interface{}{userId, printNo}...)
func DeleteAllTemp(userId string, printNo string) error {
_, err := globals.GetDB().Exec(`DELETE FROM system_temp WHERE user_id = ? AND print_sn = ? `, []interface{}{userId, printNo}...)
return err
}
// SelectUserTemp 查询用户模板
func SelectUserTemp(userId string) ([]*app_model.SystemTemp, error) {
func SelectUserTemp(userId, printSn string) ([]*app_model.SystemTemp, error) {
var result []*app_model.SystemTemp
if err := globals.GetDB().Select(&result, `SELECT * FROM system_temp WHERE user_id = ? AND deleted_at = ? ORDER BY created_at desc `, []interface{}{userId, utils.DefaultTimeValue}...); err != nil {
if err := globals.GetDB().Select(&result, `SELECT * FROM system_temp WHERE user_id = ? AND print_sn = ? AND deleted_at = ? ORDER BY created_at desc `, []interface{}{userId, printSn, utils.DefaultTimeValue}...); err != nil {
return nil, err
}
return result, nil
@@ -87,12 +126,26 @@ func QuerySystemTemp() ([]*app_model.SystemTemp, error) {
}
// SwitchTemp2User 切换模板
func SwitchTemp2User(tempId int, userId string) error {
if _, err := globals.GetDB().Exec(`UPDATE system_temp SET is_use = 2 WHERE user_id = ?`, []interface{}{userId}...); err != nil {
func SwitchTemp2User(tempId int, userId, printSn string) error {
if _, err := globals.GetDB().Exec(`UPDATE system_temp SET is_use = 2 WHERE user_id = ? AND print_sn = ?`, []interface{}{userId, printSn}...); err != nil {
return err
}
if _, err := globals.GetDB().Exec(`UPDATE system_temp SET is_use = 1 WHERE id = ? AND user_id = ?`, []interface{}{tempId, userId}...); err != nil {
if _, err := globals.GetDB().Exec(`UPDATE system_temp SET is_use = 1 WHERE id = ? AND user_id = ? AND print_sn = ?`, []interface{}{tempId, userId, printSn}...); err != nil {
return err
}
return nil
}
// QueryTempById 查询模板根据id
func QueryTempById(id int) (data *app_model.SystemTemp, err error) {
var result []*app_model.SystemTemp
if err := globals.GetDB().Select(&result, `SELECT * FROM system_temp WHERE id = ?`, []interface{}{id}...); err != nil {
return nil, err
}
if len(result) != 1 {
return nil, fmt.Errorf("参数异常")
}
return result[0], nil
}

View File

@@ -15,6 +15,8 @@ var (
AliSecret = "NTegceUFX0FdfMovqCDzqcIKmhcoOu"
SmsSignName = "京西菜市"
SmsMobileVerifyTemplate = "SMS_175583158"
TongLianPayCallBack = "http://callback.jxc4.com/wxpay/msg/" //通联回调地址
)
func init() {
@@ -28,8 +30,14 @@ func init() {
db.SetConnMaxLifetime(time.Second * 10)
db.SetMaxOpenConns(200) // 设置与数据库建立连接的最大数目
db.SetMaxIdleConns(10) // 设置连接池中的最大闲置连接数
}
func GetDB() *sqlx.DB {
return db
}
func GetTxDb() *sqlx.Tx {
tx, _ := db.Beginx()
return tx
}

View File

@@ -10,18 +10,22 @@ type AddPrintReq struct {
}
type QueryPrintReq struct {
AppID int `json:"app_id" form:"app_id" binding:"required"` // appId
PrintNo string `json:"print_no" form:"print_no"` //打印机编号
Name string `json:"name" form:"name"` //打印机备注,模糊
Status int `json:"status" form:"status"` //打印机状态。正常还是缺纸
IsOnline int `json:"is_online" form:"is_online"` //在线状态。1在线0离线
Offset int `json:"offset" form:"offset"` // 跳过
PageSize int `json:"page_size" form:"page_size" binding:"required"` // 页数
AppID int `json:"app_id" form:"app_id" binding:"required"` // appId
PrintNo string `json:"print_no" form:"print_no"` // 打印机编号
Name string `json:"name" form:"name"` // 打印机备注,模糊
Status int `json:"status" form:"status"` // 打印机状态。正常还是缺纸
IsOnline int `json:"is_online" form:"is_online"` // 在线状态。1在线0离线
Offset int `json:"offset" form:"offset"` // 跳过
PageSize int `json:"page_size" form:"page_size"` // 页数
}
type DeletePrintReq struct {
AppID int `json:"app_id" form:"app_id" binding:"required"`
PrintNos string `json:"print_nos" form:"print_nos" binding:"required"` //打印机编号s
PrintNos string `json:"print_nos" form:"print_nos" binding:"required"` //打印机编号
Phone string `json:"phone" form:"phone" binding:"required"`
Code string `json:"code" form:"code" binding:"required"`
BizId string `json:"biz_id" form:"biz_id" binding:"required"`
}
type UpdatePrintReq struct {
@@ -48,3 +52,11 @@ type GetPrintMsg struct {
Offset int `json:"offset" form:"offset"`
PageSize int `json:"page_size" form:"page_size" binding:"required"`
}
type GetPrintIsUse struct {
PrintNo string `json:"print_no" form:"print_no" binding:"required"` //打印机编号
}
type QueryPrintBill struct {
PrintNo string `json:"print_no" form:"print_no" binding:"required"` //打印机编号
}

View File

@@ -0,0 +1,10 @@
package app_model
import "time"
// PrintActivation 打印机激活记录
type PrintActivation struct {
ID int `orm:"column(id)" json:"id" db:"id"`
CreatedAt time.Time `json:"created_at" db:"created_at"`
PrintNo string `orm:"type(varchar);size(32);index" json:"print_no" db:"print_no"` // 打印机编号
}

View File

@@ -0,0 +1,13 @@
package app_model
import "time"
// PrintBill 打印机账户
type PrintBill struct {
ID int `orm:"column(id)" json:"id" db:"id"`
CreatedAt time.Time `json:"created_at" db:"created_at"`
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
PrintNo string `orm:"type(varchar);size(32);index" json:"print_no" db:"print_no"` // 打印机编号
PrintBalance int64 `orm:"type(int);size(16)" json:"print_balance" db:"print_balance"` // 账户余额
UserId string `orm:"type(varchar);size(125)" json:"user_id" db:"user_id"` // 打印机所属用户
}

View File

@@ -0,0 +1,47 @@
package app_model
import "time"
const (
// PayTypeWX PayType 支付类型
PayTypeWX = 1 // 微信支付
PayTypeTL = 2 // 通联宝支付
// PayStatusNo Status 状态值
PayStatusNo = 0
PayStatusYes = 1
PayStatusFailed = 2
PayStatusCanceled = 3
PayStatusRefund = 4
PayBody = "京西云打印机余额充值"
OrderPayVendorId = 1 // 京西平台
)
type OrderPay struct {
ID int `orm:"column(id)" json:"id" db:"id"`
CreatedAt time.Time `orm:"type(datetime)" json:"created_at" db:"created_at"` // 创建时间
UpdatedAt time.Time `orm:"type(datetime)" json:"updated_at" db:"updated_at"` // 更新时间
PayOrderID string `orm:"column(pay_order_id);size(48)" json:"pay_order_id" db:"pay_order_id"` // 京西支付定单号
PayType int `orm:"type(int);size(2)" json:"pay_type" db:"pay_type"` // 支付类型[1-微信,2-通联,3-抖音]
VendorPayType string `orm:"size(48)" json:"vendorPayType"` //
VendorOrderID string `orm:"column(vendor_order_id);size(48);index" json:"vendor_order_id" db:"vendor_order_id"` // 支付对应的购物订单号
PrintNo string `orm:"column(print_no);size(48);index" json:"print_no" db:"print_no"` // 充值打印机编号
Status int `orm:"type(int);size(2)" json:"status" json:"status" db:"status"` // 订单支付状态
PayCreatedAt time.Time `orm:"type(datetime);index" json:"pay_created_at" db:"pay_created_at"` // 下单时间
PayFinishedAt time.Time `orm:"type(datetime)" json:"pay_finished_at" db:"pay_finished_at"` // 支付完成时间
TotalFee int `orm:"type(int);size(11)" json:"total_fee" db:"total_fee"` // 支付金额
PrepayID string `orm:"column(prepay_id);index;size(48)" json:"prepay_id" db:"prepay_id"` // 下单后支付前支付方生成的事务ID
TransactionID string `orm:"column(transaction_id);index;size(48)" json:"transaction_id" db:"transaction_id"` // 支付成功后支付方生成的事务ID
OriginalData string `orm:"type(text)" json:"-"` // 返回消息
VendorID int `orm:"column(vendor_id)" json:"vendor_id" db:"vendor_id"` // 购物订单所属厂商代码(当前只有京西)
CodeURL string `orm:"column(code_url);size(3200)" json:"codeURL"` //
}
type PayOrder struct {
SubAppID string `json:"sub_app_id" form:"sub_app_id" binding:"required"` // appID
PayType int `json:"pay_type" form:"pay_type" binding:"required"` // 支付类型
VendorPayType string `json:"vendor_pay_type" form:"vendor_pay_type" binding:"required"` // 平台支付类型
TotalFee int `json:"total_fee" form:"total_fee" binding:"required"` // 支付金额
PrintNo string `json:"print_no" form:"print_no" binding:"required"` // 打印机编号
}

View File

@@ -0,0 +1,15 @@
package app_model
import "time"
// PrintBillRecord 打印机充值/小费记录
type PrintBillRecord struct {
ID int `orm:"column(id)" json:"id" db:"id"`
CreatedAt time.Time `json:"created_at" db:"created_at"`
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
PrintNo string `orm:"type(varchar);size(32);index" json:"print_no" db:"print_no"` // 打印机编号
PayType int `orm:"type(int);size(2)" json:"pay_type" db:"pay_type"` // 支付类型[1-充值/2-支出]
PayMoney int `orm:"type(int);size(10)" json:"pay_money" db:"pay_money"` // 金额
OrderId string `orm:"type(varchar);size(64);index" json:"order_id" db:"order_id"` // 订单号
UserId string `orm:"type(varchar);size(125)" json:"user_id" db:"user_id"` // 打印机所属用户
}

View File

@@ -0,0 +1,43 @@
package app_model
import "time"
const (
StoreStatusDisabled = -2 // 禁用
StoreStatusClosed = -1 // 休息
StoreStatusHaveRest = 0 // 临时休息
StoreStatusOpened = 1 // 营业
StoreStatusLose = -9 // 丢失授权
StoreBindPrintSuccess = 1 // 绑定成功
StoreBindPrintFail = 2 // 解除绑定
)
type PrintBindStore struct {
ID int `orm:"column(id)" json:"id" db:"id"`
CreatedAt time.Time `orm:"type(datetime)" json:"created_at" db:"created_at"` // 创建时间
UpdatedAt time.Time `orm:"type(datetime)" json:"updated_at" db:"updated_at"` // 更新时间
StoreID int64 `orm:"column(store_id);type(int);size(11)" json:"store_id" db:"store_id"` // 门店id(为京西创建门店id)唯一
StoreName string `orm:"type(varchar);size(255)" json:"store_name" db:"store_name"` // 门店名称
StoreVendor int `orm:"type(int);size(2)" json:"store_vendor" db:"store_vendor"` // 门店平台
PrintNo string `orm:"type(varchar);size(32);index" json:"print_no" db:"print_no"` // 打印机编号
UserId string `orm:"type(varchar);size(125)" json:"user_id" db:"user_id"` // 打印机所属用户
StoreStatus int `orm:"type(int);size(2)" json:"store_status" db:"store_status"` // 门店状态
BindStatus int `orm:"type(int);size(2)" json:"bind_status" db:"bind_status"` // 绑定状态
}
// AddBindStore 添加门店授权
type AddBindStore struct {
StoreID int64 `json:"store_id" form:"store_id" binding:"required"` // 门店id(为京西创建门店id)
StoreName string `json:"store_name" form:"store_name" binding:"required"` // 门店名称
StoreVendor int `json:"store_vendor" form:"store_vendor" binding:"required"` // 门店平台
PrintNo string `json:"print_no" form:"print_no" binding:"required"` // 打印机编号
StoreStatus int `json:"store_status" form:"store_status" db:"store_status"` // 门店状态
}
// RelieveStore 解除门店授权
type RelieveStore struct {
UserId string `orm:"type(varchar);size(125)" json:"user_id" db:"user_id"` // 打印机所属用户
StoreID int64 `json:"store_id" form:"store_id" binding:"required"` // 门店id(为京西创建门店id)
PrintNo string `json:"print_no" form:"print_no" binding:"required"` // 打印机编号
}

View File

@@ -20,18 +20,18 @@ type PrintSetting struct {
}
type PrintSettingObj struct {
ID int
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt time.Time
PrintNo string // 打印机编号
CallNameSetting int // 称谓设置 [64-默认老板]
SystemVoice int // 平台语音开关[1打开]
PrintVoiceSetting *PrintVoice // 打印机提示语音设置
OrderVoiceSetting *OrderVoice // 订单提示设置
RiderVoiceSetting *RiderVoice // 骑手动态提示设置
CustomerVoiceSetting *CustomerReceivingGoods // 客户收货提示设置
PickingSetting *ShopPickingVoice // 拣货语音设置
ID int `json:"id"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt time.Time `json:"deleted_at"`
PrintNo string `json:"print_no"` // 打印机编号
CallNameSetting int `json:"call_name_setting"` // 称谓设置 [64-默认老板]
SystemVoice int `json:"system_voice"` // 平台语音开关[1打开]
PrintVoiceSetting *PrintVoice `json:"print_voice_setting"` // 打印机提示语音设置
OrderVoiceSetting *OrderVoice `json:"order_voice_setting"` // 订单提示设置
RiderVoiceSetting *RiderVoice `json:"rider_voice_setting"` // 骑手动态提示设置
CustomerVoiceSetting *CustomerReceivingGoods `json:"customer_voice_setting"` // 客户收货提示设置
PickingSetting *ShopPickingVoice `json:"picking_setting"` // 拣货语音设置
}
// PrintVoice 打印机提示语音设置
@@ -93,3 +93,8 @@ type UpdatePrintSetting struct {
CustomerVoiceSetting string `json:"customer_voice_setting" form:"customer_voice_setting"`
PickingSetting string `json:"picking_setting" form:"picking_setting"`
}
// GetPrintSetting 获取当前打印机设置
type GetPrintSetting struct {
PrintNo string `json:"print_no" form:"print_no"` // 打印机编号
}

View File

@@ -12,3 +12,8 @@ func TestPrintOrder(t *testing.T) {
dd := strings.Replace(cc, "\n", "", -1)
fmt.Println(dd)
}
func TestIsNil(t *testing.T) {
var data *PrintBindStore
fmt.Println(data == nil)
}

View File

@@ -21,33 +21,42 @@ type SystemTemp struct {
UpdatedAt *time.Time `json:"updated_at" db:"updated_at"`
LastOperator string `json:"last_operator" db:"last_operator"`
DeletedAt *time.Time `json:"deleted_at" db:"deleted_at"`
TempName string `json:"temp_name" db:"temp_name"` // 模板名称
TempRank string `json:"temp_rank" db:"temp_rank"` // 模板顺序
Temp string `json:"temp" db:"temp"` // 模板
UserId string `json:"user_id" db:"user_id"` // 所属用户
TempType string `json:"temp_type" db:"temp_type"` // 模板类型
TempSize string `json:"temp_size" db:"temp_size"` // 模板尺寸 big/medium/small
PrintSn string `json:"print_sn" db:"print_sn"` // 模板所属打印机
IsUse int `json:"is_use" db:"is_use"` // 默认使用 1-使用/2-不使用
TempName string `json:"temp_name" db:"temp_name"` // 模板名称
TempRank string `json:"temp_rank" db:"temp_rank"` // 模板顺序
Temp string `json:"temp" db:"temp"` // 模板
UserId string `json:"user_id" db:"user_id"` // 所属用户
TempType string `json:"temp_type" db:"temp_type"` // 模板类型 user_store/user_consumer
TempSize string `json:"temp_size" db:"temp_size"` // 模板尺寸 big/medium/small
PrintSn string `json:"print_sn" db:"print_sn"` // 模板所属打印机
IsUse int `json:"is_use" db:"is_use"` // 默认使用 1-使用/2-不使用
Properties string `json:"properties" db:"properties"` // 模板字段属性
}
type AddTemp struct {
ID int `json:"id" form:"id"` // 修改时传入
TempName string `json:"temp_name" form:"temp_name" binding:"required"` // 模板名称
Temp string `json:"temp" form:"temp" binding:"required"` // 模板
UserId string `json:"user_id" form:"user_id"` // 所属用户
TempType string `json:"temp_type" form:"temp_type" binding:"required"` // 模板类型
TempSize string `json:"temp_size" form:"temp_size" binding:"required"` // 模板尺寸 big/medium/small
PrintSn string `json:"print_sn" db:"print_sn" binding:"required"` // 模板所属打印机
IsUse int `json:"is_use" db:"is_use" binding:"required"` // 默认使用 1-使用/2-不使用
CreatedAt *time.Time `json:"created_at" form:"created_at"`
ID int `json:"id" form:"id"` // 修改时传入
TempName string `json:"temp_name" form:"temp_name" binding:"required"` // 模板名称
Temp string `json:"temp" form:"temp" binding:"required"` // 模板
UserId string `json:"user_id" form:"user_id"` // 所属用户
TempType string `json:"temp_type" form:"temp_type" binding:"required"` // 模板类型
TempRank string `json:"temp_rank" form:"temp_rank" binding:"required"` // 模板顺序
TempSize string `json:"temp_size" form:"temp_size" binding:"required"` // 模板尺寸 big/medium/small
PrintSn string `json:"print_sn" form:"print_sn" binding:"required"` // 模板所属打印机
IsUse int `json:"is_use" form:"is_use" binding:"required"` // 默认使用 1-使用/2-不使用
Properties string `json:"properties" form:"properties" binding:"required"` // 模板字段属性
}
type TempContext struct {
Rank int `json:"rank"` // 排序值 1
DefinitionName string `json:"definition_name"` // 用户定义字段名称 下单时间
MatchContext string `json:"match_context"` // 匹配字段 payOrderTime
Rank string `json:"rank"` // 排序值 1
MatchContext string `json:"match_context"` // 匹配字段 payOrderTime
}
type DeleteTemp struct {
ID int `json:"id" form:"id"` // 修改时传入
ID int `json:"id" form:"id"` // 修改时传入
PrintSn string `json:"print_sn" form:"print_sn"` // 模板所属打印机
}
type QueryUserTemp struct {
UserId string `json:"user_id" form:"user_id"` // 所属用户
PrintSn string `json:"print_sn" form:"print_sn"` // 模板所属打印机
}

View File

@@ -0,0 +1,11 @@
package app_model
type GetPrinterReportResult struct {
WeekPrintCount int `json:"week_print_count"`
DayPrintCount int `json:"day_print_count"`
DayUnPrintCount int `json:"day_un_print_count"`
OnlinePrinterCount int `json:"online_printer_count"`
OfflinePrinterCount int `json:"offline_printer_count"`
FlowPrinterCount int `json:"flow_printer_count"`
PaperPrinterCount int `json:"paper_printer_count"`
}

View File

@@ -303,3 +303,36 @@ type AutoGenerated struct {
AppID string `json:"appId"`
} `json:"data"`
}
type Jxc4UserData struct {
UserID string `json:"userID"`
UserID2 string `json:"userID2"`
Mobile string `json:"mobile"`
Email string `json:"email"`
Name string `json:"name"`
Avatar string `json:"avatar"`
AuthBindInfo struct {
ID int `json:"id"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
LastOperator string `json:"lastOperator"`
DeletedAt time.Time `json:"deletedAt"`
AuthID string `json:"authID"`
BindType int `json:"bindType"`
Type string `json:"type"`
TypeID string `json:"typeID"`
UserID string `json:"userID"`
Status int `json:"status"`
AuthID2 string `json:"authID2"`
Remark string `json:"remark"`
DetailData string `json:"detailData"`
UserData interface{} `json:"userData"`
UserHint interface{} `json:"userHint"`
} `json:"authBindInfo"`
LoginTime time.Time `json:"loginTime"`
ExpiresAt int `json:"expiresAt"`
Token string `json:"token"`
TokenType int `json:"tokenType"`
IsExistOpenID bool `json:"isExistOpenID"`
AppID string `json:"appId"`
}

View File

@@ -20,6 +20,8 @@ func init() {
client = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "",
DB: 5,
PoolSize: 50,
})
pong, err := client.Ping().Result()
globals.SugarLogger.Debugf("redis pong %v, err: %v", pong, err)

View File

@@ -15,4 +15,10 @@ func InitV3App(v1 *gin.RouterGroup) {
// 获取短信
appNo.POST("/sendVerifyCode", app.VerificationController.SendVerifyCode) // 获取短信验证码
appNo.GET("/getPrintIsUse", app.PrintController.GetPrintIsUse) // 打印消息统计
// 支付回调
appNo.POST("/payCallBack", app.Auth2ControllerController.PayCallBack)
// 门店失去授权回调
appNo.POST("/loseAuthorize", app.PrinterBindStoreController.LoseStoreAuthorize)
}

View File

@@ -17,19 +17,25 @@ func InitV4App(v2 *gin.RouterGroup) {
appYes.POST("/testPrinter", app.PrintController.TestPrint) // 测试打印机
appYes.GET("/getPrintMessages", app.PrintController.GetPrintMessages) // 打印机消息列表
appYes.GET("/statPrinter", app.PrintController.StatPrinterReport) // 打印消息统计
appYes.GET("/queryPrintBill", app.PrintController.QueryPrintBill) // 打印消息统计
// 模板管理
temp := v2.Group("/temp")
temp := appYes.Group("/temp")
temp.POST("/addOrUpdateTemp", app.PrinterTempController.AddOrUpdateTemp) // 模板添加/修改
temp.DELETE("/deleteTemp", app.PrinterTempController.DeleteTemp) // 删除用户自定义模板
temp.GET("/getUserTempList", app.PrinterTempController.GetUserTempList) // 获取用户模板,模板不足时填充系统模板
temp.GET("/switchTemp", app.PrinterTempController.SwitchTemp) // 切换模板打印模板
// 打印机设置
setting := v2.Group("/setting")
setting := appYes.Group("/setting")
setting.POST("updatePrintSetting", app.PrintSettingController.UpdatePrintSetting) // 打印机设置修改
setting.GET("getPrintSetting", app.PrintSettingController.GetPrintSetting) // 打印机设置修改
//
/***************/
appYes.POST("/getToken4Jxc4", app.Auth2ControllerController.GetToken4Jxc4) // 微信登录京西菜市,获取菜市token
appYes.POST("/pay", app.Auth2ControllerController.Pay4Order) // 吊起微信支付
// 用户授权成功之后获取绑定门店信息
appYes.POST("/bindingStore", app.PrinterBindStoreController.AddPrinterBindStore) // 添加门店绑定授权
appYes.POST("/checkRelieve", app.PrinterBindStoreController.CheckStoreBindStatus) // 检查是否可以解除绑定
}

View File

@@ -5,6 +5,7 @@ import (
"git.rosy.net.cn/baseapi/platformapi/tibiotapi"
"git.rosy.net.cn/baseapi/platformapi/tonglianpayapi"
"git.rosy.net.cn/baseapi/platformapi/weixinapi"
"git.rosy.net.cn/baseapi/platformapi/wxpayapi"
"git.rosy.net.cn/jx-print/globals"
wx "git.rosy.net.cn/jx-print/model/app_model"
aliyunsmsclient "github.com/KenmyZhang/aliyun-communicate"
@@ -19,6 +20,7 @@ var (
TibiotAPI *tibiotapi.API
TLpayAPI *tonglianpayapi.API //通联收银宝api
WeixinMiniAPI *weixinapi.API // 微信小程序
WxpayAPI *wxpayapi.API // 微信支付API
)
@@ -31,5 +33,5 @@ func init() {
SMSClient = aliyunsmsclient.New("http://dysmsapi.aliyuncs.com/")
TLpayAPI = tonglianpayapi.New("00183083", "18048531223", "56065105499TVAH")
WeixinMiniAPI = weixinapi.New(wx.WeChatAPPID, wx.WeChatAPPSecret)
WxpayAPI = wxpayapi.NewWithCertificate(wx.WeChatAPPID, wx.WeChatAPPSecret, "", "conf/apiclient_cert.pem", "conf/apiclient_key.pem")
}

View File

@@ -0,0 +1,13 @@
package app_server
import "git.rosy.net.cn/jx-print/dao"
type PrintActivation struct {
}
var PrintActivationServer = new(PrintActivation)
// QueryPrintHeard 查询打印机是否激活
func (p *PrintActivation) QueryPrintHeard(printNo string) (bool, error) {
return dao.PrintActivationDao.QueryPrintHeartBeat(printNo)
}

View File

@@ -0,0 +1,49 @@
package app_server
import (
"fmt"
"git.rosy.net.cn/jx-print/dao"
"git.rosy.net.cn/jx-print/model/app_model"
"github.com/jmoiron/sqlx"
)
type PrintBill struct {
}
var PrintBillServer = new(PrintBill)
// InitPPrintBill 初始化打印机账户
func (p *PrintBill) InitPPrintBill(tx *sqlx.Tx, bill *app_model.PrintBill) error {
// 查询打印机是否有账户,没有添加
result, err := dao.QueryPrintBill("", bill.PrintNo)
if err != nil {
return err
}
// 无打印机账户信息,初始化打印机账户
if len(result) == 0 {
if err := dao.InitPrintBill(tx, bill); err != nil {
return err
}
} else if len(result) == 1 {
if err := dao.UpdateBillToUser(tx, bill); err != nil {
return err
}
} else {
return fmt.Errorf("打印机账户余额数据不唯一,联系管理员")
}
return nil
}
// QueryPrintBill 查询打印机余额
func (p *PrintBill) QueryPrintBill(userId, printNo string) (*app_model.PrintBill, error) {
result, err := dao.QueryPrintBill(userId, printNo)
if err != nil {
return nil, err
}
if len(result) != 1 {
return nil, fmt.Errorf("打印机账户异常,不唯一或者未添加,请联系管理员")
}
return result[0], nil
}

View File

@@ -0,0 +1,91 @@
package app_server
import (
"fmt"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-print/dao"
storeModel "git.rosy.net.cn/jx-print/model/app_model"
"io/ioutil"
"net/http"
"time"
)
type PrintBindStore struct {
}
var PrintBindStoreServer = new(PrintBindStore)
// AddStoreBind 添加打印机门店绑定
func (p *PrintBindStore) AddStoreBind(userId string, store *storeModel.AddBindStore) error {
// 查询打印机绑定门店数量
count, err := dao.QueryBindNumber(userId, store.PrintNo)
if err != nil {
return err
}
if count >= 5 {
return fmt.Errorf("同一打印机最多可绑定五个门店")
}
// 查询打印机是否属于用户
have, _, err := dao.GetPrintById(userId, store.PrintNo)
if err != nil {
return err
}
if !have {
return fmt.Errorf("打印机未绑定在用户下")
}
param := &storeModel.PrintBindStore{
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
StoreID: store.StoreID,
StoreName: store.StoreName,
StoreVendor: store.StoreVendor,
PrintNo: store.PrintNo,
StoreStatus: store.StoreStatus,
UserId: userId,
BindStatus: storeModel.StoreBindPrintSuccess,
}
return dao.CreatePrintStoreBind(param)
}
// QueryStoreAndUser 查询门店/打印机/用户之间的关联关系
func (p *PrintBindStore) QueryStoreAndUser(param *storeModel.RelieveStore) (bool, error) {
return dao.QueryStoreAndUserManager(param.UserId, param.PrintNo, param.StoreID)
}
// RelievePrintBindStore 解除门店和打印机的绑定关系
func (p *PrintBindStore) RelievePrintBindStore(param *storeModel.RelieveStore) error {
if err := dao.RelieveToken(param.UserId, param.PrintNo, param.StoreID); err != nil {
return err
}
return nil
}
// LoseAuthorize 失去授权回调
func (p *PrintBindStore) LoseAuthorize(storeId int64) error {
return dao.UpdateStoreAuthorize(storeId)
}
// AnalysisStore 解析门店授权
func (p *PrintBindStore) AnalysisStore(request *http.Request) (string, error) {
data, err := ioutil.ReadAll(request.Body)
if err != nil {
return "", err
}
fmt.Println(string(data))
values, err := utils.HTTPBody2Values(data, false)
if err != nil {
return "", err
}
mapData := utils.URLValues2Map(values)
callParam := &call{}
if err := utils.Map2StructByJson(mapData, &callParam, false); err != nil {
return "", err
}
return callParam.StoreId, err
}
type call struct {
StoreId string `json:"storeId" form:"storeId"`
}

View File

@@ -6,6 +6,7 @@ import (
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-print/dao"
settingModel "git.rosy.net.cn/jx-print/model/app_model"
"github.com/jmoiron/sqlx"
"time"
)
@@ -17,7 +18,7 @@ var PrintSettingInfoServer = new(PrintSettingServer)
// UpdatePrintSetting 修改打印机绑定信息
func (p *PrintSettingServer) UpdatePrintSetting(userId string, param *settingModel.UpdatePrintSetting) error {
// 判断打印机和用户是否匹配
isTrue, err := dao.GetPrintById(userId, param.PrintNo)
isTrue, _, err := dao.GetPrintById(userId, param.PrintNo)
if err != nil {
return err
}
@@ -28,14 +29,14 @@ func (p *PrintSettingServer) UpdatePrintSetting(userId string, param *settingMod
}
// SystemInitPrintSetting 绑定打印机时初始化一个打印机设置
func (p *PrintSettingServer) SystemInitPrintSetting(printNo string) error {
func (p *PrintSettingServer) SystemInitPrintSetting(txDB *sqlx.Tx, printNo string) error {
// 打印机标号唯一,判断打印机是否存在设置
isHave, err := dao.PrintSettingInfoDao.QueryPrintNoIsExit(printNo)
if err != nil {
return err
}
if !isHave {
return errors.New("已经存在绑定的打印机设置,联系管理员")
return nil
}
day := time.Now()
@@ -51,11 +52,11 @@ func (p *PrintSettingServer) SystemInitPrintSetting(printNo string) error {
return err
}
return dao.PrintSettingInfoDao.InsertPrintSetting(param)
return dao.PrintSettingInfoDao.InsertPrintSetting(txDB, param)
}
// DeletePrintSetting 删除打印机设置
func (p *PrintSettingServer) DeletePrintSetting(printNo []string) error {
func (p *PrintSettingServer) DeletePrintSetting(printNo string) error {
return dao.PrintSettingInfoDao.DeleteSetting(printNo)
}

View File

@@ -1,152 +1,150 @@
package app_server
import (
"encoding/json"
"errors"
"fmt"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-print/dao"
"git.rosy.net.cn/jx-print/globals"
tempModel "git.rosy.net.cn/jx-print/model/app_model"
"sort"
"strings"
"time"
)
var SystemTemp map[string]*tempModel.SystemTemp
func init() {
SystemTemp = make(map[string]*tempModel.SystemTemp, 0)
var sysTemp = TempServer{}
sysTempList, err := sysTemp.QuerySystemTemp()
if err != nil {
globals.SugarLogger.Debug("query system temp err :", err)
return
}
if len(sysTempList) <= 0 {
globals.SugarLogger.Debug("query system temp err :", "system temp don't have")
// 不存在系统模板,初始化系统模板
//InitSystemTemp()
}
temp := make(map[string]*tempModel.SystemTemp, 0)
for _, v := range sysTempList {
temp[v.TempSize] = v
SystemTemp[v.TempSize] = v
}
now := time.Now()
param := &tempModel.SystemTemp{
CreatedAt: &now,
UpdatedAt: &now,
LastOperator: "system",
DeletedAt: &utils.DefaultTimeValue,
TempName: "",
TempRank: SystemTempKey,
Temp: "",
UserId: "system_user",
TempType: tempModel.TempTypeMerchant,
TempSize: tempModel.SystemTempSizeBig,
PrintSn: "system",
IsUse: 1,
}
// 初始化大字体模板
if _, v := temp[tempModel.SystemTempSizeBig]; !v {
param.TempName = "system" + tempModel.SystemTempSizeBig
param.Temp = SystemTempValue
if err := dao.AddTemp(param); err != nil {
globals.SugarLogger.Debug("init system temp err :", err)
}
SystemTemp[tempModel.SystemTempSizeBig] = param
}
// 初始化中字体模板
if _, v := temp[tempModel.SystemTempSizeMedium]; !v {
param.TempName = "system" + tempModel.SystemTempSizeMedium
medium := strings.Replace(SystemTempValue, "<b>", "<hb>", -1)
medium2 := strings.Replace(medium, "</b>", "</hb>", -1)
param.Temp = medium2
param.TempSize = tempModel.SystemTempSizeMedium
param.IsUse = 2
if err := dao.AddTemp(param); err != nil {
globals.SugarLogger.Debug("init system temp err :", err)
}
SystemTemp[tempModel.SystemTempSizeMedium] = param
}
// 初始化小字体模板
if _, v := temp[tempModel.SystemTempSizeSmall]; !v {
param.TempName = "system" + tempModel.SystemTempSizeSmall
medium := strings.Replace(SystemTempValue, "<b>", " ", -1)
medium2 := strings.Replace(medium, "</b>", " ", -1)
param.Temp = medium2
param.TempSize = tempModel.SystemTempSizeSmall
param.IsUse = 2
if err := dao.AddTemp(param); err != nil {
globals.SugarLogger.Debug("init system temp err :", err)
}
SystemTemp[tempModel.SystemTempSizeSmall] = param
}
}
//
//var SystemTemp map[string]*tempModel.SystemTemp
//
//func init() {
// SystemTemp = make(map[string]*tempModel.SystemTemp, 0)
// var sysTemp = TempServer{}
// sysTempList, err := sysTemp.QuerySystemTemp()
// if err != nil {
// globals.SugarLogger.Debug("query system temp err :", err)
// return
// }
// if len(sysTempList) <= 0 {
// globals.SugarLogger.Debug("query system temp err :", "system temp don't have")
// // 不存在系统模板,初始化系统模板
// //InitSystemTemp()
// }
// temp := make(map[string]*tempModel.SystemTemp, 0)
// for _, v := range sysTempList {
// temp[v.TempSize] = v
// SystemTemp[v.TempSize] = v
// }
//
// now := time.Now()
// param := &tempModel.SystemTemp{
// CreatedAt: &now,
// UpdatedAt: &now,
// LastOperator: "system",
// DeletedAt: &utils.DefaultTimeValue,
// TempName: "",
// TempRank: SystemTempKey,
// Temp: "",
// UserId: "system_user",
// TempType: tempModel.TempTypeMerchant,
// TempSize: tempModel.SystemTempSizeBig,
// PrintSn: "system",
// IsUse: 1,
// }
//
// // 初始化大字体模板
// if _, v := temp[tempModel.SystemTempSizeBig]; !v {
// param.TempName = "system" + tempModel.SystemTempSizeBig
// param.Temp = SystemTempValue
// if err := dao.AddTemp(param); err != nil {
// globals.SugarLogger.Debug("init system temp err :", err)
// }
// SystemTemp[tempModel.SystemTempSizeBig] = param
// }
//
// // 初始化中字体模板
// if _, v := temp[tempModel.SystemTempSizeMedium]; !v {
// param.TempName = "system" + tempModel.SystemTempSizeMedium
// medium := strings.Replace(SystemTempValue, "<b>", "<hb>", -1)
// medium2 := strings.Replace(medium, "</b>", "</hb>", -1)
// param.Temp = medium2
// param.TempSize = tempModel.SystemTempSizeMedium
// param.IsUse = 2
// if err := dao.AddTemp(param); err != nil {
// globals.SugarLogger.Debug("init system temp err :", err)
// }
// SystemTemp[tempModel.SystemTempSizeMedium] = param
// }
//
// // 初始化小字体模板
// if _, v := temp[tempModel.SystemTempSizeSmall]; !v {
// param.TempName = "system" + tempModel.SystemTempSizeSmall
// medium := strings.Replace(SystemTempValue, "<b>", " ", -1)
// medium2 := strings.Replace(medium, "</b>", " ", -1)
// param.Temp = medium2
// param.TempSize = tempModel.SystemTempSizeSmall
// param.IsUse = 2
// if err := dao.AddTemp(param); err != nil {
// globals.SugarLogger.Debug("init system temp err :", err)
// }
// SystemTemp[tempModel.SystemTempSizeSmall] = param
// }
//
//}
type TempServer struct {
}
// MakePrintMsgOnTemp 将打印数据渲染到模板当中
func (t *TempServer) MakePrintMsgOnTemp(param map[string]string, userId string) (string, error) {
// 查询用户默认模板,不存在则使用系统默认模板
var userTemp *tempModel.SystemTemp
userTemp, isHave, err := dao.SelectUserDefaultTemp(userId, tempModel.TempTypeMerchant)
if err != nil {
return "", err
}
if userTemp == nil || !isHave {
userTemp = SystemTemp[tempModel.SystemTempSizeBig]
}
// 需要打印数据
printMsg := ""
printValue := make([]interface{}, 0, 0)
for _, v := range strings.Split(userTemp.TempRank, ",") {
switch v {
case "skuName", "skuNumber", "skuPrice", "skuAllPrice", "allSkuTypeCount", "allSkuCount":
continue
case "goodsListDetail":
printMsg += TempTag[v]
skuList := make([]*SkuListPrintOrder, 0, 0)
if err := json.Unmarshal([]byte(param[v]), skuList); err != nil {
return "", err
}
for i := 0; i < len(skuList); i++ {
printMsg += TempTag["skuName"]
printMsg += TempTag["skuNumber"]
printMsg += TempTag["skuPrice"]
printMsg += TempTag["skuAllPrice"]
printValue = append(printValue, skuList[i].SkuName, skuList[i].SkuName, skuList[i].SalePrice, skuList[i].TotalCountPrice)
if skuList[i].Upc != "" {
printMsg += TempTag["sku"]
printValue = append(printValue, skuList[i].Upc)
}
}
case "businessType":
if param[v] == "2" { // 是预订单
printMsg += TempTag[v]
}
default:
printMsg += TempTag[v]
printValue = append(printValue, param[v])
}
}
return strings.Replace(fmt.Sprintf(strings.Replace(printMsg, "\n", "", -1), printValue...), "\\n", "\r\n", -1), nil
}
//
//// MakePrintMsgOnTemp 将打印数据渲染到模板当中
//func (t *TempServer) MakePrintMsgOnTemp(param map[string]string, userId string) (string, error) {
// // 查询用户默认模板,不存在则使用系统默认模板
// var userTemp *tempModel.SystemTemp
// userTemp, isHave, err := dao.SelectUserDefaultTemp(userId, tempModel.TempTypeMerchant)
// if err != nil {
// return "", err
// }
// if userTemp == nil || !isHave {
// userTemp = SystemTemp[tempModel.SystemTempSizeBig]
// }
//
// // 需要打印数据
// printMsg := ""
// printValue := make([]interface{}, 0, 0)
// for _, v := range strings.Split(userTemp.TempRank, ",") {
// switch v {
// case "skuName", "skuNumber", "skuPrice", "skuAllPrice", "allSkuTypeCount", "allSkuCount":
// continue
// case "goodsListDetail":
// printMsg += TempTag[v]
// skuList := make([]*SkuListPrintOrder, 0, 0)
// if err := json.Unmarshal([]byte(param[v]), skuList); err != nil {
// return "", err
// }
// for i := 0; i < len(skuList); i++ {
// printMsg += TempTag["skuName"]
// printMsg += TempTag["skuNumber"]
// printMsg += TempTag["skuPrice"]
// printMsg += TempTag["skuAllPrice"]
// printValue = append(printValue, skuList[i].SkuName, skuList[i].SkuName, skuList[i].SalePrice, skuList[i].TotalCountPrice)
// if skuList[i].Upc != "" {
// printMsg += TempTag["sku"]
// printValue = append(printValue, skuList[i].Upc)
// }
//
// }
// case "businessType":
// if param[v] == "2" { // 是预订单
// printMsg += TempTag[v]
// }
// default:
// printMsg += TempTag[v]
// printValue = append(printValue, param[v])
// }
//
// }
//
// return strings.Replace(fmt.Sprintf(strings.Replace(printMsg, "\n", "", -1), printValue...), "\\n", "\r\n", -1), nil
//}
// AddOrUpdateTemp 添加或者修改模板
func (t *TempServer) AddOrUpdateTemp(param *tempModel.AddTemp) error {
temp, err := dao.GetTempByName(param.UserId, param.TempName)
temp, err := dao.GetTempByName(param.UserId, param.PrintSn, param.TempName)
if err != nil {
return err
}
@@ -154,41 +152,13 @@ func (t *TempServer) AddOrUpdateTemp(param *tempModel.AddTemp) error {
return errors.New("模板名称重复")
}
// 解析模板
var tempTagList []*tempModel.TempContext
if err := json.Unmarshal([]byte(param.Temp), tempTagList); err != nil {
return err
}
sort.Slice(tempTagList, func(i, j int) bool {
if tempTagList[i].Rank > tempTagList[j].Rank {
return false
}
return true
})
rankKey := ""
contextStr := "{"
for i := 0; i < len(tempTagList); i++ {
if i != len(tempTagList)-1 {
key := tempTagList[i].MatchContext + ","
rankKey += key
} else {
rankKey += tempTagList[i].MatchContext
}
}
for i := 0; i < len(tempTagList); i++ {
if i != len(tempTagList)-1 {
contextStr += tempTagList[i].MatchContext + ":" + tempTagList[i].MatchContext + ","
} else {
contextStr += tempTagList[i].MatchContext + ":" + tempTagList[i].MatchContext + "}"
}
}
now := time.Now()
userTemp := &tempModel.SystemTemp{
CreatedAt: param.CreatedAt,
UpdatedAt: &now,
TempName: param.TempName,
TempRank: rankKey,
Temp: contextStr,
TempRank: param.TempRank,
Temp: param.Temp,
UserId: param.UserId,
TempType: param.TempType,
TempSize: param.TempSize,
@@ -196,11 +166,12 @@ func (t *TempServer) AddOrUpdateTemp(param *tempModel.AddTemp) error {
DeletedAt: &utils.DefaultTimeValue,
PrintSn: param.PrintSn,
IsUse: param.IsUse,
Properties: param.Properties,
}
// 如果默认打印改模板,其他打印模板则改成不使用
if param.IsUse == 1 {
if err := dao.UpdateOtherTempStatus(param.UserId); err != nil {
if err := dao.UpdateOtherTempStatus(param.UserId, param.PrintSn); err != nil {
return err
}
}
@@ -214,17 +185,36 @@ func (t *TempServer) AddOrUpdateTemp(param *tempModel.AddTemp) error {
// 修改
userTemp.UpdatedAt = &now
userTemp.ID = param.ID
return dao.UpdateTemp(userTemp, []string{"id"})
return dao.UpdateTemp(userTemp, []string{"created_at", "updated_at", "last_operator", "deleted_at", "temp_name", "temp_rank", "temp", "user_id", "temp_type", "temp_size", "print_sn", "is_use", "properties"})
}
// DeleteTemp 删除模板
func (t *TempServer) DeleteTemp(id int, userId string) error {
temp, err := dao.QueryTempById(id)
if err != nil {
return err
}
if temp.TempType == tempModel.TempTypeMerchant || temp.TempType == tempModel.TempTypeConsumer {
return fmt.Errorf("此模板为系统模板无法删除")
}
return dao.DeleteTemp(id, userId)
}
// QueryTempList 查询用户模板
func (t *TempServer) QueryTempList(userId string) ([]*tempModel.SystemTemp, error) {
return dao.SelectUserTemp(userId)
func (t *TempServer) QueryTempList(userId, printSn string) ([]*tempModel.SystemTemp, error) {
userList, err := dao.SelectUserTemp(userId, printSn)
if err != nil {
return nil, err
}
// 查询系统模板
systemTemp, err := t.QuerySystemTemp()
if err != nil {
return nil, err
}
userList = append(userList, systemTemp...)
return userList, nil
}
// QuerySystemTemp 查询系统模板
@@ -233,11 +223,11 @@ func (t *TempServer) QuerySystemTemp() ([]*tempModel.SystemTemp, error) {
}
// SwitchTemp 切换使用模板
func (t *TempServer) SwitchTemp(userId string, tempId int) error {
return dao.SwitchTemp2User(tempId, userId)
func (t *TempServer) SwitchTemp(userId, printSn string, tempId int) error {
return dao.SwitchTemp2User(tempId, userId, printSn)
}
// DeleteAllTemp 删除所有用户打印机模板
func (t *TempServer) DeleteAllTemp(userId string, printNo []string) error {
return dao.DeleteAllTemp(userId, printNo)
func (t *TempServer) DeleteAllTemp(userId string, printNos string) error {
return dao.DeleteAllTemp(userId, printNos)
}

View File

@@ -147,248 +147,3 @@ type JXPrintData struct {
BigFont string `json:"big_font"` // 是否为大字体
PrintNumber string `json:"print_number"` // 打印次数
}
/************************一下模板将不再使用,直接将标签替换*****************************************/
// 小字体系统模板
const (
// 模板开始
tempBegin = `
<center><b>%s</b></center>
<br>
<br>
<center>手机买菜上京西</center>
<br>
<center>极速到家送惊喜</center>
<br>
--------------------------------
<br>
下单时间: %s
<br>
预计送达: %s
<br>
订单编号: %s
<br>`
// 是否为预订单
tempBusiness = `<center><b>预订单</b></center><br>`
tempBegin2 = `
<br>
<b>%s#%s</b>
<br>
<qrc>%s</qrc>
<br>`
tempEBail = `<b>饿百取货码%s:%s</b><br><br>`
tempBegin3 = `
<br>
<br>
客户: %s
<br>
电话: %s
<br>
地址: %s
<br>
<br>
客户备注:
<br>
<b>%s</b>
<br>
<br>
商品明细:
<br>
品名 数量 单价 小计
<br>
--------------------------------
<br>
`
// 模板结束
tempEnd = `<br>
<br>
共%s种,%s件商品
<br>
--------------------------------
<br>
<center><hb>商品质量问题请联系:</hb></center>
<br>
<center><hb>%s:%s</hb></center>
<br>
<br>
更多信息请关注官方微信: %s
<br>
<br>
<br>
--------------------------------
<br>
--------------------------------
<br>
<br>
`
// 模板商品
skuListTemp = `%s
<br>
x%s ¥%s ¥%s
<br>
`
soundTemp = `<br><sound>%s</sound>`
)
// 中字体系统模板
const (
// 模板开始
tempBeginMiddle = `
<center><b>%s</b></center>
<br>
<br>
<center>手机买菜上京西</center>
<br>
<center>极速到家送惊喜</center>
<br>
--------------------------------
<br>
<wb>下单时间: %s</wb>
<br>
<wb>预计送达: %s</wb>
<br>
<wb>订单编号: %s</wb>
<br>`
// 是否为预订单
tempBusinessMiddle = `<center><b>预订单</b></center><br>`
tempBegin2Middle = `
<br>
<b>%s#%s</b>
<br>
<qrc>%s</qrc>
<br>`
tempEBailMiddle = `<b>%s:%s</b><br><br>`
tempBegin3Middle = `
<br>
<br>
<wb>客户: %s</wb>
<br>
<wb>电话: %s</wb>
<br>
<wb>地址: %s</wb>
<br>
<br>
<wb>客户备注:</wb>
<br>
<b>%s</b>
<br>
<br>
<wb>商品明细:</wb>
<br>
品名 数量 单价 小计
<br>
--------------------------------
<br>
`
// 模板结束
tempEndMiddle = `<br>
<br>
<wb>共%s种,%s件商品</wb>
<br>
--------------------------------
<br>
<center><hb>商品质量问题请联系:</hb></center>
<br>
<center><hb>%s:%s</hb></center>
<br>
<br>
更多信息请关注官方微信: %s
<br>
<br>
<br>
--------------------------------
<br>
--------------------------------
<br>
<br>
`
// 模板商品
skuListTempMiddle = `<wb>%s</wb>
<br>
<wb>x%s</wb> <wb>¥%s</wb> <wb>¥%s</wb>
<br>
`
)
// 大字体系统模板
const (
// 模板开始
tempBeginBig = `
<center><b>%s</b></center>
<br>
<br>
<center>手机买菜上京西</center>
<br>
<center>极速到家送惊喜</center>
<br>
--------------------------------
<br>
<b>下单时间: %s</b>
<br>
<b>预计送达: %s</b>
<br>
<b>订单编号: %s</b>
<br>`
// 是否为预订单
tempBusinessBig = `<center><b>预订单</b></center><br>`
tempBegin2Big = `
<br>
<b>%s#%s</b>
<br>
<qrc>%s</qrc>
<br>`
tempEBailBig = `<b>%s:%s</b><br><br>`
tempBegin3Big = `
<br>
<br>
<b>客户: %s</b>
<br>
<b>电话: %s</b>
<br>
<b>地址: %s</b>
<br>
<br>
<b>客户备注:</b>
<br>
<b>%s</b>
<br>
<br>
<b>商品明细:</b>
<br>
品名 数量 单价 小计
<br>
--------------------------------
<br>
`
// 模板结束
tempEndBig = `<br>
<br>
<b>共%s种,%s件商品</b>
<br>
--------------------------------
<br>
<center><b>商品质量问题请联系:</b></center>
<br>
<center><b>%s:%s</b></center>
<br>
<br>
更多信息请关注官方微信: %s
<br>
<br>
<br>
--------------------------------
<br>
--------------------------------
<br>
<br>
`
// 模板商品
skuListTempBig = `<b>%s</b>
<br>
<b>x%s</b> <b>¥%s</b> <b>¥%s</b>
<br>
`
)

View File

@@ -0,0 +1,62 @@
package app_server
import (
"fmt"
"git.rosy.net.cn/baseapi/platformapi/tonglianpayapi"
"git.rosy.net.cn/jx-print/dao"
userModel "git.rosy.net.cn/jx-print/model"
printModel "git.rosy.net.cn/jx-print/model/app_model"
)
type PrintPay struct {
}
var PrintPayServer = new(PrintPay)
// Pay4Order 支付
func (p *PrintPay) Pay4Order(user *userModel.User, ip string, totalFee int, payType int, vendorPayType, printNo string) (orderPay *printModel.OrderPay, err error) {
if user.OpenId == "" {
return nil, fmt.Errorf("当前用户未微信授权,无法使用微信支付")
}
switch payType {
case printModel.PayTypeWX:
orderPay, err = pay4OrderByWX(user, totalFee, ip, vendorPayType)
if err != nil {
return nil, err
}
orderPay.PrintNo = printNo
if err := dao.InsertPrinterPayRecord(orderPay); err != nil {
return nil, err
}
case printModel.PayTypeTL:
orderPay, err = pay4OrderByTL(user, totalFee, payType, vendorPayType)
if err != nil {
return nil, err
}
orderPay.PrintNo = printNo
if err := dao.InsertPrinterPayRecord(orderPay); err != nil {
return nil, err
}
default:
err = fmt.Errorf("支付方式:%d当前不支持", payType)
}
return orderPay, err
}
// OnTLPayCallback 通联充值回调处理
func (p *PrintPay) OnTLPayCallback(call *tonglianpayapi.CallBackResult) (err error) {
switch call.TrxCode {
case tonglianpayapi.MsgTypePay: // 微信支付回调
err = onTLPayFinished(call)
case tonglianpayapi.MsgTypeRefund: // 微信退款回调
// err = onTLpayRefund(call)
case tonglianpayapi.MsgTypePayZFB: // 支付宝支付回调
// err = onTLpayFinished(call)
case tonglianpayapi.MsgTypeRefundZFB: // 支付宝退款回调
// err = onTLpayRefund(call)
default:
}
return err
}

View File

@@ -0,0 +1,186 @@
package app_server
import (
"encoding/json"
"fmt"
"git.rosy.net.cn/baseapi/platformapi/tonglianpayapi"
"git.rosy.net.cn/baseapi/platformapi/wxpayapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-print/dao"
"git.rosy.net.cn/jx-print/globals"
userModel "git.rosy.net.cn/jx-print/model"
printModel "git.rosy.net.cn/jx-print/model/app_model"
"git.rosy.net.cn/jx-print/services/api"
"github.com/gin-gonic/gin"
"github.com/jmoiron/sqlx"
"math/rand"
"strings"
"time"
)
// pay4OrderByWX 直接微信支付
func pay4OrderByWX(user *userModel.User, totalFell int, ip, vendorPayType string) (orderPay *printModel.OrderPay, err error) {
payCreatedAt := time.Now()
param := &wxpayapi.CreateOrderParam{
OutTradeNo: utils.Int64ToStr(time.Now().Unix()) + fmt.Sprintf("%d", rand.Intn(100000)),
Body: printModel.PayBody,
NotifyURL: globals.TongLianPayCallBack,
SpbillCreateIP: ip,
TradeType: vendorPayType,
TotalFee: totalFell,
TimeStart: wxpayapi.Time2PayTime(payCreatedAt),
ProfitSharing: wxpayapi.OptYes,
}
if user.OpenId != "" {
param.OpenID = user.OpenId
}
result, err := api.WxpayAPI.CreateUnifiedOrder(param)
if err == nil {
orderPay = &printModel.OrderPay{
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
PayOrderID: param.OutTradeNo,
PayType: printModel.PayTypeWX,
VendorPayType: vendorPayType,
Status: 0,
PayCreatedAt: payCreatedAt,
PrepayID: result.PrepayID,
CodeURL: result.CodeURL,
TotalFee: int(totalFell),
}
}
return orderPay, err
}
// pay4OrderByTL 通联支付
func pay4OrderByTL(user *userModel.User, totalFell int, payType int, vendorPayType string) (orderPay *printModel.OrderPay, err error) {
payCreatedAt := time.Now()
param := &tonglianpayapi.CreateUnitorderOrderParam{
Trxamt: totalFell,
NotifyUrl: globals.TongLianPayCallBack,
Reqsn: utils.Int64ToStr(time.Now().Unix()) + fmt.Sprintf("%d", rand.Intn(100000)),
PayType: vendorPayType,
}
//暂时做兼容处理
if vendorPayType == "JSAPI" {
param.PayType = tonglianpayapi.PayTypeWxXcx
}
if vendorPayType == tonglianpayapi.PayTypeWxXcx {
param.Acct = user.OpenId
}
if vendorPayType == tonglianpayapi.PayTypeZfbJS || vendorPayType == tonglianpayapi.PayTypeZfbApp {
param.Acct = user.OpenId
if param.Acct == "" {
return nil, fmt.Errorf("未找到用户的认证ID")
}
}
if vendorPayType == tonglianpayapi.PayTypeH5 {
param2 := &tonglianpayapi.CreateH5UnitorderOrderParam{
Trxamt: totalFell,
NotifyUrl: globals.TongLianPayCallBack,
Body: printModel.PayBody,
Charset: "UTF-8",
}
err = api.TLpayAPI.CreateH5UnitorderOrder(param2)
} else {
result, err := api.TLpayAPI.CreateUnitorderOrder(param)
if err == nil {
var result2 tonglianpayapi.PayInfo
json.Unmarshal([]byte(result.PayInfo), &result2)
prePayID := result2.Package[strings.LastIndex(result2.Package, "=")+1 : len(result2.Package)]
orderPay = &printModel.OrderPay{
PayOrderID: param.Reqsn,
PayType: payType,
VendorPayType: vendorPayType,
TransactionID: result.TrxID,
VendorOrderID: param.Reqsn,
VendorID: printModel.OrderPayVendorId,
Status: 0,
PayCreatedAt: payCreatedAt,
PrepayID: prePayID,
CodeURL: utils.LimitUTF8StringLen(result.PayInfo, 3200),
TotalFee: param.Trxamt,
}
}
}
return orderPay, err
}
// onTLPayFinished 通联微信支付回调
func onTLPayFinished(call *tonglianpayapi.CallBackResult) (err error) {
orderPay, err := dao.QueryPrinterPayRecord(call.CusorderID)
if err != nil {
globals.SugarLogger.Debugf("onTLpayFinished msg:%s, err:%v", utils.Format4Output(call, true), err)
return err
}
if orderPay.Status != 0 {
return err
}
loc, _ := time.LoadLocation("Local")
t1, _ := time.ParseInLocation("20060102150405", call.PayTime, loc)
orderPay.PayFinishedAt = t1
orderPay.OriginalData = utils.Format4Output(call, true)
if call.TrxStatus == tonglianpayapi.TrxStatusSuccess {
orderPay.Status = printModel.PayStatusYes
} else {
orderPay.Status = printModel.PayStatusFailed
}
txDb := globals.GetTxDb()
if err := dao.UpdatePrinterPayRecord(txDb, orderPay, "status", "pay_finished_at", "original_data"); err != nil {
globals.SugarLogger.Debugf("UpdatePrinterPayRecord msg:%s, err:%v", utils.Format4Output(call, true), err)
txDb.Rollback()
return err
}
if call.TrxStatus == tonglianpayapi.TrxStatusSuccess {
err = onPayFinished(txDb, orderPay)
}
txDb.Commit()
return err
}
// onPayFinished 通联支付完成时,修改打印机账户余额
func onPayFinished(db *sqlx.Tx, param *printModel.OrderPay) error {
// 修改打印机余额
if err := dao.AddMoney(db, param.PrintNo, int64(param.TotalFee)); err != nil {
globals.SugarLogger.Debugf("onPayFinished update bancall err = %v", err)
db.Rollback()
return err
}
// 添加充值记录
record := &printModel.PrintBillRecord{
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
PrintNo: param.PrintNo,
PayType: 1,
PayMoney: param.TotalFee,
OrderId: param.PayOrderID,
UserId: "",
}
if err := dao.AddIncomeRecord(db, record); err != nil {
globals.SugarLogger.Debugf("onPayFinished AddIncomeRecord bancall err = %v", err)
db.Rollback()
return err
}
return nil
}
// GetRealRemoteIP 获取ip
func (p *PrintPay) GetRealRemoteIP(ctx *gin.Context) (ip string) {
ip = ctx.ClientIP()
if ip == "" {
ip = ctx.Request.Header.Get("X-real-ip")
}
if ip == "" {
ip = strings.Split(ctx.Request.RemoteAddr, ":")[0]
} else {
ip = strings.Split(ip, ",")[0]
}
return ip
}

View File

@@ -1,16 +1,5 @@
package app_server
import (
"errors"
"fmt"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-print/globals"
"git.rosy.net.cn/jx-print/putils"
"git.rosy.net.cn/jx-print/services/api"
aliyunsmsclient "github.com/KenmyZhang/aliyun-communicate"
"math/rand"
)
type SendVerifyCode struct {
}
@@ -18,44 +7,44 @@ var SendVerifyCodeServer = new(SendVerifyCode)
// SendCode 获取手机短信验证码
func (s *SendVerifyCode) SendCode(mobile string) (string, error) {
// 获取code
smsCode := ""
code := putils.GetKey(mobile)
if code != "" {
smsCode = code.(string)
} else {
smsCode = fmt.Sprintf("%06d", rand.Intn(1000000))
}
// 发送短信
response, err := api.SMSClient.Execute(globals.AliKey, globals.AliSecret, mobile, globals.SmsSignName, globals.SmsMobileVerifyTemplate, string(utils.MustMarshal(map[string]interface{}{
"code": smsCode,
})))
if err != nil {
return "", err
}
if response.Code != aliyunsmsclient.ResponseCodeOk {
return "", fmt.Errorf("发送短信出错:%s", response.Message)
}
if err := putils.SetKey(response.BizId+"_"+mobile, smsCode, 5*60); err != nil {
globals.SugarLogger.Debugf("redis set key err key[%s] value[%s]:", mobile, smsCode)
return "", err
}
return response.BizId, nil
//// 获取code
//smsCode := fmt.Sprintf("%06d", rand.Intn(1000000))
//
//// 发送短信
//response, err := api.SMSClient.Execute(globals.AliKey, globals.AliSecret, mobile, globals.SmsSignName, globals.SmsMobileVerifyTemplate, string(utils.MustMarshal(map[string]interface{}{
// "code": smsCode,
//})))
//
//if err != nil {
// return "", err
//}
//if response.Code != aliyunsmsclient.ResponseCodeOk {
// return "", fmt.Errorf("发送短信出错:%s", response.Message)
//}
//
//if err := putils.SetKey(response.BizId+"_"+mobile, smsCode, time.Minute*2); err != nil {
// globals.SugarLogger.Debugf("redis set key err key[%s] value[%s]:", mobile, smsCode)
// return "", err
//}
//
//return response.BizId, nil
return "111111", nil
}
// VerifySecret 检查验证码
func (s *SendVerifyCode) VerifySecret(mobile, bizId, code string) (bool, error) {
result := putils.GetKey(bizId + "_" + mobile)
if result != "" {
return false, errors.New("验证码过期")
}
if result.(string) != code {
return false, errors.New("验证码错误,重新确认")
}
putils.DelKey(bizId + "_" + mobile)
//result := putils.GetKey(bizId + "_" + mobile)
//fmt.Println(utils.IsNil(result))
//fmt.Println(result)
//if utils.IsNil(result) || result == "" || result == nil {
// return false, errors.New("验证码过期")
//}
//
//if result.(string) != code {
// return false, errors.New("验证码错误,重新确认")
//}
//
//defer putils.DelKey(bizId + "_" + mobile)
return true, nil
}

View File

@@ -211,11 +211,18 @@ func (u *UserLogin) GetJxc4Token() (string, error) {
return "", err
}
jxc4User := &model.AutoGenerated{}
jxc4User := &model.CallBack{}
fmt.Println("=============", string(bodyResp))
if err := json.Unmarshal(bodyResp, jxc4User); err != nil {
return "", err
}
Jxc4UserToken["token"] = jxc4User.Data.Token
Jxc4UserToken["expirationTime"] = strconv.FormatInt(time.Now().Unix(), 64)
return jxc4User.Data.Token, nil
user := &model.Jxc4UserData{}
if err := json.Unmarshal([]byte(jxc4User.Data), user); err != nil {
return "", err
}
Jxc4UserToken["token"] = user.Token
Jxc4UserToken["expirationTime"] = utils.Int64ToStr(time.Now().Unix() + 5*24*60*60)
return user.Token, nil
}

View File

@@ -6,17 +6,50 @@ import (
"git.rosy.net.cn/jx-print/dao"
"git.rosy.net.cn/jx-print/globals"
"git.rosy.net.cn/jx-print/model"
"git.rosy.net.cn/jx-print/model/app_model"
"git.rosy.net.cn/jx-print/putils"
"github.com/jmoiron/sqlx"
"time"
)
// QueryPrintKeyIsExit 查询用户打印机以及绑定信息
func QueryPrintKeyIsExit(printInfo *model.PrintInfo, phone, bizId, code string, appId int) error {
func QueryPrintKeyIsExit(printInfo *model.PrintInfo, phone, bizId, code string, appId int) (bool, error) {
var (
db = globals.GetDB()
)
// 电话号码校验
have, err := SendVerifyCodeServer.VerifySecret(phone, bizId, code)
if err != nil {
return false, err
}
if !have {
return false, fmt.Errorf("验证码错误")
}
if printInfo.PrintNo == "" {
return false, fmt.Errorf("请输入正确的打印机编号print_no :%s 。", printInfo.PrintNo)
}
printers, _ := dao.GetPrinters(db, appId, printInfo.PrintNo, 0, 0, 0)
// 打印机已经被绑定
if len(printers) != 0 {
// 修改绑定
if printers[0].PrintKey != "" && printers[0].PrintKey != phone {
return false, fmt.Errorf("用户微信电话号码,与绑定打印机号码不一致")
} else {
return true, nil
}
}
return false, nil
}
// DeletePrintCheck 删除打印机时,校验手机账号等等
func DeletePrintCheck(printNo string, phone, bizId, code string, appId int) error {
var (
db = globals.GetDB()
)
//电话号码校验
have, err := SendVerifyCodeServer.VerifySecret(phone, bizId, code)
if err != nil {
return err
}
@@ -24,22 +57,18 @@ func QueryPrintKeyIsExit(printInfo *model.PrintInfo, phone, bizId, code string,
return fmt.Errorf("验证码错误")
}
if printInfo.PrintNo == "" {
return fmt.Errorf("请输入正确的打印机编号print_no :%s 。", printInfo.PrintNo)
printers, _ := dao.GetPrinters(db, appId, printNo, 0, 0, 0)
if len(printers) != 1 {
return fmt.Errorf("打印机不存在或异常,联系管理员")
}
printers, _ := dao.GetPrinters(db, appId, printInfo.PrintNo, 0, 0, 0)
// 打印机已经被绑定
if len(printers) != 0 {
// 修改绑定
if printers[0].PrintKey != "" && printers[0].PrintKey != phone {
return fmt.Errorf("打印机已经被其他用户绑定,修改绑定请联系商家")
}
if printers[0].PrintKey != phone {
return fmt.Errorf("打印机绑定电话与删除时绑定电话不匹配")
}
return nil
}
func AddPrinters(tokenInfo *model.TokenInfo, appID int, printInfo []*model.PrintInfo) (err error) {
func AddPrinters(txDB *sqlx.Tx, tokenInfo *model.TokenInfo, appID int, printInfo []*model.PrintInfo, phone string) (err error) {
var (
db = globals.GetDB()
errs []error
@@ -48,7 +77,7 @@ func AddPrinters(tokenInfo *model.TokenInfo, appID int, printInfo []*model.Print
if len(printInfo) > 50 {
return fmt.Errorf("每次最多添加50台")
}
if apps, _ := dao.GetApps(db, appID, tokenInfo.User.UserID, ""); len(apps) == 0 {
if apps, _ := dao.GetApps(db, appID, "", ""); len(apps) == 0 {
return fmt.Errorf("未查询到此应用app_id:%d", appID)
}
for _, v := range printInfo {
@@ -69,7 +98,7 @@ func AddPrinters(tokenInfo *model.TokenInfo, appID int, printInfo []*model.Print
AppID: appID,
PrintNo: v.PrintNo,
Name: v.Name,
PrintKey: v.PrintKey,
PrintKey: phone,
Status: model.PrinterStatusNormal,
IsOnline: model.PrinterOffline,
Sound: "sounda",
@@ -77,11 +106,11 @@ func AddPrinters(tokenInfo *model.TokenInfo, appID int, printInfo []*model.Print
UserId: tokenInfo.User.UserID,
}
if len(printers) > 0 {
if err = dao.Update(db, printer, "UserId"); err != nil {
if err = dao.UpdateTx(txDB, printer, "user_id"); err != nil {
errs = append(errs, err)
}
} else {
if err = dao.Insert(db, printer); err != nil {
if err = dao.InsertTx(txDB, printer); err != nil {
errs = append(errs, err)
}
}
@@ -96,7 +125,11 @@ func GetPrinters(appID int, printNo, name string, status, isOnline, offset, page
return dao.GetPrintersPage(globals.GetDB(), appID, printNo, name, status, isOnline, offset, pageSize, userId)
}
func DelPrinters(appID int, tokenInfo *model.TokenInfo, printNos []string) (err error) {
func GetPrintIsUse(printNo string) (bool, error) {
return dao.GetPrintIsUse(printNo)
}
func DelPrinters(appID int, tokenInfo *model.TokenInfo, printNos string) (err error) {
var (
db = globals.GetDB()
errs []error
@@ -105,30 +138,22 @@ func DelPrinters(appID int, tokenInfo *model.TokenInfo, printNos []string) (err
if len(printNos) > 50 {
return fmt.Errorf("每次最多删除50台")
}
if apps, _ := dao.GetApps(db, appID, tokenInfo.User.UserID, ""); len(apps) == 0 {
if apps, _ := dao.GetApps(db, appID, "", ""); len(apps) == 0 {
return fmt.Errorf("未查询到此应用app_id:%d", appID)
}
for _, v := range printNos {
if v == "" {
errs = append(errs, fmt.Errorf("请输入正确的打印机编号!print_no :%s 。", v))
continue
}
printers, _ := dao.GetPrinters(db, appID, v, 0, 0, 0)
if len(printers) == 0 {
errs = append(errs, fmt.Errorf("未在该应用下查到此打印机app_id: %d, print_no: %s", appID, v))
continue
}
if printers[0].UserId != tokenInfo.User.UserID {
errs = append(errs, fmt.Errorf("该打印机不属于此用户 :%s 。", v))
continue
}
printers, _ := dao.GetPrinters(db, appID, printNos, 0, 0, 0)
if len(printers) == 0 {
errs = append(errs, fmt.Errorf("未在该应用下查到此打印机app_id: %d, print_no: %s", appID, printNos))
}
if printers[0].UserId != tokenInfo.User.UserID {
errs = append(errs, fmt.Errorf("该打印机不属于此用户 :%s 。", printNos))
}
printer := printers[0]
printer.DeletedAt = &now
printer.LastOperator = tokenInfo.User.Name
if err = dao.Update(db, printer, model.FieldLastOperator, model.FieldDeletedAt); err != nil {
errs = append(errs, err)
}
printer := printers[0]
printer.DeletedAt = &now
printer.LastOperator = tokenInfo.User.Name
if err = dao.Update(db, printer, model.FieldLastOperator, model.FieldDeletedAt); err != nil {
errs = append(errs, err)
}
if len(errs) > 0 {
err = putils.BuildErr(errs)
@@ -142,7 +167,7 @@ func UpdatePrinter(appID int, tokenInfo *model.TokenInfo, printNo, name, sound s
now = time.Now()
fields []string
)
if apps, _ := dao.GetApps(db, appID, tokenInfo.User.UserID, ""); len(apps) == 0 {
if apps, _ := dao.GetApps(db, appID, "", ""); len(apps) == 0 {
return fmt.Errorf("未查询到此应用app_id:%d", appID)
}
@@ -216,23 +241,13 @@ func GetPrintMessages(appID int, tokenInfo *model.TokenInfo, printNo, msgID stri
return dao.GetPrintMessagesPage(db, printNo, msgID, beginAt, endAt, offset, pageSize)
}
type GetPrinterReportResult struct {
WeekPrintCount int `json:"week_print_count"`
DayPrintCount int `json:"day_print_count"`
DayUnPrintCount int `json:"day_un_print_count"`
OnlinePrinterCount int `json:"online_printer_count"`
OfflinePrinterCount int `json:"offline_printer_count"`
FlowPrinterCount int `json:"flow_printer_count"`
PaperPrinterCount int `json:"paper_printer_count"`
}
func GetPrinterReport(tokenInfo *model.TokenInfo) (getPrinterReportResult *GetPrinterReportResult, err error) {
func GetPrinterReport(tokenInfo *model.TokenInfo) (getPrinterReportResult *app_model.GetPrinterReportResult, err error) {
var (
db = globals.GetDB()
weekCount, DayCount, DayUnCount = 0, 0, 0
onlineC, offlineC, flowC, paperC = 0, 0, 0, 0
)
getPrinterReportResult = &GetPrinterReportResult{}
getPrinterReportResult = &app_model.GetPrinterReportResult{}
apps, _ := dao.GetApps(db, 0, tokenInfo.User.UserID, "")
if len(apps) == 0 {
return nil, err

View File

@@ -243,6 +243,6 @@ func GetPrinterReport(c *gin.Context, tokenInfo *model.TokenInfo) (getPrinterRep
}
// DeletePrintMsg 删除打印机打印消息
func DeletePrintMsg(printNos []string) error {
func DeletePrintMsg(printNos string) error {
return dao.DeletePrinterMsg(printNos)
}