This commit is contained in:
IT 老营长 @云轩领航-创始人 2024-11-23 16:51:26 +08:00
parent d7a8be98ae
commit dd0c095c17
14 changed files with 229 additions and 166 deletions

1
go.mod
View File

@ -25,6 +25,7 @@ require (
github.com/go-sql-driver/mysql v1.7.0 // indirect github.com/go-sql-driver/mysql v1.7.0 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect github.com/jinzhu/now v1.1.5 // indirect
github.com/wechatpay-apiv3/wechatpay-go v0.2.20 // indirect
golang.org/x/text v0.16.0 // indirect golang.org/x/text v0.16.0 // indirect
gorm.io/driver/mysql v1.5.7 // indirect gorm.io/driver/mysql v1.5.7 // indirect
gorm.io/gorm v1.25.11 // indirect gorm.io/gorm v1.25.11 // indirect

4
go.sum
View File

@ -1,5 +1,6 @@
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/PuerkitoBio/goquery v1.9.1/go.mod h1:cW1n6TmIMDoORQU5IU/P1T3tGFunOeXEpGP2WHRwkbY= github.com/PuerkitoBio/goquery v1.9.1/go.mod h1:cW1n6TmIMDoORQU5IU/P1T3tGFunOeXEpGP2WHRwkbY=
github.com/agiledragon/gomonkey v2.0.2+incompatible/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw=
github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU= github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
github.com/bgould/http v0.0.0-20190627042742-d268792bdee7/go.mod h1:BTqvVegvwifopl4KTEDth6Zezs9eR+lCWhvGKvkxJHE= github.com/bgould/http v0.0.0-20190627042742-d268792bdee7/go.mod h1:BTqvVegvwifopl4KTEDth6Zezs9eR+lCWhvGKvkxJHE=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@ -60,6 +61,7 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tdakkota/win32metadata v0.1.0/go.mod h1:77e6YvX0LIVW+O81fhWLnXAxxcyu/wdZdG7iwed7Fyk= github.com/tdakkota/win32metadata v0.1.0/go.mod h1:77e6YvX0LIVW+O81fhWLnXAxxcyu/wdZdG7iwed7Fyk=
@ -68,6 +70,8 @@ github.com/tinygo-org/pio v0.0.0-20231216154340-cd888eb58899/go.mod h1:LU7Dw00NJ
github.com/tklauser/go-sysconf v0.3.13/go.mod h1:zwleP4Q4OehZHGn4CYZDipCgg9usW5IJePewFCGVEa0= github.com/tklauser/go-sysconf v0.3.13/go.mod h1:zwleP4Q4OehZHGn4CYZDipCgg9usW5IJePewFCGVEa0=
github.com/tklauser/numcpus v0.7.0/go.mod h1:bb6dMVcj8A42tSE7i32fsIUCbQNllK5iDguyOZRUzAY= github.com/tklauser/numcpus v0.7.0/go.mod h1:bb6dMVcj8A42tSE7i32fsIUCbQNllK5iDguyOZRUzAY=
github.com/valyala/fastjson v1.6.3/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY= github.com/valyala/fastjson v1.6.3/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY=
github.com/wechatpay-apiv3/wechatpay-go v0.2.20 h1:gS8oFn1bHGnyapR2Zb4aqTV6l4kJWgbtqjCq6k1L9DQ=
github.com/wechatpay-apiv3/wechatpay-go v0.2.20/go.mod h1:A254AUBVB6R+EqQFo3yTgeh7HtyqRRtN2w9hQSOrd4Q=
github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/yuin/goldmark v1.5.5/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark v1.5.5/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=

View File

@ -13,6 +13,7 @@ const GONGANXITONG_MEETING = "web.team.gonganxitong.meeting"
const GONGANXITONG_MEMBER = "web.team.gonganxitong.member" const GONGANXITONG_MEMBER = "web.team.gonganxitong.member"
const GONGANXITONG_MESSAGE = "web.team.gonganxitong.message" const GONGANXITONG_MESSAGE = "web.team.gonganxitong.message"
const GONGANXITONG_NOTICE = "web.team.gonganxitong.notice" const GONGANXITONG_NOTICE = "web.team.gonganxitong.notice"
const GONGANXITONG_PAYMENTLIST = "web.team.gonganxitong.paymentlist"
const GONGANXITONG_QRCODE = "web.team.gonganxitong.qrcode" const GONGANXITONG_QRCODE = "web.team.gonganxitong.qrcode"
const GONGANXITONG_RECENT = "web.team.gonganxitong.recent" const GONGANXITONG_RECENT = "web.team.gonganxitong.recent"
const GONGANXITONG_SERVICE = "web.team.gonganxitong.service" const GONGANXITONG_SERVICE = "web.team.gonganxitong.service"
@ -31,6 +32,7 @@ const HUODONGZUZHI_MEETING = "web.team.huodongzuzhi.meeting"
const HUODONGZUZHI_MEMBER = "web.team.huodongzuzhi.member" const HUODONGZUZHI_MEMBER = "web.team.huodongzuzhi.member"
const HUODONGZUZHI_MESSAGE = "web.team.huodongzuzhi.message" const HUODONGZUZHI_MESSAGE = "web.team.huodongzuzhi.message"
const HUODONGZUZHI_NOTICE = "web.team.huodongzuzhi.notice" const HUODONGZUZHI_NOTICE = "web.team.huodongzuzhi.notice"
const HUODONGZUZHI_PAYMENTLIST = "web.team.huodongzuzhi.paymentlist"
const HUODONGZUZHI_QRCODE = "web.team.huodongzuzhi.qrcode" const HUODONGZUZHI_QRCODE = "web.team.huodongzuzhi.qrcode"
const HUODONGZUZHI_RECENT = "web.team.huodongzuzhi.recent" const HUODONGZUZHI_RECENT = "web.team.huodongzuzhi.recent"
const HUODONGZUZHI_SERVICE = "web.team.huodongzuzhi.service" const HUODONGZUZHI_SERVICE = "web.team.huodongzuzhi.service"
@ -47,11 +49,13 @@ const RENZHENGSHOUQUAN_DOMAIN = "web.team.renzhengshouquan.domain"
const RENZHENGSHOUQUAN_EVENT = "web.team.renzhengshouquan.event" const RENZHENGSHOUQUAN_EVENT = "web.team.renzhengshouquan.event"
const RENZHENGSHOUQUAN_EXTERNAL_TENCENT_MEETING = "web.team.renzhengshouquan.external.tencent.meeting" const RENZHENGSHOUQUAN_EXTERNAL_TENCENT_MEETING = "web.team.renzhengshouquan.external.tencent.meeting"
const RENZHENGSHOUQUAN_EXTERNAL_TENCENTMEETING_TENCENTMEETING = "web.team.renzhengshouquan.external.tencentmeeting.tencentmeeting" const RENZHENGSHOUQUAN_EXTERNAL_TENCENTMEETING_TENCENTMEETING = "web.team.renzhengshouquan.external.tencentmeeting.tencentmeeting"
const RENZHENGSHOUQUAN_EXTERNAL_WEIXINPAYMENT_WEIXINPAYMENT = "web.team.renzhengshouquan.external.weixinpayment.weixinpayment"
const RENZHENGSHOUQUAN_MARKET = "web.team.renzhengshouquan.market" const RENZHENGSHOUQUAN_MARKET = "web.team.renzhengshouquan.market"
const RENZHENGSHOUQUAN_MEETING = "web.team.renzhengshouquan.meeting" const RENZHENGSHOUQUAN_MEETING = "web.team.renzhengshouquan.meeting"
const RENZHENGSHOUQUAN_MEMBER = "web.team.renzhengshouquan.member" const RENZHENGSHOUQUAN_MEMBER = "web.team.renzhengshouquan.member"
const RENZHENGSHOUQUAN_MESSAGE = "web.team.renzhengshouquan.message" const RENZHENGSHOUQUAN_MESSAGE = "web.team.renzhengshouquan.message"
const RENZHENGSHOUQUAN_NOTICE = "web.team.renzhengshouquan.notice" const RENZHENGSHOUQUAN_NOTICE = "web.team.renzhengshouquan.notice"
const RENZHENGSHOUQUAN_PAYMENTLIST = "web.team.renzhengshouquan.paymentlist"
const RENZHENGSHOUQUAN_PROFILE = "web.team.renzhengshouquan.profile" const RENZHENGSHOUQUAN_PROFILE = "web.team.renzhengshouquan.profile"
const RENZHENGSHOUQUAN_QRCODE = "web.team.renzhengshouquan.qrcode" const RENZHENGSHOUQUAN_QRCODE = "web.team.renzhengshouquan.qrcode"
const RENZHENGSHOUQUAN_RECENT = "web.team.renzhengshouquan.recent" const RENZHENGSHOUQUAN_RECENT = "web.team.renzhengshouquan.recent"
@ -71,6 +75,7 @@ const YUEHAOXITONG_MEMBER = "web.team.yuehaoxitong.member"
const YUEHAOXITONG_MESSAGE = "web.team.yuehaoxitong.message" const YUEHAOXITONG_MESSAGE = "web.team.yuehaoxitong.message"
const YUEHAOXITONG_NOTICE = "web.team.yuehaoxitong.notice" const YUEHAOXITONG_NOTICE = "web.team.yuehaoxitong.notice"
const YUEHAOXITONG_OPEN = "web.team.yuehaoxitong.open" const YUEHAOXITONG_OPEN = "web.team.yuehaoxitong.open"
const YUEHAOXITONG_PAYMENTLIST = "web.team.yuehaoxitong.paymentlist"
const YUEHAOXITONG_PLAN = "web.team.yuehaoxitong.plan" const YUEHAOXITONG_PLAN = "web.team.yuehaoxitong.plan"
const YUEHAOXITONG_QRCODE = "web.team.yuehaoxitong.qrcode" const YUEHAOXITONG_QRCODE = "web.team.yuehaoxitong.qrcode"
const YUEHAOXITONG_RECENT = "web.team.yuehaoxitong.recent" const YUEHAOXITONG_RECENT = "web.team.yuehaoxitong.recent"

View File

@ -7,6 +7,7 @@ const JIAOCAIZILIAO_CREDIT = "web.team.jiaocaiziliao.credit"
const JIAOCAIZILIAO_DOCUMENT = "web.team.jiaocaiziliao.document" const JIAOCAIZILIAO_DOCUMENT = "web.team.jiaocaiziliao.document"
const JIAOCAIZILIAO_EVENT = "web.team.jiaocaiziliao.event" const JIAOCAIZILIAO_EVENT = "web.team.jiaocaiziliao.event"
const JIAOCAIZILIAO_MARKET = "web.team.jiaocaiziliao.market" const JIAOCAIZILIAO_MARKET = "web.team.jiaocaiziliao.market"
const JIAOCAIZILIAO_MEETING = "web.team.jiaocaiziliao.meeting"
const JIAOCAIZILIAO_MEMBER = "web.team.jiaocaiziliao.member" const JIAOCAIZILIAO_MEMBER = "web.team.jiaocaiziliao.member"
const JIAOCAIZILIAO_MESSAGE = "web.team.jiaocaiziliao.message" const JIAOCAIZILIAO_MESSAGE = "web.team.jiaocaiziliao.message"
const JIAOCAIZILIAO_NOTICE = "web.team.jiaocaiziliao.notice" const JIAOCAIZILIAO_NOTICE = "web.team.jiaocaiziliao.notice"
@ -23,6 +24,7 @@ const JIAOWUXITONG_CREDIT = "web.team.jiaowuxitong.credit"
const JIAOWUXITONG_EVENT = "web.team.jiaowuxitong.event" const JIAOWUXITONG_EVENT = "web.team.jiaowuxitong.event"
const JIAOWUXITONG_HOMEWORK = "web.team.jiaowuxitong.homework" const JIAOWUXITONG_HOMEWORK = "web.team.jiaowuxitong.homework"
const JIAOWUXITONG_MARKET = "web.team.jiaowuxitong.market" const JIAOWUXITONG_MARKET = "web.team.jiaowuxitong.market"
const JIAOWUXITONG_MEETING = "web.team.jiaowuxitong.meeting"
const JIAOWUXITONG_MEMBER = "web.team.jiaowuxitong.member" const JIAOWUXITONG_MEMBER = "web.team.jiaowuxitong.member"
const JIAOWUXITONG_MESSAGE = "web.team.jiaowuxitong.message" const JIAOWUXITONG_MESSAGE = "web.team.jiaowuxitong.message"
const JIAOWUXITONG_NOTICE = "web.team.jiaowuxitong.notice" const JIAOWUXITONG_NOTICE = "web.team.jiaowuxitong.notice"
@ -53,6 +55,7 @@ const ZAIXIANKETANG_CREDIT = "web.team.zaixianketang.credit"
const ZAIXIANKETANG_EVENT = "web.team.zaixianketang.event" const ZAIXIANKETANG_EVENT = "web.team.zaixianketang.event"
const ZAIXIANKETANG_LESSON = "web.team.zaixianketang.lesson" const ZAIXIANKETANG_LESSON = "web.team.zaixianketang.lesson"
const ZAIXIANKETANG_MARKET = "web.team.zaixianketang.market" const ZAIXIANKETANG_MARKET = "web.team.zaixianketang.market"
const ZAIXIANKETANG_MEETING = "web.team.zaixianketang.meeting"
const ZAIXIANKETANG_MEMBER = "web.team.zaixianketang.member" const ZAIXIANKETANG_MEMBER = "web.team.zaixianketang.member"
const ZAIXIANKETANG_MESSAGE = "web.team.zaixianketang.message" const ZAIXIANKETANG_MESSAGE = "web.team.zaixianketang.message"
const ZAIXIANKETANG_NOTICE = "web.team.zaixianketang.notice" const ZAIXIANKETANG_NOTICE = "web.team.zaixianketang.notice"

View File

@ -7,6 +7,7 @@ const DASHBOARD_CREDIT = "web.team.dashboard.credit"
const DASHBOARD_DASHBOARD = "web.team.dashboard.dashboard" const DASHBOARD_DASHBOARD = "web.team.dashboard.dashboard"
const DASHBOARD_EVENT = "web.team.dashboard.event" const DASHBOARD_EVENT = "web.team.dashboard.event"
const DASHBOARD_MARKET = "web.team.dashboard.market" const DASHBOARD_MARKET = "web.team.dashboard.market"
const DASHBOARD_MEETING = "web.team.dashboard.meeting"
const DASHBOARD_MEMBER = "web.team.dashboard.member" const DASHBOARD_MEMBER = "web.team.dashboard.member"
const DASHBOARD_MESSAGE = "web.team.dashboard.message" const DASHBOARD_MESSAGE = "web.team.dashboard.message"
const DASHBOARD_NOTICE = "web.team.dashboard.notice" const DASHBOARD_NOTICE = "web.team.dashboard.notice"
@ -23,6 +24,7 @@ const DEVELOPMENT_CREDIT = "web.team.development.credit"
const DEVELOPMENT_EVENT = "web.team.development.event" const DEVELOPMENT_EVENT = "web.team.development.event"
const DEVELOPMENT_HISTORY = "web.team.development.history" const DEVELOPMENT_HISTORY = "web.team.development.history"
const DEVELOPMENT_MARKET = "web.team.development.market" const DEVELOPMENT_MARKET = "web.team.development.market"
const DEVELOPMENT_MEETING = "web.team.development.meeting"
const DEVELOPMENT_MEMBER = "web.team.development.member" const DEVELOPMENT_MEMBER = "web.team.development.member"
const DEVELOPMENT_MESSAGE = "web.team.development.message" const DEVELOPMENT_MESSAGE = "web.team.development.message"
const DEVELOPMENT_NOTICE = "web.team.development.notice" const DEVELOPMENT_NOTICE = "web.team.development.notice"
@ -39,6 +41,7 @@ const OPERATION_APPLY = "web.team.operation.apply"
const OPERATION_CREDIT = "web.team.operation.credit" const OPERATION_CREDIT = "web.team.operation.credit"
const OPERATION_EVENT = "web.team.operation.event" const OPERATION_EVENT = "web.team.operation.event"
const OPERATION_MARKET = "web.team.operation.market" const OPERATION_MARKET = "web.team.operation.market"
const OPERATION_MEETING = "web.team.operation.meeting"
const OPERATION_MEMBER = "web.team.operation.member" const OPERATION_MEMBER = "web.team.operation.member"
const OPERATION_MESSAGE = "web.team.operation.message" const OPERATION_MESSAGE = "web.team.operation.message"
const OPERATION_NOTICE = "web.team.operation.notice" const OPERATION_NOTICE = "web.team.operation.notice"
@ -56,6 +59,7 @@ const PRODUCTION_CREDIT = "web.team.production.credit"
const PRODUCTION_EVENT = "web.team.production.event" const PRODUCTION_EVENT = "web.team.production.event"
const PRODUCTION_ISSUE = "web.team.production.issue" const PRODUCTION_ISSUE = "web.team.production.issue"
const PRODUCTION_MARKET = "web.team.production.market" const PRODUCTION_MARKET = "web.team.production.market"
const PRODUCTION_MEETING = "web.team.production.meeting"
const PRODUCTION_MEMBER = "web.team.production.member" const PRODUCTION_MEMBER = "web.team.production.member"
const PRODUCTION_MESSAGE = "web.team.production.message" const PRODUCTION_MESSAGE = "web.team.production.message"
const PRODUCTION_NOTICE = "web.team.production.notice" const PRODUCTION_NOTICE = "web.team.production.notice"
@ -73,11 +77,4 @@ const STORAGE_CREDIT = "web.team.storage.credit"
const STORAGE_EVENT = "web.team.storage.event" const STORAGE_EVENT = "web.team.storage.event"
const STORAGE_FILE = "web.team.storage.file" const STORAGE_FILE = "web.team.storage.file"
const STORAGE_MARKET = "web.team.storage.market" const STORAGE_MARKET = "web.team.storage.market"
const STORAGE_MEMBER = "web.team.storage.member" const STORAGE_MEETING = "web.team.storage.meeting"
const STORAGE_MESSAGE = "web.team.storage.message"
const STORAGE_NOTICE = "web.team.storage.notice"
const STORAGE_QRCODE = "web.team.storage.qrcode"
const STORAGE_RECENT = "web.team.storage.recent"
const STORAGE_SERVICE = "web.team.storage.service"
const STORAGE_SETTING = "web.team.storage.setting"
const STORAGE_SUPPORT = "web.team.storage.support"

View File

@ -254,6 +254,8 @@ func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message {
value = AllowStatus(kit.Int(value)).String() value = AllowStatus(kit.Int(value)).String()
case model.MESSAGE_STATUS: case model.MESSAGE_STATUS:
value = MessageStatus(kit.Int(value)).String() value = MessageStatus(kit.Int(value)).String()
case model.PAYMENTLIST_STATUS:
value = PaymentStatus(kit.Int(value)).String()
} }
return value return value
}) })

