fix 修改审批中画展包的逻辑

main
耿阳 2 years ago
parent aec05feaea
commit d29b55b318

@ -7,7 +7,8 @@ RUN go env -w GO111MODULE=on && \
WORKDIR /app WORKDIR /app
COPY . /app/fonchain-approval
COPY fonchain-approval /app/fonchain-approval
WORKDIR /app/fonchain-approval WORKDIR /app/fonchain-approval
RUN go mod download RUN go mod download

File diff suppressed because it is too large Load Diff

@ -28,13 +28,19 @@ service Approval {
rpc UpdateType(CreateTypeRequest) returns (TypeResponse) {}; rpc UpdateType(CreateTypeRequest) returns (TypeResponse) {};
rpc AllType(CommonRequest) returns (AllTypeResponse) {}; rpc AllType(CommonRequest) returns (AllTypeResponse) {};
rpc RemoveType(RemoveRequest) returns (StatusResponse) {}; rpc RemoveType(RemoveRequest) returns (StatusResponse) {};
}
message KeyInfo {
string ApprovalKey = 1 [json_name = "approvalKey"];
string ApprovalName = 2 [json_name = "approvalName"];
string ApprovalType = 3 [json_name = "approvalType"];
string ApprovalValue = 4 [json_name = "approvalValue"];
} }
message UpdateEhApplyIDRequest { message UpdateEhApplyIDRequest {
string Domain = 1 [json_name = "domain"]; string Domain = 1 [json_name = "domain"];
uint64 ApprovalID = 2 [json_name = "approvalID"]; uint64 ApprovalID = 2 [json_name = "approvalID"];
uint64 ApplyId = 3 [json_name = "applyId"]; string ApplyId = 3 [json_name = "applyId"];
} }
message UpdateEhApplyIDResponse { message UpdateEhApplyIDResponse {
@ -73,6 +79,8 @@ message CreateTypeRequest {
string Title = 3 [json_name = "title"]; string Title = 3 [json_name = "title"];
string Remark = 5 [json_name = "remark"]; string Remark = 5 [json_name = "remark"];
string KeyWord = 6 [json_name = "keyWord"]; string KeyWord = 6 [json_name = "keyWord"];
repeated KeyInfo KeyInfos = 7 [json_name = "keyInfos"];
uint64 IsCustom = 8 [json_name = "isCustom"];
} }
message TypeResponse { message TypeResponse {
@ -175,10 +183,11 @@ message ApprovalExhibition {
uint64 ExhibitionID =2 [json_name = "exhibitionID"]; uint64 ExhibitionID =2 [json_name = "exhibitionID"];
uint64 ApprovalID =3 [json_name = "approvalID"]; uint64 ApprovalID =3 [json_name = "approvalID"];
string PackageName =4 [json_name = "packageName"]; string PackageName =4 [json_name = "packageName"];
uint64 PackageID =5 [json_name = "packageID"]; string PackageID =5 [json_name = "packageID"];
uint64 PackageSize =6 [json_name = "packageSize"]; uint64 PackageSize =6 [json_name = "packageSize"];
string PackageNumber =7 [json_name = "packageNumber"]; string PackageNumber =7 [json_name = "packageNumber"];
string Address =8 [json_name = "address"]; string Address =8 [json_name = "address"];
string ShowDate =9 [json_name = "showDate"];
} }
message Exhibition { message Exhibition {
@ -188,7 +197,7 @@ message Exhibition {
uint64 PidApprovalID =4 [json_name = "pidApprovalID"]; uint64 PidApprovalID =4 [json_name = "pidApprovalID"];
repeated ApprovalExhibition ApprovalExhibitions = 5 [json_name = "approvalExhibitions"]; repeated ApprovalExhibition ApprovalExhibitions = 5 [json_name = "approvalExhibitions"];
uint64 Num = 6 [json_name = "num"]; uint64 Num = 6 [json_name = "num"];
uint64 ApplyID = 7 [json_name = "applyID"]; string ApplyID = 7 [json_name = "applyID"];
} }
message CreateRequest { message CreateRequest {
@ -215,6 +224,8 @@ message CreateRequest {
uint64 Level = 23 [json_name = "level"]; uint64 Level = 23 [json_name = "level"];
uint64 NowLevel = 24 [json_name = "nowLevel"]; uint64 NowLevel = 24 [json_name = "nowLevel"];
string CreatedAt = 25 [json_name = "createdAt"]; string CreatedAt = 25 [json_name = "createdAt"];
repeated KeyInfo CustomizeInfo = 26 [json_name = "customizeInfo"];
uint64 IsCustom = 27 [json_name = "isCustom"];
} }
message WorkFlow { message WorkFlow {
@ -292,6 +303,8 @@ message SettingRequest {
repeated CopyUser CopyUsers = 6 [json_name = "copyUsers"]; repeated CopyUser CopyUsers = 6 [json_name = "copyUsers"];
repeated ApprovalUser ApprovalUsers = 9 [json_name = "approvalUsers"]; repeated ApprovalUser ApprovalUsers = 9 [json_name = "approvalUsers"];
string Domain = 10 [json_name = "domain"]; string Domain = 10 [json_name = "domain"];
repeated KeyInfo CustomizeInfo = 11 [json_name = "customizeInfo"];
uint64 IsCustom = 12 [json_name = "isCustom"];
} }
message DetailSettingRequest { message DetailSettingRequest {

@ -16,6 +16,9 @@ var _ = proto.Marshal
var _ = fmt.Errorf var _ = fmt.Errorf
var _ = math.Inf var _ = math.Inf
func (this *KeyInfo) Validate() error {
return nil
}
func (this *UpdateEhApplyIDRequest) Validate() error { func (this *UpdateEhApplyIDRequest) Validate() error {
return nil return nil
} }
@ -38,6 +41,13 @@ func (this *CommonRequest) Validate() error {
return nil return nil
} }
func (this *CreateTypeRequest) Validate() error { func (this *CreateTypeRequest) Validate() error {
for _, item := range this.KeyInfos {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("KeyInfos", err)
}
}
}
return nil return nil
} }
func (this *TypeResponse) Validate() error { func (this *TypeResponse) Validate() error {
@ -188,6 +198,13 @@ func (this *CreateRequest) Validate() error {
} }
} }
} }
for _, item := range this.CustomizeInfo {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("CustomizeInfo", err)
}
}
}
return nil return nil
} }
func (this *WorkFlow) Validate() error { func (this *WorkFlow) Validate() error {
@ -235,6 +252,13 @@ func (this *SettingRequest) Validate() error {
} }
} }
} }
for _, item := range this.CustomizeInfo {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("CustomizeInfo", err)
}
}
}
return nil return nil
} }
func (this *DetailSettingRequest) Validate() error { func (this *DetailSettingRequest) Validate() error {

@ -1,13 +1,16 @@
[system]
mode = dev #正式prod #测试dev
[mysql] [mysql]
Db = mysql Db = mysql
DbHost = 106.13.166.247 DbHost = mysql
DbPort = 3306 DbPort = 3306
DbUser = admin DbUser = root
DbPassWord = EgdNF8 DbPassWord = 123456
DbName = fontree-approval DbName = fontree-approval
[redis] [redis]
RedisDB = RedisDB =
RedisAddr = redis:6379 RedisAddr = redis:6379
RedisPW = RedisPW =
RedisDBNAme = RedisDBNAme =

@ -2,7 +2,7 @@ dubbo:
registries: registries:
demoZK: demoZK:
protocol: zookeeper protocol: zookeeper
address: ${Nacos_host}:2181 address: zookeeper:2181
protocols: protocols:
triple: triple:
name: tri name: tri

@ -1,3 +1,6 @@
[system]
mode = dev #正式prod #测试dev
[mysql] [mysql]
Db = mysql Db = mysql
DbHost = 127.0.0.1 DbHost = 127.0.0.1
@ -10,4 +13,4 @@ DbName = fontree-approval
RedisDB = RedisDB =
RedisAddr = 127.0.0.1:6379 RedisAddr = 127.0.0.1:6379
RedisPW = RedisPW =
RedisDBNAme = RedisDBNAme =

@ -3,8 +3,8 @@ mode = prod #正式prod #测试dev
[mysql] [mysql]
Db = mysql Db = mysql
DbHost = 172.16.100.22 DbHost = mysql
DbPort = 9005 DbPort = 3306
DbUser = fonchain DbUser = fonchain
DbPassWord = C250PflXIWv2SQm DbPassWord = C250PflXIWv2SQm
DbName = fontree-approval DbName = fontree-approval

@ -2,7 +2,7 @@ dubbo:
registries: registries:
demoZK: demoZK:
protocol: zookeeper protocol: zookeeper
address: 172.16.100.22:2181 address: zookeeper:2181
protocols: protocols:
triple: triple:
name: tri name: tri

@ -1,3 +1,6 @@
[system]
mode = prod #正式prod #测试dev
[mysql] [mysql]
Db = mysql Db = mysql
DbHost = mysql DbHost = mysql
@ -10,4 +13,4 @@ DbName = fontree-approval
RedisDB = RedisDB =
RedisAddr = redis:6379 RedisAddr = redis:6379
RedisPW = RedisPW =
RedisDBNAme = RedisDBNAme =

@ -2,7 +2,7 @@ dubbo:
registries: registries:
demoZK: demoZK:
protocol: zookeeper protocol: zookeeper
address: zookeeper:2181 address: 121.229.45.214:9004
protocols: protocols:
triple: triple:
name: tri name: tri

@ -48,6 +48,24 @@ func IntersectArrayInt(a []int, b []int) []int {
return inter return inter
} }
func IntersectArrayString(a []string, b []string) []string {
var inter []string
mp := make(map[string]bool)
for _, s := range a {
if _, ok := mp[s]; !ok {
mp[s] = true
}
}
for _, s := range b {
if _, ok := mp[s]; ok {
inter = append(inter, s)
}
}
return inter
}
func IntersectArrayUint64(a []uint64, b []uint64) []uint64 { func IntersectArrayUint64(a []uint64, b []uint64) []uint64 {
var inter []uint64 var inter []uint64
mp := make(map[uint64]bool) mp := make(map[uint64]bool)
@ -124,6 +142,26 @@ func DiffArrayUint(a []uint, b []uint) []uint {
return diffArray return diffArray
} }
//a中删除在b中的
func DiffArrayString(a []string, b []string) []string {
var diffArray []string
temp := map[string]struct{}{}
for _, val := range b {
if _, ok := temp[val]; !ok {
temp[val] = struct{}{}
}
}
for _, val := range a {
if _, ok := temp[val]; !ok {
diffArray = append(diffArray, val)
}
}
return diffArray
}
func DiffArrayUint64(a []uint64, b []uint64) []uint64 { func DiffArrayUint64(a []uint64, b []uint64) []uint64 {
var diffArray []uint64 var diffArray []uint64
temp := map[uint64]struct{}{} temp := map[uint64]struct{}{}

@ -0,0 +1,43 @@
package collection
import (
"fmt"
"testing"
)
func TestCodetInfo(t *testing.T) {
var first = []string{"a", "b", "c"}
var second = []string{"a", "b", "c"}
result := DiffArrayString(first, second)
result2 := IntersectArrayString(first, second)
fmt.Println(result, result2)
if len(result) != 0 {
t.Errorf("验证错误 ")
}
second = []string{}
result = DiffArrayString(first, second)
result2 = IntersectArrayString(first, second)
fmt.Println(result, result2)
if len(result) != 3 {
t.Errorf("验证错误 ")
}
second = []string{"a"}
result = DiffArrayString(first, second)
result2 = IntersectArrayString(first, second)
fmt.Println(result, result2)
if len(result) != 2 {
t.Errorf("验证错误 ")
}
first = []string{}
result = DiffArrayString(first, second)
result2 = IntersectArrayString(first, second)
fmt.Println(result, result2)
if len(result) != 0 {
t.Errorf("验证错误 ")
}
}

@ -4,6 +4,11 @@ var (
JWTSecret = []byte("asdfqwer1234") JWTSecret = []byte("asdfqwer1234")
) )
const (
Is_IsCustom_Yes = 1
Is_IsCustom_No = 2
)
const ( const (
Success = 200 Success = 200
Error = 500 Error = 500

@ -1,6 +1,8 @@
package model package model
import ( import (
"database/sql/driver"
"encoding/json"
"errors" "errors"
"fmt" "fmt"
"github.com/fonchain_enterprise/fonchain-approval/api/approval" "github.com/fonchain_enterprise/fonchain-approval/api/approval"
@ -11,6 +13,14 @@ import (
"time" "time"
) )
type KeyInfo struct {
ApprovalKey string
ApprovalName string
ApprovalType string
ApprovalValue string
}
type KeyInfos []KeyInfo
// Approval 审批 // Approval 审批
type Approval struct { type Approval struct {
ID uint64 `gorm:"primaryKey;column:id" json:"id"` ID uint64 `gorm:"primaryKey;column:id" json:"id"`
@ -28,6 +38,7 @@ type Approval struct {
NowUserId uint64 `gorm:"column:now_user_id" json:"nowUserId"` NowUserId uint64 `gorm:"column:now_user_id" json:"nowUserId"`
NowUserName string `gorm:"column:now_user_name" json:"nowUserName"` NowUserName string `gorm:"column:now_user_name" json:"nowUserName"`
Content string `gorm:"column:content" json:"content"` Content string `gorm:"column:content" json:"content"`
ValueJson KeyInfos `gorm:"type:json;column:value_json;default:null;comment:自定义信息" json:"valueJson"`
Reply string `gorm:"column:reply" json:"reply"` Reply string `gorm:"column:reply" json:"reply"`
Domain *string `gorm:"column:domain" json:"domain"` Domain *string `gorm:"column:domain" json:"domain"`
Show *Show `gorm:"foreignKey:ApprovalID" json:"Show"` Show *Show `gorm:"foreignKey:ApprovalID" json:"Show"`
@ -37,6 +48,17 @@ type Approval struct {
ApprovalWorkFlows []*ApprovalWorkFlow `gorm:"foreignKey:ApprovalID" json:"ApprovalWorkFlows"` ApprovalWorkFlows []*ApprovalWorkFlow `gorm:"foreignKey:ApprovalID" json:"ApprovalWorkFlows"`
} }
func (j *KeyInfos) Scan(src interface{}) error {
return json.Unmarshal(src.([]byte), j)
}
func (j KeyInfos) Value() (driver.Value, error) {
v, err := json.Marshal(j)
return string(v), err
}
const ( const (
TypeContent = "content" TypeContent = "content"
TypeWork = "work" TypeWork = "work"
@ -142,10 +164,13 @@ func StoreApproval(in *approval.CreateRequest) (*Approval, error) {
err := DB.Transaction(func(tx *gorm.DB) error { err := DB.Transaction(func(tx *gorm.DB) error {
fmt.Println(0)
setting, terr := GetApprovalSettingFromKeyWord(in.Domain, in.Type) setting, terr := GetApprovalSettingFromKeyWord(in.Domain, in.Type)
if terr != nil { if terr != nil {
return errors.New("抄送人没有配置") return errors.New("抄送人没有配置")
} }
fmt.Println(1)
// 保存基本信息 // 保存基本信息
entity = &Approval{ entity = &Approval{
@ -156,6 +181,7 @@ func StoreApproval(in *approval.CreateRequest) (*Approval, error) {
ApprovalUsers: setting.ApprovalUsers, ApprovalUsers: setting.ApprovalUsers,
Type: in.Type, Type: in.Type,
Content: in.Content, Content: in.Content,
ValueJson: ToKeyInfos(in.CustomizeInfo),
Status: StatusDoing, Status: StatusDoing,
Level: uint8(len(setting.ApprovalUsers)), Level: uint8(len(setting.ApprovalUsers)),
NowLevel: 1, NowLevel: 1,
@ -163,19 +189,27 @@ func StoreApproval(in *approval.CreateRequest) (*Approval, error) {
NowUserName: setting.ApprovalUsers[0].Name, NowUserName: setting.ApprovalUsers[0].Name,
} }
fmt.Println(3)
if err := DB.Create(&entity).Error; err != nil { if err := DB.Create(&entity).Error; err != nil {
return err return err
} }
// 不同类型保存不同的结构体 // 不同类型保存不同的结构体
fmt.Println(41, entity)
err := entity.SaveContent(in) err := entity.SaveContent(in)
fmt.Println(4)
if err != nil { if err != nil {
return err return err
} }
fmt.Println(5)
return BatchSave(setting.ApprovalUsers, entity.ID) return BatchSave(setting.ApprovalUsers, entity.ID)
}) })
fmt.Println("nil", entity)
fmt.Println("nil", entity.ID)
return entity, err return entity, err
@ -239,6 +273,10 @@ func UpdateApproval(in *approval.CreateRequest) (*Approval, error) {
Content: in.Content, Content: in.Content,
} }
if entity.Status == StatusFail {
upEntity.Status = StatusDoing
}
if err := DB.Where(&Approval{ID: in.ID}).Updates(&upEntity).Error; err != nil { if err := DB.Where(&Approval{ID: in.ID}).Updates(&upEntity).Error; err != nil {
return err return err
} }

@ -7,45 +7,21 @@ import (
// ApprovalExhibition 绑定的画展包 // ApprovalExhibition 绑定的画展包
type ApprovalExhibition struct { type ApprovalExhibition struct {
ID uint64 `gorm:"primaryKey;column:id" json:"id"` // ID ID uint64 `gorm:"primaryKey;column:id" json:"id"` // ID
DeletedAt soft_delete.DeletedAt `gorm:"column:deleted_at" json:"deletedAt"` // 删除时间 DeletedAt soft_delete.DeletedAt `gorm:"column:deleted_at" json:"deletedAt"` // 删除时间
CreatedAt time.Time `gorm:"column:created_at" json:"createdAt"` // 创建时间 CreatedAt time.Time `gorm:"column:created_at" json:"createdAt"` // 创建时间
UpdatedAt time.Time `gorm:"column:updated_at" json:"updatedAt"` // 更新时间 UpdatedAt time.Time `gorm:"column:updated_at" json:"updatedAt"` // 更新时间
ApprovalID uint64 `gorm:"column:approval_id" json:"approvalId"` // 申请的id ApprovalID uint64 `gorm:"column:approval_id" json:"approvalId"` // 申请的id
ExhibitionID uint64 `gorm:"column:exhibition_id" json:"exhibitionId"` // 画展包的id ExhibitionID uint64 `gorm:"column:exhibition_id" json:"exhibitionId"` // 画展包的id
PackageName string `gorm:"column:package_name" json:"PackageName"` // 作品名称 PackageName string `gorm:"column:package_name" json:"PackageName"` // 作品名称
PackageID uint64 `gorm:"column:package_id" json:"packageID"` // 作品类型id PackageID string `gorm:"size:64;column:package_id;default:''" json:"packageID"` // 作品类型id
PackageSize uint64 `gorm:"column:package_size" json:"PackageSize"` // 平尺数 PackageSize uint64 `gorm:"column:package_size" json:"PackageSize"` // 平尺数
PackageNumber string `gorm:"column:package_number" json:"packageNumber"` // 序号 PackageNumber string `gorm:"column:package_number" json:"packageNumber"` // 序号
Address string `gorm:"column:address" json:"Address"` // 地点 Address string `gorm:"column:address" json:"Address"` // 地点
ShowDate string `gorm:"type:varchar(10);default:'';column:show_date" json:"ShowDate"` // 位置
} }
// TableName get sql table name.获取数据库表名 // TableName get sql table name.获取数据库表名
func (m *ApprovalExhibition) TableName() string { func (m *ApprovalExhibition) TableName() string {
return "approval_exhibition" return "approval_exhibition"
} }
// ApprovalExhibitionColumns get sql column name.获取数据库列名
var ApprovalExhibitionColumns = struct {
ID string
DeletedAt string
CreatedAt string
UpdatedAt string
ApprovalID string
ExhibitionID string
ExhibitionName string
ArtworkID string
ExhibitionSize string
ExhibitionNumber string
}{
ID: "id",
DeletedAt: "deleted_at",
CreatedAt: "created_at",
UpdatedAt: "updated_at",
ApprovalID: "approval_id",
ExhibitionID: "exhibition_id",
ExhibitionName: "exhibition_name",
ArtworkID: "artwork_id",
ExhibitionSize: "exhibition_size",
ExhibitionNumber: "exhibition_number",
}

@ -32,7 +32,9 @@ type ApprovalSetting struct {
KeyWord string `gorm:"column:key_word" json:"keyWord"` KeyWord string `gorm:"column:key_word" json:"keyWord"`
ApprovalUsers ApprovalUsers `gorm:"column:approval_users" json:"approvalUsers"` ApprovalUsers ApprovalUsers `gorm:"column:approval_users" json:"approvalUsers"`
CopyUsers CopyUsers `gorm:"column:copy_users" json:"copyUsers"` CopyUsers CopyUsers `gorm:"column:copy_users" json:"copyUsers"`
Domain string `gorm:"column:domain" json:"domain"` ApprovalType *ApprovalType `gorm:"foreignKey:key_word;references:key_word" json:"approvalType"`
Domain string `gorm:"column:domain" json:"domain"`
} }
// TableName get sql table name.获取数据库表名 // TableName get sql table name.获取数据库表名
@ -66,7 +68,7 @@ func GetApprovalSettingFromKeyWord(Domain, keyWord string) (setting *ApprovalSet
err = DB.Model(&ApprovalSetting{}).Where(&ApprovalSetting{KeyWord: keyWord, Domain: Domain}).First(&setting).Error err = DB.Model(&ApprovalSetting{}).Where(&ApprovalSetting{KeyWord: keyWord, Domain: Domain}).First(&setting).Error
return setting, nil return setting, err
} }
func FormatCopyUsers(copyUsers []*approval.CopyUser) CopyUsers { func FormatCopyUsers(copyUsers []*approval.CopyUser) CopyUsers {

@ -1,6 +1,8 @@
package model package model
import ( import (
"fmt"
"github.com/fonchain_enterprise/fonchain-approval/api/approval"
md52 "github.com/fonchain_enterprise/fonchain-approval/pkg/common/md5" md52 "github.com/fonchain_enterprise/fonchain-approval/pkg/common/md5"
"gorm.io/plugin/soft_delete" "gorm.io/plugin/soft_delete"
"math/rand" "math/rand"
@ -10,14 +12,16 @@ import (
// ApprovalType 审批类型 // ApprovalType 审批类型
type ApprovalType struct { type ApprovalType struct {
ID uint64 `gorm:"primaryKey;column:id" json:"id"` // ID ID uint64 `gorm:"primaryKey;column:id" json:"id"` // ID
DeletedAt soft_delete.DeletedAt `gorm:"column:deleted_at" json:"deletedAt"` // 删除时间 DeletedAt soft_delete.DeletedAt `gorm:"column:deleted_at" json:"deletedAt"` // 删除时间
CreatedAt time.Time `gorm:"column:created_at" json:"createdAt"` // 创建时间 CreatedAt time.Time `gorm:"column:created_at" json:"createdAt"` // 创建时间
UpdatedAt time.Time `gorm:"column:updated_at" json:"updatedAt"` // 更新时间 UpdatedAt time.Time `gorm:"column:updated_at" json:"updatedAt"` // 更新时间
KeyWord string `gorm:"column:key_word" json:"keyWord"` // 回复内容 KeyWord string `gorm:"column:key_word" json:"keyWord"` // 回复内容
Domain string `gorm:"column:domain" json:"domain"` // 回复内容 IsNormal uint64 `gorm:"type:tinyint;column:is_normal;default:1;comment:是否是自定义" json:"isNormal"` // 回复内容
Title string `gorm:"column:title" json:"title"` // 回复内容 KeyJson KeyInfos `gorm:"type:json;column:key_json;default:null;comment:自定义字段" json:"keyJson"`
Remark string `gorm:"column:remark" json:"remark"` // 回复内容 Domain string `gorm:"column:domain" json:"domain"` // 回复内容
Title string `gorm:"column:title" json:"title"` // 回复内容
Remark string `gorm:"column:remark" json:"remark"` // 回复内容
} }
// TableName get sql table name.获取数据库表名 // TableName get sql table name.获取数据库表名
@ -25,6 +29,14 @@ func (m *ApprovalType) TableName() string {
return "approval_type" return "approval_type"
} }
var TypeMap = map[string]string{
"content": "",
"work": "",
"exhibition": "",
"bundle": "",
"show": "",
}
var keyWordMap = map[string]string{ var keyWordMap = map[string]string{
"普通审批": "content", "普通审批": "content",
"画作申请审批": "work", "画作申请审批": "work",
@ -50,6 +62,28 @@ func DataExist(domain, keyWork, title string) bool {
} }
func ToKeyInfos(infos []*approval.KeyInfo) KeyInfos {
var info KeyInfos
for index, t := range infos {
temp := KeyInfo{
ApprovalKey: t.ApprovalKey,
ApprovalName: t.ApprovalName,
ApprovalType: t.ApprovalType,
ApprovalValue: t.ApprovalValue,
}
if temp.ApprovalKey == "" {
temp.ApprovalKey = "key_" + fmt.Sprintf("%d", index)
}
info = append(info, temp)
}
return info
}
func KeyWordFromTitle(title string) string { func KeyWordFromTitle(title string) string {
keyWord := md52.Md5Part(title+strconv.Itoa(rand.Intn(100)), 8, 16) keyWord := md52.Md5Part(title+strconv.Itoa(rand.Intn(100)), 8, 16)
@ -65,3 +99,8 @@ func IsSystemKeyWork(title string) bool {
_, isOk := keyWordMap[title] _, isOk := keyWordMap[title]
return isOk return isOk
} }
func IsSystemType(title string) bool {
_, isOk := TypeMap[title]
return isOk
}

@ -19,7 +19,7 @@ type Exhibition struct {
ReceivedAt string `gorm:"column:received_at" json:"receivedAt"` // 领取时间 ReceivedAt string `gorm:"column:received_at" json:"receivedAt"` // 领取时间
Address string `gorm:"column:address" json:"Address"` // 地点 Address string `gorm:"column:address" json:"Address"` // 地点
ApprovalID uint64 `gorm:"column:approval_id" json:"approvalId"` // 关联申请的ID ApprovalID uint64 `gorm:"column:approval_id" json:"approvalId"` // 关联申请的ID
ApplyID uint64 `gorm:"column:apply_id" json:"applyID"` // 画展包的id ApplyID string `gorm:"size:64;column:apply_id;default:''" json:"applyID"` // 画展包的id
Num uint64 `gorm:"column:num" json:"num"` // 关联申请的ID Num uint64 `gorm:"column:num" json:"num"` // 关联申请的ID
ApprovalExhibitions []*ApprovalExhibition `gorm:"foreignKey:ExhibitionID" json:"ApprovalExhibitions"` //关联包 ApprovalExhibitions []*ApprovalExhibition `gorm:"foreignKey:ExhibitionID" json:"ApprovalExhibitions"` //关联包
} }
@ -53,7 +53,8 @@ func (m *Exhibition) SaveApprovalContent(in *approval.CreateRequest, a *Approval
PackageID: approvalExhibition.PackageID, PackageID: approvalExhibition.PackageID,
//PackageSize: approvalExhibition.PackageSize, //PackageSize: approvalExhibition.PackageSize,
//PackageNumber: approvalExhibition.PackageNumber, //PackageNumber: approvalExhibition.PackageNumber,
Address: approvalExhibition.Address, Address: approvalExhibition.Address,
ShowDate: approvalExhibition.ShowDate,
} }
approvalExhibitions = append(approvalExhibitions, temp) approvalExhibitions = append(approvalExhibitions, temp)
@ -92,10 +93,10 @@ func (m *Exhibition) UpdateApprovalContent(in *approval.CreateRequest, a *Approv
func (m *Exhibition) UpdateContent(in *approval.CreateRequest, a *Approval) error { func (m *Exhibition) UpdateContent(in *approval.CreateRequest, a *Approval) error {
approvalExhibitions := in.Exhibition.ApprovalExhibitions approvalExhibitions := in.Exhibition.ApprovalExhibitions
var oldApprovalExhibitions []ApprovalExhibition var oldApprovalExhibitions []ApprovalExhibition
var oldPackageID []uint64 var oldPackageID []string
var inPackageID []uint64 var inPackageID []string
var err error var err error
inApprovalExhibitionMap := make(map[uint64]*approval.ApprovalExhibition, len(approvalExhibitions)) inApprovalExhibitionMap := make(map[string]*approval.ApprovalExhibition, len(approvalExhibitions))
DB.Where(&ApprovalExhibition{ExhibitionID: m.ID}).Find(&oldApprovalExhibitions) DB.Where(&ApprovalExhibition{ExhibitionID: m.ID}).Find(&oldApprovalExhibitions)
@ -108,7 +109,7 @@ func (m *Exhibition) UpdateContent(in *approval.CreateRequest, a *Approval) erro
inApprovalExhibitionMap[approvalWork.PackageID] = approvalWork inApprovalExhibitionMap[approvalWork.PackageID] = approvalWork
} }
needDel := collection.DiffArrayUint64(oldPackageID, inPackageID) needDel := collection.DiffArrayString(oldPackageID, inPackageID)
fmt.Println(needDel) fmt.Println(needDel)
if len(needDel) > 0 { if len(needDel) > 0 {
@ -116,7 +117,7 @@ func (m *Exhibition) UpdateContent(in *approval.CreateRequest, a *Approval) erro
Delete(&ApprovalExhibition{}) Delete(&ApprovalExhibition{})
} }
needAdd := collection.DiffArrayUint64(inPackageID, oldPackageID) needAdd := collection.DiffArrayString(inPackageID, oldPackageID)
fmt.Println(needAdd) fmt.Println(needAdd)
//传递的id去除表 新增 //传递的id去除表 新增
@ -130,7 +131,8 @@ func (m *Exhibition) UpdateContent(in *approval.CreateRequest, a *Approval) erro
PackageID: inApprovalExhibitionMap[tempId].PackageID, PackageID: inApprovalExhibitionMap[tempId].PackageID,
//PackageSize: inApprovalExhibitionMap[tempId].PackageSize, //PackageSize: inApprovalExhibitionMap[tempId].PackageSize,
//PackageNumber: inApprovalExhibitionMap[tempId].PackageNumber, //PackageNumber: inApprovalExhibitionMap[tempId].PackageNumber,
Address: inApprovalExhibitionMap[tempId].Address, Address: inApprovalExhibitionMap[tempId].Address,
ShowDate: inApprovalExhibitionMap[tempId].ShowDate,
} }
approvalWorks = append(approvalWorks, temp) approvalWorks = append(approvalWorks, temp)
@ -144,7 +146,7 @@ func (m *Exhibition) UpdateContent(in *approval.CreateRequest, a *Approval) erro
} }
//更新 主要修改绑定的数据权限id //更新 主要修改绑定的数据权限id
changeIds := collection.IntersectArrayUint64(inPackageID, oldPackageID) changeIds := collection.IntersectArrayString(inPackageID, oldPackageID)
if len(changeIds) > 0 { if len(changeIds) > 0 {
for _, tempId := range changeIds { for _, tempId := range changeIds {
@ -159,7 +161,8 @@ func (m *Exhibition) UpdateContent(in *approval.CreateRequest, a *Approval) erro
PackageID: inApprovalExhibitionMap[tempId].PackageID, PackageID: inApprovalExhibitionMap[tempId].PackageID,
// PackageSize: inApprovalExhibitionMap[tempId].PackageSize, // PackageSize: inApprovalExhibitionMap[tempId].PackageSize,
// PackageNumber: inApprovalExhibitionMap[tempId].PackageNumber, // PackageNumber: inApprovalExhibitionMap[tempId].PackageNumber,
Address: inApprovalExhibitionMap[tempId].Address, Address: inApprovalExhibitionMap[tempId].Address,
ShowDate: inApprovalExhibitionMap[tempId].ShowDate,
} }
DB.Model(&ApprovalExhibition{}). DB.Model(&ApprovalExhibition{}).
@ -188,7 +191,8 @@ func (m *Exhibition) BuildResContent(a *Approval, request *approval.CreateReques
PackageName: one.PackageName, PackageName: one.PackageName,
//PackageSize: one.PackageSize, //PackageSize: one.PackageSize,
//PackageNumber: one.PackageNumber, //PackageNumber: one.PackageNumber,
Address: one.Address, Address: one.Address,
ShowDate: one.ShowDate,
} }
approvalExhibitions = append(approvalExhibitions, temp) approvalExhibitions = append(approvalExhibitions, temp)

@ -77,4 +77,5 @@ func Database(conn string) {
sqlDB.SetMaxOpenConns(100) //打开 sqlDB.SetMaxOpenConns(100) //打开
sqlDB.SetConnMaxLifetime(time.Second * 30) sqlDB.SetConnMaxLifetime(time.Second * 30)
DB = db DB = db
migration()
} }

@ -0,0 +1,32 @@
package model
import (
"fmt"
)
//类型迁移
func migration() {
//自动迁移模式
//增加字段
addColumn(&ApprovalType{}, "is_normal")
addColumn(&ApprovalType{}, "key_json")
addColumn(&Exhibition{}, "apply_id")
addColumn(&ApprovalExhibition{}, "package_id")
addColumn(&ApprovalExhibition{}, "show_date")
addColumn(&Approval{}, "value_json")
}
//数据迁移
func addColumn(dst interface{}, column string) {
exist := DB.Migrator().HasColumn(dst, column)
if !exist {
err := DB.Migrator().AddColumn(dst, column)
if err != nil {
fmt.Println(err.Error())
}
}
return
}

@ -25,6 +25,9 @@ func (m *Show) TableName() string {
} }
func (m *Show) SaveApprovalContent(in *approval.CreateRequest, a *Approval) error { func (m *Show) SaveApprovalContent(in *approval.CreateRequest, a *Approval) error {
if in.Show == nil {
return nil
}
m.ArtistNum = in.Show.ArtistNum m.ArtistNum = in.Show.ArtistNum
m.ApprovalID = a.ID m.ApprovalID = a.ID
m.ShowAt = in.Show.ShowAt m.ShowAt = in.Show.ShowAt

@ -2,6 +2,7 @@ package serializer
import ( import (
"github.com/fonchain_enterprise/fonchain-approval/api/approval" "github.com/fonchain_enterprise/fonchain-approval/api/approval"
"github.com/fonchain_enterprise/fonchain-approval/pkg/e"
"github.com/fonchain_enterprise/fonchain-approval/pkg/model" "github.com/fonchain_enterprise/fonchain-approval/pkg/model"
) )
@ -62,6 +63,7 @@ func BuildApproval(entity *model.Approval, userId uint64) *approval.CreateReques
SubmitterName: entity.SubmitterName, SubmitterName: entity.SubmitterName,
Content: entity.Content, Content: entity.Content,
CanView: canViewed, CanView: canViewed,
IsCustom: e.Is_IsCustom_Yes,
CanApproval: canApproval, CanApproval: canApproval,
WorkFlows: workFlows, WorkFlows: workFlows,
Reply: entity.Reply, Reply: entity.Reply,
@ -69,12 +71,17 @@ func BuildApproval(entity *model.Approval, userId uint64) *approval.CreateReques
Show: show, Show: show,
Exhibition: exhibition, Exhibition: exhibition,
Bundle: bundle, Bundle: bundle,
CustomizeInfo: BuildKeyInfo(entity.ValueJson),
CreatedAt: entity.CreatedAt.Format("2006-01-02 15:04:05"), CreatedAt: entity.CreatedAt.Format("2006-01-02 15:04:05"),
AllStatus: allStatus, //0-未处理 1-通过 2-拒绝 3-已阅读 4-待阅读 AllStatus: allStatus, //0-未处理 1-通过 2-拒绝 3-已阅读 4-待阅读
NowUserId: entity.NowUserId, //0-未处理 1-通过 2-拒绝 3-已阅读 4-待阅读 NowUserId: entity.NowUserId,
NowUserName: entity.NowUserName, //0-未处理 1-通过 2-拒绝 3-已阅读 4-待阅读 NowUserName: entity.NowUserName,
Level: uint64(entity.Level), //0-未处理 1-通过 2-拒绝 3-已阅读 4-待阅读 Level: uint64(entity.Level),
NowLevel: uint64(entity.NowLevel), //0-未处理 1-通过 2-拒绝 3-已阅读 4-待阅读 NowLevel: uint64(entity.NowLevel),
}
if model.IsSystemType(entity.Type) == true {
response.IsCustom = e.Is_IsCustom_No
} }
_ = entity.SetResContent(response) _ = entity.SetResContent(response)

@ -2,6 +2,7 @@ package serializer
import ( import (
"github.com/fonchain_enterprise/fonchain-approval/api/approval" "github.com/fonchain_enterprise/fonchain-approval/api/approval"
"github.com/fonchain_enterprise/fonchain-approval/pkg/e"
"github.com/fonchain_enterprise/fonchain-approval/pkg/model" "github.com/fonchain_enterprise/fonchain-approval/pkg/model"
) )
@ -9,16 +10,38 @@ import (
func BuildType(entity *model.ApprovalType) *approval.CreateTypeRequest { func BuildType(entity *model.ApprovalType) *approval.CreateTypeRequest {
response := &approval.CreateTypeRequest{ response := &approval.CreateTypeRequest{
ID: entity.ID, ID: entity.ID,
Domain: entity.Domain, Domain: entity.Domain,
Remark: entity.Remark, Remark: entity.Remark,
Title: entity.Title, Title: entity.Title,
KeyWord: entity.KeyWord, KeyWord: entity.KeyWord,
IsCustom: e.Is_IsCustom_Yes,
KeyInfos: BuildKeyInfo(entity.KeyJson),
}
if model.IsSystemType(entity.KeyWord) == true {
response.IsCustom = e.Is_IsCustom_No
} }
return response return response
} }
func BuildKeyInfo(infos model.KeyInfos) []*approval.KeyInfo {
var keyInfos []*approval.KeyInfo
for _, t := range infos {
temp := &approval.KeyInfo{
ApprovalKey: t.ApprovalKey,
ApprovalName: t.ApprovalName,
ApprovalType: t.ApprovalType,
ApprovalValue: t.ApprovalValue,
}
keyInfos = append(keyInfos, temp)
}
return keyInfos
}
func BuildTypes(entity []*model.ApprovalType) (details []*approval.CreateTypeRequest) { func BuildTypes(entity []*model.ApprovalType) (details []*approval.CreateTypeRequest) {
for _, temp := range entity { for _, temp := range entity {

@ -2,6 +2,7 @@ package serializer
import ( import (
"github.com/fonchain_enterprise/fonchain-approval/api/approval" "github.com/fonchain_enterprise/fonchain-approval/api/approval"
"github.com/fonchain_enterprise/fonchain-approval/pkg/e"
"github.com/fonchain_enterprise/fonchain-approval/pkg/model" "github.com/fonchain_enterprise/fonchain-approval/pkg/model"
) )
@ -35,6 +36,13 @@ func BuildSetting(entity *model.ApprovalSetting) *approval.SettingRequest {
CopyUsers: copyUsers, CopyUsers: copyUsers,
ApprovalUsers: approvalUser, ApprovalUsers: approvalUser,
} }
if entity.ApprovalType != nil {
response.IsCustom = e.Is_IsCustom_Yes
response.CustomizeInfo = BuildKeyInfo(entity.ApprovalType.KeyJson)
if model.IsSystemType(entity.ApprovalType.KeyWord) == true {
response.IsCustom = e.Is_IsCustom_No
}
}
return response return response
} }

@ -3,6 +3,7 @@ package service
import ( import (
"context" "context"
"errors" "errors"
"fmt"
"github.com/fonchain_enterprise/fonchain-approval/api/approval" "github.com/fonchain_enterprise/fonchain-approval/api/approval"
"github.com/fonchain_enterprise/fonchain-approval/pkg/common/page" "github.com/fonchain_enterprise/fonchain-approval/pkg/common/page"
"github.com/fonchain_enterprise/fonchain-approval/pkg/m" "github.com/fonchain_enterprise/fonchain-approval/pkg/m"
@ -23,7 +24,9 @@ func (a *ApprovalProvider) Create(ctx context.Context, in *approval.CreateReques
return response, err return response, err
} }
response.ID = entity.ID if entity != nil {
response.ID = entity.ID
}
response.Success = true response.Success = true
return response, err return response, err
@ -286,7 +289,7 @@ func (a *ApprovalProvider) DetailSetting(ctx context.Context, in *approval.Detai
return response, nil return response, nil
} }
if err := model.DB.Model(&model.ApprovalSetting{}). if err := model.DB.Model(&model.ApprovalSetting{}).Preload("ApprovalType").
Where(&model.ApprovalSetting{Domain: in.Domain, KeyWord: in.KeyWord}). Where(&model.ApprovalSetting{Domain: in.Domain, KeyWord: in.KeyWord}).
First(&setting).Error; err != nil { First(&setting).Error; err != nil {
response.Domain = in.Domain response.Domain = in.Domain
@ -300,6 +303,7 @@ func (a *ApprovalProvider) DetailSetting(ctx context.Context, in *approval.Detai
func (a *ApprovalProvider) CreateType(ctx context.Context, in *approval.CreateTypeRequest) (*approval.TypeResponse, error) { func (a *ApprovalProvider) CreateType(ctx context.Context, in *approval.CreateTypeRequest) (*approval.TypeResponse, error) {
response := &approval.TypeResponse{} response := &approval.TypeResponse{}
fmt.Println("创建类型:", in.String())
keyWord := model.KeyWordFromTitle(in.Title) keyWord := model.KeyWordFromTitle(in.Title)
if model.DataExist(in.Domain, keyWord, in.Title) == true { if model.DataExist(in.Domain, keyWord, in.Title) == true {
@ -311,6 +315,7 @@ func (a *ApprovalProvider) CreateType(ctx context.Context, in *approval.CreateTy
Title: in.Title, Title: in.Title,
Domain: in.Domain, Domain: in.Domain,
Remark: in.Remark, Remark: in.Remark,
KeyJson: model.ToKeyInfos(in.KeyInfos),
} }
if err := model.DB.Create(&typeObj).Error; err != nil { if err := model.DB.Create(&typeObj).Error; err != nil {

Loading…
Cancel
Save