@@ -0,0 +1,20 @@ | |||||
package advertising | |||||
import ( | |||||
"applet/app/svc/advertising" | |||||
"github.com/gin-gonic/gin" | |||||
) | |||||
// GetBasic | |||||
// @Summary 广告管理-广告设置-信息 | |||||
// @Tags 广告管理 | |||||
// @Description 广告管理-广告设置-信息 | |||||
// @Accept json | |||||
// @Produce json | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Success 200 {object} md.NoticeAliyunSmsListResp "具体数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/advertising/base [get] | |||||
func GetBasic(c *gin.Context) { | |||||
advertising.GetBasic(c) | |||||
} |
@@ -0,0 +1,51 @@ | |||||
package article | |||||
import ( | |||||
"applet/app/svc/article" | |||||
"github.com/gin-gonic/gin" | |||||
) | |||||
// CateList | |||||
// @Summary 文章资讯-分类列表 | |||||
// @Tags 文章资讯 | |||||
// @Description 分类列表 | |||||
// @Accept json | |||||
// @Produce json | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Param req body md.ArticleCateListReq true "(分页信息必填)" | |||||
// @Success 200 {object} md.ArticleCateListResp "具体数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/article/cate/list [post] | |||||
func CateList(c *gin.Context) { | |||||
article.CateList(c) | |||||
} | |||||
// CateSave | |||||
// @Summary 文章资讯-分类列表-分类保存 | |||||
// @Tags 文章资讯 | |||||
// @Description 分类列表-分类保存 | |||||
// @Accept json | |||||
// @Produce json | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Param req body md.ArticleCateSaveReq true "(分页信息必填)" | |||||
// @Success 200 {string} "具体数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/article/cate/save [post] | |||||
func CateSave(c *gin.Context) { | |||||
article.CateSave(c) | |||||
} | |||||
// CateDel | |||||
// @Summary 文章资讯-分类列表-分类删除 | |||||
// @Tags 文章资讯 | |||||
// @Description 分类列表-分类删除 | |||||
// @Accept json | |||||
// @Produce json | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Param req body md.ArticleCateDelReq true "(分页信息必填)" | |||||
// @Success 200 {string} "具体数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/article/cate/del [post] | |||||
func CateDel(c *gin.Context) { | |||||
article.CateDel(c) | |||||
} |
@@ -0,0 +1,51 @@ | |||||
package article | |||||
import ( | |||||
"applet/app/svc/article" | |||||
"github.com/gin-gonic/gin" | |||||
) | |||||
// List | |||||
// @Summary 文章资讯-文章列表 | |||||
// @Tags 文章资讯 | |||||
// @Description 文章列表 | |||||
// @Accept json | |||||
// @Produce json | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Param req body md.ArticleListReq true "(分页信息必填)" | |||||
// @Success 200 {object} md.ArticleListResp "具体数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/article/content/list [post] | |||||
func List(c *gin.Context) { | |||||
article.List(c) | |||||
} | |||||
// Save | |||||
// @Summary 文章资讯-文章列表-文章保存 | |||||
// @Tags 文章资讯 | |||||
// @Description 文章列表-文章保存 | |||||
// @Accept json | |||||
// @Produce json | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Param req body md.ArticleSaveReq true "(分页信息必填)" | |||||
// @Success 200 {string} "具体数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/article/content/save [post] | |||||
func Save(c *gin.Context) { | |||||
article.Save(c) | |||||
} | |||||
// Del | |||||
// @Summary 文章资讯-文章列表-文章删除 | |||||
// @Tags 文章资讯 | |||||
// @Description 文章列表-文章删除 | |||||
// @Accept json | |||||
// @Produce json | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Param req body md.ArticleDelReq true "(分页信息必填)" | |||||
// @Success 200 {string} "具体数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/article/content/del [post] | |||||
func Del(c *gin.Context) { | |||||
article.Del(c) | |||||
} |
@@ -65,7 +65,7 @@ func GetWithdrawSetting(c *gin.Context) { | |||||
return | return | ||||
} | } | ||||
} | } | ||||
var frequency md2.WithdrawFrequencySettingStruct | |||||
var frequency md.WithdrawFrequencySettingStruct | |||||
utils.Unserialize([]byte(setting.FrequencySet), &frequency) | utils.Unserialize([]byte(setting.FrequencySet), &frequency) | ||||
resp := md.GetWithdrawSettingResp{ | resp := md.GetWithdrawSettingResp{ | ||||
Id: setting.Id, | Id: setting.Id, | ||||
@@ -0,0 +1,109 @@ | |||||
package notice | |||||
import ( | |||||
"applet/app/svc/notice" | |||||
"github.com/gin-gonic/gin" | |||||
) | |||||
// AliyunSmsFilePhone | |||||
// @Summary 消息中心-短信推送记录-通知模板 | |||||
// @Tags 消息中心 | |||||
// @Description 短信推送记录-通知模板 | |||||
// @Accept json | |||||
// @Produce json | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Param req body true "参数 file-----文件上传格式" | |||||
// @Success 200 {object} "phone 一个数组" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/notice/aliyunSms/file/phone [post] | |||||
func AliyunSmsFilePhone(c *gin.Context) { | |||||
notice.AliyunSmsFilePhone(c) | |||||
} | |||||
// AliyunSmsBase | |||||
// @Summary 消息中心-短信推送记录-通知模板 | |||||
// @Tags 消息中心 | |||||
// @Description 短信推送记录-通知模板 | |||||
// @Accept json | |||||
// @Produce json | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Success 200 {object} md.NoticeAliyunSmsListResp "具体数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/notice/aliyunSms/base [get] | |||||
func AliyunSmsBase(c *gin.Context) { | |||||
notice.AliyunSmsBase(c) | |||||
} | |||||
// AliyunSmsSave | |||||
// @Summary 消息中心-短信推送记录-通知模板添加编辑 | |||||
// @Tags 消息中心 | |||||
// @Description 短信推送记录-通知模板添加编辑 | |||||
// @Accept json | |||||
// @Produce json | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Param req body true "数组 把列表的数组传过来" | |||||
// @Success 200 {string} "具体数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/notice/aliyunSms/save [post] | |||||
func AliyunSmsSave(c *gin.Context) { | |||||
notice.AliyunSmsSave(c) | |||||
} | |||||
// AliyunSmsSaleBase | |||||
// @Summary 消息中心-短信推送记录-营销短信-通知模板 | |||||
// @Tags 消息中心 | |||||
// @Description 短信推送记录-营销短信-通知模板 | |||||
// @Accept json | |||||
// @Produce json | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Success 200 {object} md.NoticeAliyunSmsListResp "具体数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/notice/aliyunSms/sale/base [get] | |||||
func AliyunSmsSaleBase(c *gin.Context) { | |||||
notice.AliyunSmsSaleBase(c) | |||||
} | |||||
// AliyunSmsSaleSave | |||||
// @Summary 消息中心-短信推送记录-营销短信-通知模板添加编辑 | |||||
// @Tags 消息中心 | |||||
// @Description 短信推送记录-营销短信-通知模板添加编辑 | |||||
// @Accept json | |||||
// @Produce json | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Param req body true "数组 把列表的数组传过来" | |||||
// @Success 200 {string} "具体数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/notice/aliyunSms/sale/save [post] | |||||
func AliyunSmsSaleSave(c *gin.Context) { | |||||
notice.AliyunSmsSaleSave(c) | |||||
} | |||||
// AliyunSmsPushList | |||||
// @Summary 消息中心-短信推送记录-推送记录列表 | |||||
// @Tags 消息中心 | |||||
// @Description 短信推送记录-推送记录列表 | |||||
// @Accept json | |||||
// @Produce json | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Param req body md.NoticeAliyunSmsListReq true "(分页信息必填)" | |||||
// @Success 200 {object} md.NoticePushListResp "具体数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/notice/aliyunSms/push/list [post] | |||||
func AliyunSmsPushList(c *gin.Context) { | |||||
notice.AliyunSmsPushList(c) | |||||
} | |||||
// AliyunSmsPushSave | |||||
// @Summary 消息中心-短信推送记录-推送记录添加-发送(不做编辑了) | |||||
// @Tags 消息中心 | |||||
// @Description 短信推送记录-推送记录添加-发送 (不做编辑了) | |||||
// @Accept json | |||||
// @Produce json | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Param req body md.NoticeAliyunSmsSaveReq true "(分页信息必填)" | |||||
// @Success 200 {string} "具体数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/notice/aliyunSms/push/save [post] | |||||
func AliyunSmsPushSave(c *gin.Context) { | |||||
notice.AliyunSmsPushSave(c) | |||||
} |
@@ -0,0 +1,81 @@ | |||||
package notice | |||||
import ( | |||||
"applet/app/svc/notice" | |||||
"github.com/gin-gonic/gin" | |||||
) | |||||
// List | |||||
// @Summary 消息中心-APP推送记录-通知模板 | |||||
// @Tags 消息中心 | |||||
// @Description APP推送记录-通知模板 | |||||
// @Accept json | |||||
// @Produce json | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Param req body md.NoticeListReq true "(分页信息必填)" | |||||
// @Success 200 {object} md.NoticeListResp "具体数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/notice/jPush/list [post] | |||||
func List(c *gin.Context) { | |||||
notice.List(c) | |||||
} | |||||
// Save | |||||
// @Summary 消息中心-APP推送记录-通知模板添加编辑 | |||||
// @Tags 消息中心 | |||||
// @Description APP推送记录-通知模板添加编辑 | |||||
// @Accept json | |||||
// @Produce json | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Param req body md.NoticeSaveReq true "(分页信息必填)" | |||||
// @Success 200 {string} "具体数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/notice/jPush/save [post] | |||||
func Save(c *gin.Context) { | |||||
notice.Save(c) | |||||
} | |||||
// Del | |||||
// @Summary 消息中心-APP推送记录-通知模板删除 | |||||
// @Tags 消息中心 | |||||
// @Description APP推送记录-通知模板删除 | |||||
// @Accept json | |||||
// @Produce json | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Param req body md.NoticeDelReq true "(分页信息必填)" | |||||
// @Success 200 {string} "具体数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/notice/jPush/del [post] | |||||
func Del(c *gin.Context) { | |||||
notice.Del(c) | |||||
} | |||||
// PushList | |||||
// @Summary 消息中心-APP推送记录-推送记录列表 | |||||
// @Tags 消息中心 | |||||
// @Description APP推送记录-推送记录列表 | |||||
// @Accept json | |||||
// @Produce json | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Param req body md.NoticeListReq true "(分页信息必填)" | |||||
// @Success 200 {object} md.NoticePushListResp "具体数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/notice/jPush/push/list [post] | |||||
func PushList(c *gin.Context) { | |||||
notice.PushList(c) | |||||
} | |||||
// PushSave | |||||
// @Summary 消息中心-APP推送记录-推送记录添加-发送(不做编辑了) | |||||
// @Tags 消息中心 | |||||
// @Description APP推送记录-推送记录添加-发送 (不做编辑了) | |||||
// @Accept json | |||||
// @Produce json | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Param req body md.NoticeSaveReq true "(分页信息必填)" | |||||
// @Success 200 {string} "具体数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/notice/jPush/push/save [post] | |||||
func PushSave(c *gin.Context) { | |||||
notice.PushSave(c) | |||||
} |
@@ -1,9 +1,5 @@ | |||||
package md | package md | ||||
import ( | |||||
"code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/md" | |||||
) | |||||
type Paginate struct { | type Paginate struct { | ||||
Limit int `json:"limit"` // 每页大小 | Limit int `json:"limit"` // 每页大小 | ||||
Page int `json:"page"` // 页数 | Page int `json:"page"` // 页数 | ||||
@@ -11,37 +7,40 @@ type Paginate struct { | |||||
} | } | ||||
type GetWithdrawSettingResp struct { | type GetWithdrawSettingResp struct { | ||||
Id int64 `json:"id"` | |||||
FrequencySet md.WithdrawFrequencySettingStruct `json:"frequency_set"` // 频率设置(0:日 1:周 2:月 3:年) | |||||
WithdrawType int `json:"withdraw_type"` // 提现方式(1:支付宝 2:微信) | |||||
VipLevelLimit int `json:"vip_level_limit"` // 提现等级限制 | |||||
IsRealName int `json:"is_real_name"` // 是否实名(0:否 1:是) | |||||
WithdrawNumsLimit int `json:"withdraw_nums_limit"` // 提现次数限制(对应上方设置周期,0为不限制,失败、驳回不计数 ) | |||||
WithdrawAmountLimit string `json:"withdraw_amount_limit"` // 提现金额限制(0为不限制,大于等于该金额才可以申请提现 ) | |||||
WithdrawMultipleLimit string `json:"withdraw_multiple_limit"` // 提现倍数限制(0为不限制,金额限制倍数才可以申请提现 ) | |||||
IsSupportDecimalPoint int `json:"is_support_decimal_point"` // 是否支持小数点(0:否 1:是) | |||||
IsAuto int `json:"is_auto"` // 是否开启自动提现(0:否 1:是) | |||||
WithdrawTimeInterval string `json:"withdraw_time_interval"` // 提现时段 | |||||
WithdrawFeeSet string `json:"withdraw_fee_set"` // 提现手续费设置 | |||||
CreateAt string `json:"create_at"` // 申请时间 | |||||
UpdateAt string `json:"update_at"` // 处理时间 | |||||
Id int64 `json:"id"` | |||||
FrequencySet WithdrawFrequencySettingStruct `json:"frequency_set"` // 频率设置(0:日 1:周 2:月 3:年) | |||||
WithdrawType int `json:"withdraw_type"` // 提现方式(1:支付宝 2:微信) | |||||
VipLevelLimit int `json:"vip_level_limit"` // 提现等级限制 | |||||
IsRealName int `json:"is_real_name"` // 是否实名(0:否 1:是) | |||||
WithdrawNumsLimit int `json:"withdraw_nums_limit"` // 提现次数限制(对应上方设置周期,0为不限制,失败、驳回不计数 ) | |||||
WithdrawAmountLimit string `json:"withdraw_amount_limit"` // 提现金额限制(0为不限制,大于等于该金额才可以申请提现 ) | |||||
WithdrawMultipleLimit string `json:"withdraw_multiple_limit"` // 提现倍数限制(0为不限制,金额限制倍数才可以申请提现 ) | |||||
IsSupportDecimalPoint int `json:"is_support_decimal_point"` // 是否支持小数点(0:否 1:是) | |||||
IsAuto int `json:"is_auto"` // 是否开启自动提现(0:否 1:是) | |||||
WithdrawTimeInterval string `json:"withdraw_time_interval"` // 提现时段 | |||||
WithdrawFeeSet string `json:"withdraw_fee_set"` // 提现手续费设置 | |||||
CreateAt string `json:"create_at"` // 申请时间 | |||||
UpdateAt string `json:"update_at"` // 处理时间 | |||||
} | } | ||||
type UpdateWithdrawSettingReq struct { | type UpdateWithdrawSettingReq struct { | ||||
Id int64 `json:"id,required"` | |||||
FrequencySet md.WithdrawFrequencySettingStruct `json:"frequency_set"` // 频率设置(num 个 duration) (duration (0.天 1.小时 2.周 3.月 4.年)) | |||||
WithdrawType int `json:"withdraw_type"` // 提现方式(1:支付宝 2:微信) | |||||
VipLevelLimit int `json:"vip_level_limit"` // 提现等级限制 | |||||
IsRealName int `json:"is_real_name"` // 是否实名(0:否 1:是) | |||||
WithdrawNumsLimit int `json:"withdraw_nums_limit"` // 提现次数限制(对应上方设置周期,0为不限制,失败、驳回不计数 ) | |||||
WithdrawAmountLimit string `json:"withdraw_amount_limit"` // 提现金额限制(0为不限制,大于等于该金额才可以申请提现 ) | |||||
WithdrawMultipleLimit string `json:"withdraw_multiple_limit"` // 提现倍数限制(0为不限制,金额限制倍数才可以申请提现 ) | |||||
IsSupportDecimalPoint int `json:"is_support_decimal_point"` // 是否支持小数点(0:否 1:是) | |||||
IsAuto int `json:"is_auto"` // 是否开启自动提现(0:否 1:是) | |||||
WithdrawTimeInterval string `json:"withdraw_time_interval"` // 提现时段 | |||||
WithdrawFeeSet string `json:"withdraw_fee_set"` // 提现手续费设置 | |||||
Id int64 `json:"id,required"` | |||||
FrequencySet WithdrawFrequencySettingStruct `json:"frequency_set"` // 频率设置(num 个 duration) (duration (0.天 1.小时 2.周 3.月 4.年)) | |||||
WithdrawType int `json:"withdraw_type"` // 提现方式(1:支付宝 2:微信) | |||||
VipLevelLimit int `json:"vip_level_limit"` // 提现等级限制 | |||||
IsRealName int `json:"is_real_name"` // 是否实名(0:否 1:是) | |||||
WithdrawNumsLimit int `json:"withdraw_nums_limit"` // 提现次数限制(对应上方设置周期,0为不限制,失败、驳回不计数 ) | |||||
WithdrawAmountLimit string `json:"withdraw_amount_limit"` // 提现金额限制(0为不限制,大于等于该金额才可以申请提现 ) | |||||
WithdrawMultipleLimit string `json:"withdraw_multiple_limit"` // 提现倍数限制(0为不限制,金额限制倍数才可以申请提现 ) | |||||
IsSupportDecimalPoint int `json:"is_support_decimal_point"` // 是否支持小数点(0:否 1:是) | |||||
IsAuto int `json:"is_auto"` // 是否开启自动提现(0:否 1:是) | |||||
WithdrawTimeInterval string `json:"withdraw_time_interval"` // 提现时段 | |||||
WithdrawFeeSet string `json:"withdraw_fee_set"` // 提现手续费设置 | |||||
} | |||||
type WithdrawFrequencySettingStruct struct { //swag 生成不了,把这个挪出来了 | |||||
Duration int `json:"duration"` // 周期 (0.天 1.小时 2.周 3.天 4.月 5.年) | |||||
Num int `json:"num"` // 周期数 | |||||
} | } | ||||
type GetWithdrawApplyListReq struct { | type GetWithdrawApplyListReq struct { | ||||
Uid string `json:"uid"` // 用户 ID | Uid string `json:"uid"` // 用户 ID | ||||
Nickname string `json:"nickname"` // 用户昵称 | Nickname string `json:"nickname"` // 用户昵称 | ||||
@@ -0,0 +1,17 @@ | |||||
package md | |||||
type AdvertisingBaseResp struct { | |||||
AndroidAdIsOpen string `json:"android_ad_is_open"` | |||||
IosAdIsOpen string `json:"ios_ad_is_open"` | |||||
AndroidOpenAdIsOpen string `json:"android_open_ad_is_open"` | |||||
IosOpenAdIsOpen string `json:"ios_open_ad_is_open"` | |||||
Voice string `json:"voice"` | |||||
VoiceUrl string `json:"voice_url"` | |||||
Info map[string]AdvertisingBaseKey `json:"info"` | |||||
} | |||||
type AdvertisingBaseKey struct { | |||||
AndroidKey string `json:"android_key"` | |||||
AndroidSecret string `json:"android_secret"` | |||||
IosKey string `json:"ios_key"` | |||||
IosSecret string `json:"ios_secret"` | |||||
} |
@@ -0,0 +1,62 @@ | |||||
package md | |||||
type ArticleCateListReq struct { | |||||
Page string `json:"page,required"` // 页数 | |||||
Limit string `json:"limit,required"` // 每页大小 | |||||
} | |||||
type ArticleCateListResp struct { | |||||
Total int64 `json:"total"` | |||||
SelectData []map[string]string `json:"select_data"` | |||||
List []ArticleCateList `json:"list"` | |||||
} | |||||
type ArticleCateList struct { | |||||
Id string `json:"id"` | |||||
Pid string `json:"pid"` | |||||
Name string `json:"name"` | |||||
IsShow string `json:"is_show"` | |||||
Sort string `json:"sort"` | |||||
} | |||||
type ArticleCateSaveReq struct { | |||||
Id string `json:"id"` | |||||
Pid string `json:"pid"` | |||||
Name string `json:"name"` | |||||
IsShow string `json:"is_show"` | |||||
Sort string `json:"sort"` | |||||
} | |||||
type ArticleCateDelReq struct { | |||||
Id []string `json:"id"` | |||||
} | |||||
type ArticleListReq struct { | |||||
Page string `json:"page,required"` // 页数 | |||||
Limit string `json:"limit,required"` // 每页大小 | |||||
} | |||||
type ArticleListResp struct { | |||||
Total int64 `json:"total"` | |||||
SelectData []map[string]interface{} `json:"select_data"` | |||||
List []ArticleList `json:"list"` | |||||
} | |||||
type ArticleList struct { | |||||
Id string `json:"id"` | |||||
Pid string `json:"pid" example:"一级分类id"` | |||||
CateId string `json:"cate_id" example:"二级分类id"` | |||||
Title string `json:"title"` | |||||
Content string `json:"content"` | |||||
Cover string `json:"cover" example:"一级分类id=4 显示 封面图"` | |||||
CoverUrl string `json:"cover_url"` | |||||
IsShow string `json:"is_show"` | |||||
Sort string `json:"sort"` | |||||
} | |||||
type ArticleSaveReq struct { | |||||
Id string `json:"id"` | |||||
Pid string `json:"pid" example:"一级分类id"` | |||||
CateId string `json:"cate_id" example:"二级分类id"` | |||||
Title string `json:"title"` | |||||
Content string `json:"content"` | |||||
Cover string `json:"cover" example:"一级分类id=4 显示 封面图"` | |||||
IsShow string `json:"is_show"` | |||||
Sort string `json:"sort"` | |||||
} | |||||
type ArticleDelReq struct { | |||||
Id []string `json:"id"` | |||||
} |
@@ -0,0 +1,10 @@ | |||||
package md | |||||
const ( | |||||
EggJpushRecordQueueExchange = "egg.jpush" | |||||
EggJpushRecordQueue = "jpush_record" | |||||
) | |||||
type JpushRecordFundData struct { | |||||
Id string `json:"id"` | |||||
} |
@@ -0,0 +1,101 @@ | |||||
package md | |||||
type NoticeListReq struct { | |||||
Page string `json:"page,required"` // 页数 | |||||
Limit string `json:"limit,required"` // 每页大小 | |||||
} | |||||
type NoticeListResp struct { | |||||
Total int64 `json:"total"` | |||||
SelectData []map[string]string `json:"select_data"` | |||||
ChangeData []map[string]string `json:"change_data"` | |||||
List []NoticeList `json:"list"` | |||||
} | |||||
type NoticeList struct { | |||||
Id string `json:"id"` | |||||
Title string `json:"title"` | |||||
Content string `json:"content"` | |||||
Type string `json:"type"` | |||||
} | |||||
type NoticeSaveReq struct { | |||||
Id string `json:"id"` | |||||
Title string `json:"title"` | |||||
Content string `json:"content"` | |||||
Type string `json:"type"` | |||||
} | |||||
type NoticeDelReq struct { | |||||
Id []string `json:"id"` | |||||
} | |||||
type NoticePushListResp struct { | |||||
Total int64 `json:"total"` | |||||
PlatformData []map[string]string `json:"platform_data"` | |||||
TargetData []map[string]string `json:"target_data"` | |||||
List []NoticePushList `json:"list"` | |||||
} | |||||
type NoticePushList struct { | |||||
Id string `json:"id"` | |||||
Title string `json:"title"` | |||||
Content string `json:"content"` | |||||
Platform string `json:"platform"` | |||||
Target string `json:"target"` | |||||
SendType string `json:"send_type" example:"0立即推送 1定时推送"` | |||||
SendStartTime string `json:"send_start_time" example:"如 2024-11-25 11:56:00"` | |||||
SendEndTime string `json:"send_end_time" example:"如 2024-11-25 11:56:00"` | |||||
State string `json:"state" example:"0待发送 1发送成功"` | |||||
} | |||||
type NoticePushSaveReq struct { | |||||
Id string `json:"id"` | |||||
Title string `json:"title"` | |||||
Content string `json:"content"` | |||||
Platform string `json:"platform"` | |||||
Target string `json:"target"` | |||||
SendType string `json:"send_type"` | |||||
SendStartTime string `json:"send_start_time"` | |||||
SendEndTime string `json:"send_end_time"` | |||||
UserList []string `json:"user_list"` | |||||
Level string `json:"level"` | |||||
} | |||||
type NoticeAliyunSmsListReq struct { | |||||
Page string `json:"page,required"` // 页数 | |||||
Limit string `json:"limit,required"` // 每页大小 | |||||
} | |||||
type NoticeAliyunSmsListResp struct { | |||||
Total int64 `json:"total"` | |||||
SelectData []map[string]string `json:"select_data"` | |||||
List []NoticeAliyunSmsList `json:"list"` | |||||
} | |||||
type NoticeAliyunSmsList struct { | |||||
Id string `json:"id"` | |||||
Title string `json:"title"` | |||||
Content string `json:"content"` | |||||
Type string `json:"type"` | |||||
} | |||||
type NoticeAliyunSmsSaveReq struct { | |||||
Id string `json:"id"` | |||||
Title string `json:"title"` | |||||
Content string `json:"content"` | |||||
Type string `json:"type"` | |||||
} | |||||
type NoticeAliyunSmsDelReq struct { | |||||
Id []string `json:"id"` | |||||
} | |||||
type NoticeAliyunSmsPushListResp struct { | |||||
Total int64 `json:"total"` | |||||
TargetData []map[string]string `json:"target_data"` | |||||
List []NoticeAliyunSmsPushList `json:"list"` | |||||
} | |||||
type NoticeAliyunSmsPushList struct { | |||||
Id string `json:"id"` | |||||
Title string `json:"title"` | |||||
Content string `json:"content"` | |||||
Target string `json:"target"` | |||||
State string `json:"state" example:"0待发送 1发送成功"` | |||||
} | |||||
type NoticeAliyunSmsPushSaveReq struct { | |||||
Id string `json:"id"` | |||||
Title string `json:"title"` | |||||
Content string `json:"content"` | |||||
Target string `json:"target"` | |||||
PhoneList []string `json:"phone_list"` | |||||
Level string `json:"level"` | |||||
} |
@@ -3,6 +3,8 @@ package router | |||||
import ( | import ( | ||||
"applet/app/cfg" | "applet/app/cfg" | ||||
"applet/app/hdl" | "applet/app/hdl" | ||||
"applet/app/hdl/advertising" | |||||
"applet/app/hdl/article" | |||||
"applet/app/hdl/comm" | "applet/app/hdl/comm" | ||||
"applet/app/hdl/financial_center" | "applet/app/hdl/financial_center" | ||||
"applet/app/hdl/im" | "applet/app/hdl/im" | ||||
@@ -10,6 +12,7 @@ import ( | |||||
"applet/app/hdl/institutional_management/public_platoon" | "applet/app/hdl/institutional_management/public_platoon" | ||||
"applet/app/hdl/marketing_applications/new_user_red_package" | "applet/app/hdl/marketing_applications/new_user_red_package" | ||||
"applet/app/hdl/member_center" | "applet/app/hdl/member_center" | ||||
"applet/app/hdl/notice" | |||||
"applet/app/hdl/setCenter/oss/aliyun" | "applet/app/hdl/setCenter/oss/aliyun" | ||||
"applet/app/mw" | "applet/app/mw" | ||||
_ "applet/docs" | _ "applet/docs" | ||||
@@ -65,6 +68,9 @@ func route(r *gin.RouterGroup) { | |||||
rMemberCenter(r.Group("/memberCenter")) | rMemberCenter(r.Group("/memberCenter")) | ||||
rSettCenter(r.Group("/settCenter")) | rSettCenter(r.Group("/settCenter")) | ||||
rFinancialCenter(r.Group("/financialCenter")) | rFinancialCenter(r.Group("/financialCenter")) | ||||
rAdvertising(r.Group("/advertising")) | |||||
rNotice(r.Group("/notice")) | |||||
rArticle(r.Group("/article")) | |||||
} | } | ||||
func rSettCenter(r *gin.RouterGroup) { //设置中心 | func rSettCenter(r *gin.RouterGroup) { //设置中心 | ||||
@@ -77,7 +83,43 @@ func rSettCenter(r *gin.RouterGroup) { //设置中心 | |||||
} | } | ||||
} | } | ||||
} | } | ||||
func rAdvertising(r *gin.RouterGroup) { | |||||
r.GET("/getBasic", advertising.GetBasic) | |||||
} | |||||
func rNotice(r *gin.RouterGroup) { | |||||
rJpush := r.Group("/jPush") //极光 | |||||
{ | |||||
rJpush.POST("/list", notice.List) | |||||
rJpush.POST("/save", notice.Save) | |||||
rJpush.POST("/del", notice.Del) | |||||
rJpush.POST("/push/list", notice.PushList) | |||||
rJpush.POST("/push/save", notice.PushSave) | |||||
} | |||||
rAliyunSms := r.Group("/aliyunSms") //阿里云短信 | |||||
{ | |||||
rAliyunSms.POST("/file/phone", notice.AliyunSmsFilePhone) | |||||
rAliyunSms.GET("/base", notice.AliyunSmsBase) | |||||
rAliyunSms.POST("/save", notice.AliyunSmsSave) | |||||
rAliyunSms.GET("/sale/base", notice.AliyunSmsSaleBase) | |||||
rAliyunSms.POST("/sale/save", notice.AliyunSmsSaleSave) | |||||
rAliyunSms.POST("/push/list", notice.AliyunSmsPushList) | |||||
rAliyunSms.POST("/push/save", notice.AliyunSmsPushSave) | |||||
} | |||||
} | |||||
func rArticle(r *gin.RouterGroup) { | |||||
rCate := r.Group("/cate") // | |||||
{ | |||||
rCate.POST("/list", article.CateList) | |||||
rCate.POST("/save", article.CateSave) | |||||
rCate.POST("/del", article.CateDel) | |||||
} | |||||
rContent := r.Group("/content") // | |||||
{ | |||||
rContent.POST("/list", article.List) | |||||
rContent.POST("/save", article.Save) | |||||
rContent.POST("/del", article.Del) | |||||
} | |||||
} | |||||
func rInstitutionalManagement(r *gin.RouterGroup) { //制度管理 | func rInstitutionalManagement(r *gin.RouterGroup) { //制度管理 | ||||
rPublicPlatoon := r.Group("/publicPlatoon") //公排设置 | rPublicPlatoon := r.Group("/publicPlatoon") //公排设置 | ||||
{ | { | ||||
@@ -0,0 +1,7 @@ | |||||
package advertising | |||||
import "github.com/gin-gonic/gin" | |||||
func GetBasic(c *gin.Context) { | |||||
} |
@@ -0,0 +1,85 @@ | |||||
package article | |||||
import ( | |||||
"applet/app/db" | |||||
"applet/app/e" | |||||
"applet/app/md" | |||||
"applet/app/utils" | |||||
"code.fnuoos.com/EggPlanet/egg_models.git/src/implement" | |||||
"code.fnuoos.com/EggPlanet/egg_models.git/src/model" | |||||
"github.com/gin-gonic/gin" | |||||
) | |||||
func CateList(c *gin.Context) { | |||||
var req *md.ArticleCateListReq | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
var resp md.ArticleCateListResp | |||||
noticeList := make([]md.ArticleCateList, 0) | |||||
NewJpushNoticeDb := implement.NewArticleCateDb(db.Db) | |||||
notice, total, _ := NewJpushNoticeDb.FindArticleCateAndTotalPid(req.Page, req.Limit) | |||||
resp.Total = total | |||||
resp.SelectData = []map[string]string{} | |||||
pid, _ := NewJpushNoticeDb.FindArticleCate("1", "100", "0") | |||||
if pid != nil { | |||||
for _, v := range *pid { | |||||
tmp := map[string]string{ | |||||
"name": v.Name, "value": utils.IntToStr(v.Id), | |||||
} | |||||
resp.SelectData = append(resp.SelectData, tmp) | |||||
} | |||||
} | |||||
if notice != nil { | |||||
for _, v := range *notice { | |||||
tmp := md.ArticleCateList{ | |||||
Id: utils.IntToStr(v.Id), | |||||
Sort: utils.IntToStr(v.Sort), | |||||
IsShow: utils.IntToStr(v.IsShow), | |||||
Pid: utils.IntToStr(v.Pid), | |||||
Name: v.Name, | |||||
} | |||||
noticeList = append(noticeList, tmp) | |||||
} | |||||
} | |||||
resp.List = noticeList | |||||
e.OutSuc(c, resp, nil) | |||||
return | |||||
} | |||||
func CateSave(c *gin.Context) { | |||||
var req *md.ArticleCateSaveReq | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
var data = new(model.ArticleCate) | |||||
if utils.StrToInt(req.Id) > 0 { | |||||
NewArticleCateDb := implement.NewArticleCateDb(db.Db) | |||||
notice, _ := NewArticleCateDb.GetArticleCate(req.Id) | |||||
if notice == nil { | |||||
e.OutErr(c, 400, e.NewErr(400, "记录不存在")) | |||||
return | |||||
} | |||||
data = notice | |||||
} else { | |||||
db.Db.Insert(data) | |||||
} | |||||
data.Name = req.Name | |||||
data.Sort = utils.StrToInt(req.Sort) | |||||
data.Pid = utils.StrToInt(req.Pid) | |||||
data.IsShow = utils.StrToInt(req.IsShow) | |||||
db.Db.Where("id=?", data.Id).Update(data) | |||||
e.OutSuc(c, "success", nil) | |||||
return | |||||
} | |||||
func CateDel(c *gin.Context) { | |||||
var req *md.ArticleCateDelReq | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
db.Db.In("id", req.Id).Delete(&model.ArticleCate{}) | |||||
e.OutSuc(c, "success", nil) | |||||
return | |||||
} |
@@ -0,0 +1,108 @@ | |||||
package article | |||||
import ( | |||||
"applet/app/db" | |||||
"applet/app/e" | |||||
"applet/app/md" | |||||
"applet/app/svc" | |||||
"applet/app/utils" | |||||
"code.fnuoos.com/EggPlanet/egg_models.git/src/implement" | |||||
"code.fnuoos.com/EggPlanet/egg_models.git/src/model" | |||||
"github.com/gin-gonic/gin" | |||||
"time" | |||||
) | |||||
func List(c *gin.Context) { | |||||
var req *md.ArticleListReq | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
var resp md.ArticleListResp | |||||
noticeList := make([]md.ArticleList, 0) | |||||
NewArticleDb := implement.NewArticleDb(db.Db) | |||||
notice, total, _ := NewArticleDb.FindArticleAndTotal(req.Page, req.Limit, "", "") | |||||
resp.Total = total | |||||
resp.SelectData = make([]map[string]interface{}, 0) | |||||
NewArticleCateDb := implement.NewArticleCateDb(db.Db) | |||||
pid, _ := NewArticleCateDb.FindArticleCate("1", "100", "0") | |||||
if pid != nil { | |||||
for _, v := range *pid { | |||||
list := make([]map[string]string, 0) | |||||
tmp := map[string]interface{}{ | |||||
"name": v.Name, "value": utils.IntToStr(v.Id), "list": list, | |||||
} | |||||
cate, _ := NewArticleCateDb.FindArticleCate("1", "1000", utils.IntToStr(v.Id)) | |||||
if cate != nil { | |||||
for _, v1 := range *cate { | |||||
tmp1 := map[string]string{ | |||||
"name": v1.Name, "value": utils.IntToStr(v1.Id), | |||||
} | |||||
list = append(list, tmp1) | |||||
} | |||||
} | |||||
resp.SelectData = append(resp.SelectData, tmp) | |||||
} | |||||
} | |||||
if notice != nil { | |||||
for _, v := range *notice { | |||||
tmp := md.ArticleList{ | |||||
CateId: utils.IntToStr(v.CateId), | |||||
Title: v.Title, | |||||
Content: v.Content, | |||||
Cover: v.Cover, | |||||
CoverUrl: svc.GetOssUrl(v.Cover), | |||||
Id: utils.IntToStr(v.Id), | |||||
Sort: utils.IntToStr(v.Sort), | |||||
IsShow: utils.IntToStr(v.IsShow), | |||||
Pid: utils.IntToStr(v.Pid), | |||||
} | |||||
noticeList = append(noticeList, tmp) | |||||
} | |||||
} | |||||
resp.List = noticeList | |||||
e.OutSuc(c, resp, nil) | |||||
return | |||||
} | |||||
func Save(c *gin.Context) { | |||||
var req *md.ArticleSaveReq | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
var data = new(model.Article) | |||||
if utils.StrToInt(req.Id) > 0 { | |||||
NewArticleDb := implement.NewArticleDb(db.Db) | |||||
notice, _ := NewArticleDb.GetArticle(req.Id) | |||||
if notice == nil { | |||||
e.OutErr(c, 400, e.NewErr(400, "记录不存在")) | |||||
return | |||||
} | |||||
data = notice | |||||
} else { | |||||
data.CreatedAt = int(time.Now().Unix()) | |||||
db.Db.Insert(data) | |||||
} | |||||
data.UpdatedAt = int(time.Now().Unix()) | |||||
data.Title = req.Title | |||||
data.Cover = req.Cover | |||||
data.Content = req.Content | |||||
data.TypeId = utils.StrToInt(req.Pid) | |||||
data.CateId = utils.StrToInt(req.CateId) | |||||
data.Sort = utils.StrToInt(req.Sort) | |||||
data.Pid = utils.StrToInt(req.Pid) | |||||
data.IsShow = utils.StrToInt(req.IsShow) | |||||
db.Db.Where("id=?", data.Id).Update(data) | |||||
e.OutSuc(c, "success", nil) | |||||
return | |||||
} | |||||
func Del(c *gin.Context) { | |||||
var req *md.ArticleDelReq | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
db.Db.In("id", req.Id).Delete(&model.Article{}) | |||||
e.OutSuc(c, "success", nil) | |||||
return | |||||
} |
@@ -0,0 +1,159 @@ | |||||
package notice | |||||
import ( | |||||
"applet/app/db" | |||||
"applet/app/e" | |||||
"applet/app/md" | |||||
"applet/app/utils" | |||||
"applet/app/utils/cache" | |||||
"code.fnuoos.com/EggPlanet/egg_models.git/src/implement" | |||||
"code.fnuoos.com/EggPlanet/egg_models.git/src/model" | |||||
"encoding/json" | |||||
"github.com/360EntSecGroup-Skylar/excelize" | |||||
"github.com/gin-gonic/gin" | |||||
"time" | |||||
) | |||||
func AliyunSmsFilePhone(c *gin.Context) { | |||||
file, _, err := c.Request.FormFile("file") | |||||
if err != nil { | |||||
e.OutErr(c, 400, e.NewErr(400, "上传文件错误")) | |||||
return | |||||
} | |||||
// 打开上传的文件 | |||||
xlsx, err := excelize.OpenReader(file) | |||||
if err != nil { | |||||
e.OutErr(c, 400, e.NewErr(400, "打开文件失败")) | |||||
return | |||||
} | |||||
rows := xlsx.GetRows(xlsx.GetSheetName(xlsx.GetActiveSheetIndex())) | |||||
phone := make([]string, 0) | |||||
for i, row := range rows { | |||||
// 去掉第一行是excel表头部分 | |||||
if i == 0 { | |||||
continue | |||||
} | |||||
phone = append(phone, row[0]) | |||||
} | |||||
res := map[string]interface{}{ | |||||
"phone": phone, | |||||
} | |||||
e.OutSuc(c, res, nil) | |||||
return | |||||
} | |||||
func AliyunSmsBase(c *gin.Context) { | |||||
SelectData := []map[string]string{ | |||||
{"name": "签到提醒", "value": "sign", "temple_id": "", "is_show": "1"}, | |||||
{"name": "注销提醒", "value": "user_delete", "temple_id": "", "is_show": "1"}, | |||||
{"name": "提现到账提醒", "value": "withdraw", "temple_id": "", "is_show": "1"}, | |||||
{"name": "X天未登录提醒", "value": "login", "temple_id": "", "is_show": "1"}, | |||||
{"name": "升级提醒", "value": "update", "temple_id": "", "is_show": "1"}, | |||||
} | |||||
redisConn := cache.GetPool().Get() | |||||
sysCfgDb := implement.NewSysCfgDb(db.Db, redisConn) | |||||
aliyunSmsNotice := sysCfgDb.SysCfgGetWithDb("aliyun_sms_notice") | |||||
notice := make([]map[string]string, 0) | |||||
json.Unmarshal([]byte(aliyunSmsNotice), ¬ice) | |||||
for k, v := range SelectData { | |||||
for _, v1 := range notice { | |||||
if v1["value"] == v["value"] { | |||||
SelectData[k]["temple_id"] = v1["temple_id"] | |||||
SelectData[k]["temple_id"] = v1["is_show"] | |||||
} | |||||
} | |||||
} | |||||
e.OutSuc(c, SelectData, nil) | |||||
return | |||||
} | |||||
func AliyunSmsSave(c *gin.Context) { | |||||
var req []map[string]string | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
redisConn := cache.GetPool().Get() | |||||
sysCfgDb := implement.NewSysCfgDb(db.Db, redisConn) | |||||
sysCfgDb.SysCfgUpdate("aliyun_sms_notice", utils.SerializeStr(req)) | |||||
e.OutSuc(c, "success", nil) | |||||
return | |||||
} | |||||
func AliyunSmsSaleBase(c *gin.Context) { | |||||
redisConn := cache.GetPool().Get() | |||||
sysCfgDb := implement.NewSysCfgDb(db.Db, redisConn) | |||||
aliyunSmsNotice := sysCfgDb.SysCfgGetWithDb("aliyun_sms_sale_code") | |||||
res := map[string]string{ | |||||
"aliyun_sms_sale_code": aliyunSmsNotice, | |||||
} | |||||
e.OutSuc(c, res, nil) | |||||
return | |||||
} | |||||
func AliyunSmsSaleSave(c *gin.Context) { | |||||
var req map[string]string | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
redisConn := cache.GetPool().Get() | |||||
sysCfgDb := implement.NewSysCfgDb(db.Db, redisConn) | |||||
sysCfgDb.SysCfgUpdate("aliyun_sms_sale_code", req["aliyun_sms_sale_code"]) | |||||
e.OutSuc(c, "success", nil) | |||||
return | |||||
} | |||||
func AliyunSmsPushList(c *gin.Context) { | |||||
var req *md.NoticeAliyunSmsListReq | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
var resp md.NoticeAliyunSmsPushListResp | |||||
noticeList := make([]md.NoticeAliyunSmsPushList, 0) | |||||
resp.TargetData = []map[string]string{ | |||||
{"name": "全部会员", "value": "0"}, | |||||
{"name": "指定会员", "value": "1"}, | |||||
{"name": "指定等级", "value": "2"}, | |||||
} | |||||
NewAliyunSmsRecordDb := implement.NewAliyunSmsRecordDb(db.Db) | |||||
notice, total, _ := NewAliyunSmsRecordDb.FindAliyunSmsRecordAndTotal(req.Page, req.Limit, "") | |||||
resp.Total = total | |||||
if notice != nil { | |||||
for _, v := range *notice { | |||||
tmp := md.NoticeAliyunSmsPushList{ | |||||
Id: utils.IntToStr(v.Id), | |||||
Title: v.Title, | |||||
Content: v.Content, | |||||
Target: v.Target, | |||||
State: utils.IntToStr(v.State), | |||||
} | |||||
noticeList = append(noticeList, tmp) | |||||
} | |||||
} | |||||
resp.List = noticeList | |||||
e.OutSuc(c, resp, nil) | |||||
return | |||||
} | |||||
func AliyunSmsPushSave(c *gin.Context) { | |||||
var req *md.NoticeAliyunSmsPushSaveReq | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
if utils.StrToInt(req.Id) > 0 { | |||||
} else { | |||||
data := &model.AliyunSmsRecord{ | |||||
Platform: "all", | |||||
Target: req.Target, | |||||
Phone: utils.SerializeStr(req.PhoneList), | |||||
Level: utils.StrToInt(req.Level), | |||||
Title: req.Title, | |||||
Content: req.Content, | |||||
CreateAt: time.Now(), | |||||
UpdateAt: time.Now(), | |||||
} | |||||
db.Db.Insert(data) | |||||
} | |||||
e.OutSuc(c, "success", nil) | |||||
return | |||||
} |
@@ -0,0 +1,162 @@ | |||||
package notice | |||||
import ( | |||||
"applet/app/db" | |||||
"applet/app/e" | |||||
"applet/app/md" | |||||
"applet/app/utils" | |||||
"code.fnuoos.com/EggPlanet/egg_models.git/src/implement" | |||||
"code.fnuoos.com/EggPlanet/egg_models.git/src/model" | |||||
"github.com/gin-gonic/gin" | |||||
"time" | |||||
) | |||||
func List(c *gin.Context) { | |||||
var req *md.NoticeListReq | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
var resp md.NoticeListResp | |||||
noticeList := make([]md.NoticeList, 0) | |||||
NewJpushNoticeDb := implement.NewJpushNoticeDb(db.Db) | |||||
notice, total, _ := NewJpushNoticeDb.FindJpushNoticeAndTotal(req.Page, req.Limit, "") | |||||
resp.Total = total | |||||
resp.ChangeData = []map[string]string{ | |||||
{"name": "昵称", "value": "{昵称}"}, | |||||
{"name": "手机号", "value": "{手机号}"}, | |||||
{"name": "金额", "value": "{金额}"}, | |||||
{"name": "时间", "value": "{时间}"}, | |||||
{"name": "未登陆天数", "value": "{未登陆天数}"}, | |||||
{"name": "升级后等级", "value": "{升级后等级}"}, | |||||
} | |||||
resp.SelectData = []map[string]string{ | |||||
{"name": "签到提醒", "value": "sign"}, | |||||
{"name": "提现到账提醒", "value": "withdraw"}, | |||||
{"name": "X天未登录提醒", "value": "login"}, | |||||
{"name": "升级提醒", "value": "update"}, | |||||
} | |||||
if notice != nil { | |||||
for _, v := range *notice { | |||||
tmp := md.NoticeList{ | |||||
Id: utils.IntToStr(v.Id), | |||||
Title: v.Title, | |||||
Content: v.Content, | |||||
Type: v.Type, | |||||
} | |||||
noticeList = append(noticeList, tmp) | |||||
} | |||||
} | |||||
resp.List = noticeList | |||||
e.OutSuc(c, resp, nil) | |||||
return | |||||
} | |||||
func Save(c *gin.Context) { | |||||
var req *md.NoticeSaveReq | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
var data = new(model.JpushNotice) | |||||
if utils.StrToInt(req.Id) > 0 { | |||||
NewJpushNoticeDb := implement.NewJpushNoticeDb(db.Db) | |||||
notice, _ := NewJpushNoticeDb.GetJpushNotice(req.Id) | |||||
if notice == nil { | |||||
e.OutErr(c, 400, e.NewErr(400, "记录不存在")) | |||||
return | |||||
} | |||||
data = notice | |||||
} else { | |||||
data.CreateAt = time.Now() | |||||
db.Db.Insert(data) | |||||
} | |||||
data.UpdateAt = time.Now() | |||||
data.Content = req.Content | |||||
data.Type = req.Type | |||||
data.Title = req.Title | |||||
db.Db.Where("id=?", data.Id).Update(data) | |||||
e.OutSuc(c, "success", nil) | |||||
return | |||||
} | |||||
func Del(c *gin.Context) { | |||||
var req *md.NoticeDelReq | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
db.Db.In("id", req.Id).Delete(&model.JpushNotice{}) | |||||
e.OutSuc(c, "success", nil) | |||||
return | |||||
} | |||||
func PushList(c *gin.Context) { | |||||
var req *md.NoticeListReq | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
var resp md.NoticePushListResp | |||||
noticeList := make([]md.NoticePushList, 0) | |||||
resp.PlatformData = []map[string]string{ | |||||
{"name": "全平台", "value": "all"}, | |||||
{"name": "安卓", "value": "android"}, | |||||
{"name": "iOS", "value": "ios"}, | |||||
} | |||||
resp.TargetData = []map[string]string{ | |||||
{"name": "全部会员", "value": "0"}, | |||||
{"name": "指定会员", "value": "1"}, | |||||
{"name": "指定等级", "value": "2"}, | |||||
} | |||||
NewJpushRecordDb := implement.NewJpushRecordDb(db.Db) | |||||
notice, total, _ := NewJpushRecordDb.FindJpushRecordAndTotal(req.Page, req.Limit, "") | |||||
resp.Total = total | |||||
if notice != nil { | |||||
for _, v := range *notice { | |||||
tmp := md.NoticePushList{ | |||||
Id: utils.IntToStr(v.Id), | |||||
Title: v.Title, | |||||
Content: v.Content, | |||||
Platform: v.Platform, | |||||
Target: v.Target, | |||||
SendType: utils.IntToStr(v.SendType), | |||||
State: utils.IntToStr(v.State), | |||||
} | |||||
if v.SendStartTime.IsZero() == false { | |||||
tmp.SendStartTime = v.SendStartTime.Format("2006-01-02 15:04:05") | |||||
} | |||||
if v.SendEndTime.IsZero() == false { | |||||
tmp.SendEndTime = v.SendEndTime.Format("2006-01-02 15:04:05") | |||||
} | |||||
noticeList = append(noticeList, tmp) | |||||
} | |||||
} | |||||
resp.List = noticeList | |||||
e.OutSuc(c, resp, nil) | |||||
return | |||||
} | |||||
func PushSave(c *gin.Context) { | |||||
var req *md.NoticePushSaveReq | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
if utils.StrToInt(req.Id) > 0 { | |||||
} else { | |||||
data := &model.JpushRecord{ | |||||
Platform: req.Platform, | |||||
Target: req.Target, | |||||
UserId: utils.SerializeStr(req.UserList), | |||||
Level: utils.StrToInt(req.Level), | |||||
Title: req.Title, | |||||
Content: req.Content, | |||||
SendType: utils.StrToInt(req.SendType), | |||||
SendStartTime: utils.TimeParseStd(req.SendStartTime), | |||||
SendEndTime: utils.TimeParseStd(req.SendStartTime), | |||||
CreateAt: time.Now(), | |||||
UpdateAt: time.Now(), | |||||
} | |||||
db.Db.Insert(data) | |||||
} | |||||
e.OutSuc(c, "success", nil) | |||||
return | |||||
} |
@@ -0,0 +1,18 @@ | |||||
package svc | |||||
import ( | |||||
"applet/app/db" | |||||
"applet/app/utils/cache" | |||||
"code.fnuoos.com/EggPlanet/egg_models.git/src/implement" | |||||
"strings" | |||||
) | |||||
func GetOssUrl(img string) string { | |||||
redisConn := cache.GetPool().Get() | |||||
sysCfgDb := implement.NewSysCfgDb(db.Db, redisConn) | |||||
sysCfg := sysCfgDb.SysCfgFindWithDb("file_bucket_scheme", "file_bucket_host") | |||||
if strings.Contains(img, "http") == false && img != "" { | |||||
img = sysCfg["file_bucket_scheme"] + "://" + sysCfg["file_bucket_host"] + img | |||||
} | |||||
return img | |||||
} |
@@ -33,7 +33,7 @@ require ( | |||||
) | ) | ||||
require ( | require ( | ||||
code.fnuoos.com/EggPlanet/egg_models.git v0.2.1-0.20241125113426-87a1c00e0545 | |||||
code.fnuoos.com/EggPlanet/egg_models.git v0.2.1-0.20241126025500-fff8f11fcef5 | |||||
code.fnuoos.com/EggPlanet/egg_system_rules.git v0.0.4-0.20241125081706-0915be3f4144 | code.fnuoos.com/EggPlanet/egg_system_rules.git v0.0.4-0.20241125081706-0915be3f4144 | ||||
code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.1-0.20241118083738-0f22da9ba0be | code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.1-0.20241118083738-0f22da9ba0be | ||||
code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.5 | code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.5 | ||||
@@ -48,6 +48,7 @@ require ( | |||||
require ( | require ( | ||||
filippo.io/edwards25519 v1.1.0 // indirect | filippo.io/edwards25519 v1.1.0 // indirect | ||||
github.com/360EntSecGroup-Skylar/excelize v1.4.1 // indirect | |||||
github.com/BurntSushi/toml v1.4.0 // indirect | github.com/BurntSushi/toml v1.4.0 // indirect | ||||
github.com/KyleBanks/depth v1.2.1 // indirect | github.com/KyleBanks/depth v1.2.1 // indirect | ||||
github.com/PuerkitoBio/goquery v1.9.2 // indirect | github.com/PuerkitoBio/goquery v1.9.2 // indirect | ||||
@@ -83,6 +84,7 @@ require ( | |||||
github.com/mattn/go-isatty v0.0.20 // indirect | github.com/mattn/go-isatty v0.0.20 // indirect | ||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect | github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect | ||||
github.com/modern-go/reflect2 v1.0.2 // indirect | github.com/modern-go/reflect2 v1.0.2 // indirect | ||||
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect | |||||
github.com/nxadm/tail v1.4.8 // indirect | github.com/nxadm/tail v1.4.8 // indirect | ||||
github.com/pelletier/go-toml/v2 v2.2.1 // indirect | github.com/pelletier/go-toml/v2 v2.2.1 // indirect | ||||
github.com/pkg/errors v0.9.1 // indirect | github.com/pkg/errors v0.9.1 // indirect | ||||