View File

@ -3,110 +3,111 @@ package model
import "shylinux.com/x/mysql-story/src/db" import "shylinux.com/x/mysql-story/src/db"
const ( const (
UID = "uid" UID = "uid"
NAME = "name" NAME = "name"
INFO = "info" INFO = "info"
TYPE = "type" TYPE = "type"
ROLE = "role" ROLE = "role"
STATUS = "status" STATUS = "status"
TITLE = "title" TITLE = "title"
CONTENT = "content" CONTENT = "content"
AVATAR = "avatar" AVATAR = "avatar"
BACKGROUND = "background" BACKGROUND = "background"
CREATED_AT = "created_at" CREATED_AT = "created_at"
UPDATED_AT = "updated_at" UPDATED_AT = "updated_at"
USER_UID = "user_uid" USER_UID = "user_uid"
USER_NAME = "user_name" USER_NAME = "user_name"
USER_INFO = "user_info" USER_INFO = "user_info"
USER_ROLE = "user_role" USER_ROLE = "user_role"
USER_AVATAR = "user_avatar" USER_AVATAR = "user_avatar"
USER_BACKGROUND = "user_background" USER_BACKGROUND = "user_background"
USER_PLACE_ROLE = "user_place_role" USER_PLACE_ROLE = "user_place_role"
MEMBER_UID = "member_uid" MEMBER_UID = "member_uid"
MEMBER_STATUS = "member_status" MEMBER_STATUS = "member_status"
PLACE_UID = "place_uid" PLACE_UID = "place_uid"
PLACE_NAME = "place_name" PLACE_NAME = "place_name"
PLACE_TYPE = "place_type" PLACE_TYPE = "place_type"
PLACE_INIT = "place_init" PLACE_INIT = "place_init"
PLACE_ADDRESS = "place_address" PLACE_ADDRESS = "place_address"
STREET_UID = "street_uid" STREET_UID = "street_uid"
STREET_NAME = "street_name" STREET_NAME = "street_name"
STREET_INFO = "street_info" STREET_INFO = "street_info"
STREET_AVATAR = "street_avatar" STREET_AVATAR = "street_avatar"
STREET_BACKGROUND = "street_background" STREET_BACKGROUND = "street_background"
SCHOOL_NAME = "school_name" SCHOOL_NAME = "school_name"
COMPANY_NAME = "company_name" COMPANY_NAME = "company_name"
CITY_UID = "city_uid" CITY_UID = "city_uid"
CITY_NAME = "city_name" CITY_NAME = "city_name"
CITY_INFO = "city_info" CITY_INFO = "city_info"
CITY_AVATAR = "city_avatar" CITY_AVATAR = "city_avatar"
CITY_BACKGROUND = "city_background" CITY_BACKGROUND = "city_background"
AUTH_UID = "auth_uid" AUTH_UID = "auth_uid"
AUTH_NAME = "auth_name" AUTH_NAME = "auth_name"
AUTH_INFO = "auth_info" AUTH_INFO = "auth_info"
AUTH_TYPE = "auth_type" AUTH_TYPE = "auth_type"
AUTH_STATUS = "auth_status" AUTH_STATUS = "auth_status"
AUTH_AVATAR = "auth_avatar" AUTH_AVATAR = "auth_avatar"
AUTH_BACKGROUND = "auth_background" AUTH_BACKGROUND = "auth_background"
DASHBOARD_UID = "dashboard_uid" PAYMENTLIST_STATUS = "paymentlist_status"
DASHBOARD_NAME = "dashboard_name" DASHBOARD_UID = "dashboard_uid"
DASHBOARD_TYPE = "dashboard_type" DASHBOARD_NAME = "dashboard_name"
STORAGE_UID = "storage_uid" DASHBOARD_TYPE = "dashboard_type"
STORAGE_NAME = "storage_name" STORAGE_UID = "storage_uid"
STORAGE_TYPE = "storage_type" STORAGE_NAME = "storage_name"
QRCODE_TYPE = "qrcode_type" STORAGE_TYPE = "storage_type"
APPLY_UID = "apply_uid" QRCODE_TYPE = "qrcode_type"
APPLY_STATUS = "apply_status" APPLY_UID = "apply_uid"
ALLOW_UID = "allow_uid" APPLY_STATUS = "apply_status"
ALLOW_STATUS = "allow_status" ALLOW_UID = "allow_uid"
EVENT_UID = "event_uid" ALLOW_STATUS = "allow_status"
DOMAIN_UID = "domain_uid" EVENT_UID = "event_uid"
DOMAIN_NAME = "domain_name" DOMAIN_UID = "domain_uid"
MARKET_UID = "market_uid" DOMAIN_NAME = "domain_name"
COMMAND_UID = "command_uid" MARKET_UID = "market_uid"
COMMAND_ICON = "command_icon" COMMAND_UID = "command_uid"
COMMAND_NAME = "command_name" COMMAND_ICON = "command_icon"
MESSAGE_UID = "message_uid" COMMAND_NAME = "command_name"
MESSAGE_STATUS = "message_status" MESSAGE_UID = "message_uid"
SERVICE_UID = "service_uid" MESSAGE_STATUS = "message_status"
SERVICE_ICON = "service_icon" SERVICE_UID = "service_uid"
SERVICE_NAME = "service_name" SERVICE_ICON = "service_icon"
SERVICE_TYPE = "service_type" SERVICE_NAME = "service_name"
SERVICE_STATUS = "service_status" SERVICE_TYPE = "service_type"
THUMB_COUNT = "thumb_count" SERVICE_STATUS = "service_status"
FAVOR_COUNT = "favor_count" THUMB_COUNT = "thumb_count"
COMMENT_COUNT = "comment_count" FAVOR_COUNT = "favor_count"
SHARE_COUNT = "share_count" COMMENT_COUNT = "comment_count"
THUMB_STATUS = "thumb_status" SHARE_COUNT = "share_count"
FAVOR_STATUS = "favor_status" THUMB_STATUS = "thumb_status"
FROM_UID = "from_uid" FAVOR_STATUS = "favor_status"
FROM_USER_UID = "from_user_uid" FROM_UID = "from_uid"
TO_USER_UID = "to_user_uid" FROM_USER_UID = "from_user_uid"
BEGIN_TIME = "begin_time" TO_USER_UID = "to_user_uid"
END_TIME = "end_time" BEGIN_TIME = "begin_time"
OPEN_ID = "open_id" END_TIME = "end_time"
USER_ID = "user_id" OPEN_ID = "open_id"
VENDOR = "vendor" USER_ID = "user_id"
PHONE = "phone" VENDOR = "vendor"
EMAIL = "email" PHONE = "phone"
ADDRESS = "address" EMAIL = "email"
PORTAL = "portal" ADDRESS = "address"
PORTAL_NAME = "portal_name" PORTAL = "portal"
NODE_NAME = "node_name" PORTAL_NAME = "portal_name"
NODENAME = "nodename" NODE_NAME = "node_name"
NODETYPE = "nodetype" NODENAME = "nodename"
SPACE = "space" NODETYPE = "nodetype"
INDEX = "index" SPACE = "space"
FIELD = "field" INDEX = "index"
ICON = "icon" FIELD = "field"
ARGS = "args" ICON = "icon"
INIT = "init" ARGS = "args"
QUERY = "query" INIT = "init"
VALUE = "value" QUERY = "query"
SCORE = "score" VALUE = "value"
LEVEL = "level" SCORE = "score"
UNIT = "unit" LEVEL = "level"
LINK = "link" UNIT = "unit"
LINK = "link"
) )
type Sess struct { type Sess struct {

View File

@ -2,6 +2,7 @@ package gonganxitong
import ( import (
"shylinux.com/x/ice" "shylinux.com/x/ice"
"shylinux.com/x/toolkits"
"shylinux.com/x/community/src/gonganxitong/model" "shylinux.com/x/community/src/gonganxitong/model"
) )
@ -9,35 +10,58 @@ import (
type paymentlist struct { type paymentlist struct {
Table Table
order string `data:"92"` order string `data:"92"`
fields string `data:"title,content,amount"` fields string `data:"user_uid,paymentlist_status,amount,title,content"`
create string `name:"create title* content amount* vendor_uid" role:"leader"` create string `name:"create amount* title* content" role:"leader"`
remove string `name:"remove" role:"leader"` payfor string `name:"payfor" help:"支付" style:"notice" role:"void"`
payfor string `name:"payfor" role:"void"`
} }
func (s paymentlist) Inputs(m *ice.Message, arg ...string) {
switch arg[0] {
case "vendor_uid":
}
}
func (s paymentlist) List(m *ice.Message, arg ...string) { func (s paymentlist) List(m *ice.Message, arg ...string) {
s.ValueList(m, arg).Display("") s.ValueList(m, arg).Table(func(value ice.Maps) {
m.PushAction(s.Payfor) switch PaymentStatus(kit.Int(value[model.PAYMENTLIST_STATUS])) {
case PaymentCreate:
m.PushButton(s.Payfor)
case PaymentSuccess:
m.PushButton()
default:
m.PushButton()
}
}).Display("")
s.SelectJoinUser(m)
} }
func (s paymentlist) Payfor(m *ice.Message, arg ...string) { func (s paymentlist) Payfor(m *ice.Message, arg ...string) {
s.cmdy(m, s.PaymentRequest, arg...) s.cmdy(m, s.Request, arg...)
}
func (s paymentlist) Request(m *ice.Message, arg ...string) {}
func (s paymentlist) Response(m *ice.Message, arg ...string) {
if len(arg) > 1 {
s.Update(m, kit.Dict(model.STATUS, PaymentSuccess), s.PLACE_UID, arg[0], model.UID, arg[1])
}
} }
func (s paymentlist) PaymentRequest(m *ice.Message, arg ...string) {}
func init() { ice.TeamCtxCmd(paymentlist{Table: newTable()}) } func init() { ice.TeamCtxCmd(paymentlist{Table: newTable()}) }
func (s paymentlist) cmdy(m *ice.Message, action ice.Any, arg ...string) { func (s paymentlist) cmdy(m *ice.Message, action ice.Any, arg ...string) {
m.Option(model.PLACE_UID, m.Option(s.PLACE_UID)) m.Options(model.PLACE_UID, m.Option(s.PLACE_UID)).Cmdy(paymentVendorKey, action, arg)
m.Cmdy(paymentVendorKey, action, arg)
} }
type PaymentStatus int
const (
PaymentCreate PaymentStatus = iota
PaymentSuccess
PaymentFailure
)
var PaymentStatusList = map[PaymentStatus]string{
PaymentCreate: "create",
PaymentSuccess: "success",
PaymentFailure: "failure",
}
func (s PaymentStatus) String() string { return PaymentStatusList[s] }
type PaymentVendor interface { type PaymentVendor interface {
PaymentRequest(m *ice.Message, arg ...string) *ice.Message Request(m *ice.Message, arg ...string) *ice.Message
} }
var paymentVendorKey string var paymentVendorKey string

View File

@ -1,9 +1,23 @@
Volcanos(chat.ONIMPORT, { Volcanos(chat.ONIMPORT, {
_init: function(can, msg) { _init: function(can, msg) {
can.onimport.myView(can, msg, function(value) { return [ can.onimport.myView(can, msg, function(value) { return [
{view: html.TITLE, list: [value.title, "¥ "+value.amount]}, {view: html.TITLE, list: [value.title, "¥ "+(value.amount/100), can.onimport.titleAction(can, value)]},
{view: html.STATUS, list: [value.uid.slice(0, 6), can.onimport.timeView(can, value), value.user_name]}, {view: html.STATUS, list: [value.uid.slice(0, 6), can.onimport.timeView(can, value), value.user_name]},
{view: html.OUTPUT, list: [value.content]}, {view: html.OUTPUT, list: [value.content]},
] }) ] })
}, },
}) })
Volcanos(chat.ONACTION, {
payfor: function(event, can) {
debugger
can.runAction(event, "payfor", [], function(msg) {
debugger
if(msg.IsErr()) { return }
WeixinJSBridge.invoke('getBrandWCPayRequest', msg.Table()[0], function(res) {
debugger
alert(JSON.stringify(res))
can.Update()
})
})
},
})

View File

@ -67,6 +67,7 @@
"auth_status": "认证状态", "auth_status": "认证状态",
"auth_avatar": "认证头像", "auth_avatar": "认证头像",
"auth_background": "认证背景", "auth_background": "认证背景",
"paymentlist_status": "支付状态",
"qrcode_type": "链接类型", "qrcode_type": "链接类型",
"apply_status": "申请状态", "apply_status": "申请状态",
"allow_status": "审批状态", "allow_status": "审批状态",

View File

@ -5,6 +5,8 @@ import "shylinux.com/x/mysql-story/src/db"
const ( const (
UID = "uid" UID = "uid"
TITLE = "title" TITLE = "title"
CONTENT = "content"
AMOUNT = "amount"
OPEN_ID = "open_id" OPEN_ID = "open_id"
USER_UID = "user_uid" USER_UID = "user_uid"
PLACE_UID = "place_uid" PLACE_UID = "place_uid"
@ -18,6 +20,9 @@ type Weixinpayment struct {
UserUID string `gorm:"type:char(32)"` UserUID string `gorm:"type:char(32)"`
AppID string `gorm:"type:varchar(32)"` AppID string `gorm:"type:varchar(32)"`
MchID string `gorm:"type:varchar(32)"` MchID string `gorm:"type:varchar(32)"`
ApiKey string `gorm:"type:varchar(32)"`
CertNO string `gorm:"type:varchar(64)"`
CertKey string `gorm:"type:varchar(4096)"`
} }
func init() { db.CmdModels("", &Weixinpayment{}) } func init() { db.CmdModels("", &Weixinpayment{}) }

View File

@ -1,25 +1,29 @@
package weixinpayment package weixinpayment
import ( import (
"net/http"
"strings" "strings"
"shylinux.com/x/ice" "shylinux.com/x/ice"
"shylinux.com/x/icebergs/base/web"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
"shylinux.com/x/community/src/api" "shylinux.com/x/community/src/api"
"shylinux.com/x/community/src/gonganxitong" "shylinux.com/x/community/src/gonganxitong"
"shylinux.com/x/community/src/renzhengshouquan" "shylinux.com/x/community/src/renzhengshouquan"
"shylinux.com/x/community/src/renzhengshouquan/external/weixinpayment/model" "shylinux.com/x/community/src/renzhengshouquan/external/weixinpayment/model"
"github.com/wechatpay-apiv3/wechatpay-go/core"
"github.com/wechatpay-apiv3/wechatpay-go/core/option"
"github.com/wechatpay-apiv3/wechatpay-go/services/payments/jsapi"
"github.com/wechatpay-apiv3/wechatpay-go/utils"
) )
type weixinpayment struct { type weixinpayment struct {
renzhengshouquan.Table renzhengshouquan.Table
order string `data:"11"` order string `data:"11"`
fields string `data:"app_id,mch_id"` fields string `data:"app_id,mch_id,api_key,cert_no,cert_key"`
create string `name:"create app_id* mch_id*" role:"leader"` create string `name:"create app_id* mch_id* api_key* cert_no* cert_key*:textarea" role:"leader"`
remove string `name:"remove" role:"leader"` remove string `name:"remove" role:"leader"`
response string `name:"response" role:"void"`
} }
func (s weixinpayment) Init(m *ice.Message, arg ...string) { func (s weixinpayment) Init(m *ice.Message, arg ...string) {
@ -30,42 +34,43 @@ func (s weixinpayment) List(m *ice.Message, arg ...string) {
s.ValueList(m, arg).Display("") s.ValueList(m, arg).Display("")
kit.If(m.Length() > 0, func() { m.Action() }) kit.If(m.Length() > 0, func() { m.Action() })
} }
func (s weixinpayment) PaymentRequest(m *ice.Message, arg ...string) *ice.Message { func (s weixinpayment) Request(m *ice.Message, arg ...string) *ice.Message {
m.Option("auth_uid", "4c6a8ccf186816b332ad9dc5655255dd") m.Option("auth_uid", "308a1ca57c40e2a46f6568e017269cdd")
return s.spide(m, "POST", "pay/transactions/jsapi", msg := s.Select(m.Spawn(), m.OptionSimple(model.AUTH_UID)...)
"payer.openid", m.Cmd(api.GONGANXITONG_USER, s.Select, model.UID, m.Option(model.USER_UID)).Append(model.OPEN_ID), svc := jsapi.JsapiApiService{Client: s.newClient(m, msg)}
"amount.total", kit.Int(m.Option("amount")), "amount.currency", "CNY", resp, result, err := svc.PrepayWithRequestPayment(m, jsapi.PrepayRequest{
"description", m.Option(model.TITLE), "out_trade_no", m.Option(model.UID), Appid: core.String(msg.Append("app_id")),
"notify_url", strings.Split(m.MergePodCmd("", m.PrefixKey()), "?")[0]+"/action/response/"+m.Option(model.PLACE_UID)+"/"+m.Option(model.UID)) Mchid: core.String(msg.Append("mch_id")),
Description: core.String(m.Option(model.TITLE)),
Attach: core.String(m.Option(model.CONTENT)),
OutTradeNo: core.String(m.Option(model.UID)),
Amount: &jsapi.Amount{Total: core.Int64(kit.Int64(m.Option(model.AMOUNT)))},
Payer: &jsapi.Payer{Openid: core.String(m.Cmd(api.GONGANXITONG_USER, s.Select, model.UID, m.Option(model.USER_UID)).Append(model.OPEN_ID))},
NotifyUrl: core.String(strings.Split(m.MergePodCmd("", m.PrefixKey()), "?")[0] + "/action/response/" + m.Option(model.PLACE_UID) + "/" + m.Option(model.UID)),
})
if !m.Warn(err) {
kit.For(kit.UnMarshal(kit.Format(resp)), func(k, v string) { m.Push(kit.LowerCapital(k), v) })
}
m.Info("what %v %v %v", resp, result, err)
return m
} }
func (s weixinpayment) Response(m *ice.Message, arg ...string) *ice.Message { func (s weixinpayment) Response(m *ice.Message, arg ...string) *ice.Message {
m.Echo("hello world") if len(arg) > 1 {
if m.Option("event_type") == "TRANSACTION.SUCCESS" {
m.Cmdy(api.GONGANXITONG_PAYMENTLIST, s.Response, arg)
}
}
return m return m
} }
func init() { ice.TeamCtxCmd(weixinpayment{}) } func init() { ice.TeamCtxCmd(weixinpayment{}) }
func (s weixinpayment) spide(m *ice.Message, method, api string, arg ...ice.Any) *ice.Message { func (s weixinpayment) newClient(m, msg *ice.Message) *core.Client {
msg := s.Select(m.Spawn(), m.OptionSimple(model.AUTH_UID)...) if key, err := utils.LoadPrivateKey(msg.Append("cert_key")); m.Warn(err) {
if msg.Length() == 0 { return nil
m.Echo("请联系公司管理员,配置微信支付的账号") } else if client, err := core.NewClient(m, option.WithWechatPayAutoAuthCipher(msg.Append("mch_id"), msg.Append("cert_no"), key, msg.Append("api_key"))); m.Warn(err) {
return m return nil
} else {
return client
} }
arg = append(arg, "appid", msg.Append("app_id"), "mchid", msg.Append("mch_id"))
method = kit.Select(http.MethodGet, method)
uri, body, args := kit.MergeURL("/v3/"+api, arg...), "", []string{}
kit.If(kit.IsIn(method, http.MethodPost, http.MethodPut), func() {
uri, body = kit.MergeURL("/v3/"+api), kit.Format(kit.Dict(arg...))
args = []string{web.SPIDE_DATA, body}
})
m.Options(web.SPIDE_HEADER, map[string]string{
"Accept": "application/json", "Authorization": doSignature("", "", method, "", "", uri, body),
}).Cmdy(web.SPIDE, ice.DEV, web.SPIDE_RAW, method, "https://api.mch.weixin.qq.com"+uri, args)
kit.If(kit.IsIn(method, http.MethodPost, http.MethodPut), func() { kit.If(!m.IsErr(), func() { m.ProcessRefresh() }) })
return m
}
func doSignature(secretId string, secretKey string, method string, nonce string, now string, uri string, body string) string {
strings.Join([]string{method, uri, now, nonce, body}, "\n")
return ""
} }

View File

@ -2,5 +2,6 @@ chapter "微信支付"
refer ` refer `
后台 https://pay.weixin.qq.com/index.php/core/cert/api_cert#/ 后台 https://pay.weixin.qq.com/index.php/core/cert/api_cert#/
文档 https://pay.weixin.qq.com/doc/v3/merchant/4012525057 文档 https://pay.weixin.qq.com/doc/v3/merchant/4012525057
接口 https://github.com/wechatpay-apiv3/wechatpay-go
签名算法 https://segmentfault.com/a/1190000039301729 签名算法 https://segmentfault.com/a/1190000039301729
` `

View File

@ -1,7 +1,7 @@
Volcanos(chat.ONIMPORT, { Volcanos(chat.ONIMPORT, {
_init: function(can, msg) { _init: function(can, msg) {
can.onimport.myView(can, msg, function(value) { return [ can.onimport.myView(can, msg, function(value) { return [
{view: html.TITLE, list: [value.title||value.name||value.user_name]}, {view: html.TITLE, list: [value.title||value.name||value.user_name, can.onimport.titleAction(can, value)]},
{view: html.STATUS, list: [value.uid.slice(0, 6), can.onimport.timeView(can, value), value.user_name]}, {view: html.STATUS, list: [value.uid.slice(0, 6), can.onimport.timeView(can, value), value.user_name]},
{view: html.OUTPUT, list: [value.content||value.info]}, {view: html.OUTPUT, list: [value.content||value.info]},
] }) ] })