diff --git a/conf/htm_log_config.yaml b/conf/htm_log_config.yaml new file mode 100644 index 0000000..6abe1a5 --- /dev/null +++ b/conf/htm_log_config.yaml @@ -0,0 +1,15 @@ +# module配置输出源 配置为map +config: + plan: + # 文件location + filename: ./log/plan + filetype: html + default: "" + # 支持文件的最大个数 + MaxAge: 30 + info : "
时间:[time]错误提示:[info]
Request:[request]
Response:[response]

" + replace : + - "time" + - "info" + - "request" + - "response" \ No newline at end of file diff --git a/conf/log_config.yaml b/conf/log_config.yaml index 632c7ef..c1d3b2f 100644 --- a/conf/log_config.yaml +++ b/conf/log_config.yaml @@ -1,4 +1,4 @@ -# 配置输出 支持三种输出 db file 和console +# 配置输出 支持三种输出 db log 和console # db为数据库输出 目前支持输出到mongo 配置为map db: mongo1: @@ -23,6 +23,12 @@ file: filename: ./log/common.log # 支持文件的最大个数 MaxAge: 30 + plan: + # 文件location + filename: ./log/plan/plan.log + # 支持文件的最大个数 + MaxAge: 30 + Default : "" user: # 文件location filename: ./log/user.log @@ -42,8 +48,8 @@ config: root: # 此处的file、db、console名称可以随意起 见文知意即可 file: - # drivertype 为驱动类型 file-文件 db-数据库 console-控制台 - drivertype: file + # drivertype 为驱动类型 log-文件 db-数据库 console-控制台 + drivertype: log level: debug # drivername 需要和output的map 键值相同 drivername: common @@ -55,13 +61,13 @@ config: # drivertype: console # level: debug # drivername: console -# user: -# file: -# # drivertype 为驱动类型 file-文件 db-数据库 console-控制台 -# drivertype: file -# level: info -# # drivername 需要和output的map 键值相同 -# drivername: user + plan: + file: + # drivertype 为驱动类型 log-文件 db-数据库 console-控制台 + drivertype: log + level: debug + # drivername 需要和output的map 键值相同 + drivername: plan # db: # drivertype: db # level: debug diff --git a/infra/logger/config.go b/infra/logger/config.go index d3d35c3..9ccd10a 100644 --- a/infra/logger/config.go +++ b/infra/logger/config.go @@ -30,6 +30,7 @@ type file struct { MaxAge int `yaml:"maxAge"` //MaxBackups int `yaml:"maxBackups"` //Compress bool `yaml:"compress"` + Default string `yaml:"Default"` } type console struct { diff --git a/infra/logger/file.go b/infra/logger/file.go index 8cc3d19..9296ce3 100644 --- a/infra/logger/file.go +++ b/infra/logger/file.go @@ -24,11 +24,9 @@ func NewFileDriver(config file, level int) (driver, error) { if fileLogCoreMap == nil { fileLogCoreMap = make(map[string]*zap.Logger) } - mKey := config.Filename + strconv.Itoa(config.MaxAge) logCore = fileLogCoreMap[mKey] if logCore == nil { - //lumberjackLogger := &lumberjack.Logger{ // Filename: config.Filename, // MaxSize: config.MaxSize, @@ -43,7 +41,6 @@ func NewFileDriver(config file, level int) (driver, error) { rotatelogs.WithMaxAge(age), rotatelogs.WithRotationTime(time.Hour*24), ) - if err != nil { return nil, err } diff --git a/infra/logger/log_config.yaml b/infra/logger/log_config.yaml index 7f40e25..8652001 100644 --- a/infra/logger/log_config.yaml +++ b/infra/logger/log_config.yaml @@ -1,4 +1,4 @@ -# 配置输出 支持三种输出 db file 和console +# 配置输出 支持三种输出 db log 和console # db为数据库输出 目前支持输出到mongo 配置为map db: mongo1: @@ -42,8 +42,8 @@ config: root: # 此处的file、db、console名称可以随意起 见文知意即可 file: - # drivertype 为驱动类型 file-文件 db-数据库 console-控制台 - drivertype: file + # drivertype 为驱动类型 log-文件 db-数据库 console-控制台 + drivertype: log level: debug # drivername 需要和output的map 键值相同 drivername: common @@ -57,8 +57,8 @@ config: drivername: console user: file: - # drivertype 为驱动类型 file-文件 db-数据库 console-控制台 - drivertype: file + # drivertype 为驱动类型 log-文件 db-数据库 console-控制台 + drivertype: log level: info # drivername 需要和output的map 键值相同 drivername: user diff --git a/main.go b/main.go index 2ab3844..2ac38cb 100644 --- a/main.go +++ b/main.go @@ -11,6 +11,7 @@ import ( "leit.com/LAPP_CHEERSSON_BACKEND/task" "leit.com/LAPP_CHEERSSON_BACKEND/task/createVersion" "leit.com/LAPP_CHEERSSON_BACKEND/utils" + logUtils "leit.com/LAPP_CHEERSSON_BACKEND/utils/log" "leit.com/LAPP_CHEERSSON_BACKEND/web/middleware/glog" "leit.com/LAPP_CHEERSSON_BACKEND/web/routes" "log" @@ -117,7 +118,6 @@ func imain() { //加载配置 conf.AppOtherParse() //启动任务 - go task.TaskInit() app := iris.New() //注册中间件 //conf.PreSettring(app) @@ -132,6 +132,8 @@ func imain() { if err != nil { log.Fatal("init logger config failed, error:", err.Error()) } + logUtils.InitLog() + go task.TaskInit() // 开启自动创建功能 go createVersion.CreateVersionTask() //启动监听端口 diff --git a/models/base/leit_server_log_model.go b/models/base/leit_server_log_model.go index 33c8131..7a52446 100644 --- a/models/base/leit_server_log_model.go +++ b/models/base/leit_server_log_model.go @@ -19,7 +19,7 @@ type LeitServerLog struct { TimeStamp string `bson:"timestamp" json:"leit_server_log-timestamp"` //时间戳 Message string `bson:"message" json:"leit_server_log-message"` //出错信息提示 Function string `bson:"function" json:"leit_server_log-function"` //出错函数 - File string `bson:"file" json:"leit_server_log-file"` //出错文件 + File string `bson:"file" json:"leit_server_log-log"` //出错文件 Operator string `bson:"operator" json:"leit_server_log-operator"` //操作人员 } diff --git a/services/ap/implments/PlanOrderVersion.service.impl.go b/services/ap/implments/PlanOrderVersion.service.impl.go index fafbccf..642de8f 100644 --- a/services/ap/implments/PlanOrderVersion.service.impl.go +++ b/services/ap/implments/PlanOrderVersion.service.impl.go @@ -14,6 +14,7 @@ import ( baseModel "leit.com/LAPP_CHEERSSON_BACKEND/models/base" "leit.com/LAPP_CHEERSSON_BACKEND/utils" utilService "leit.com/LAPP_CHEERSSON_BACKEND/utils/k3cloud/service" + logUtils "leit.com/LAPP_CHEERSSON_BACKEND/utils/log" "time" ) @@ -166,9 +167,15 @@ func (impl *PlanOrderVersionServiceImplement) Publish(info utils.ChannelsInfo) ( _init := utilService.PLN_PLANORDER_Init() iserr := false for _, v := range detailList { - _ids, err := _init.Save(v.PlantNr, "system", &v, &alldata_Article) + _ids, err, req, res := _init.Save(v.PlantNr, "system", &v, &alldata_Article) if err != nil || _ids == "" { iserr = true + message := make(map[string]string) + message["time"] = "2021-09-01 00:02:03" + message["info"] = "版本:" + v.VersionNr + " 物料:" + v.ArtId + " 计划周:" + utils.ValueToString(v.PlanYear, "") + "-" + utils.ValueToString(v.PlanWeek, "") + message["request"] = req + message["response"] = res + logUtils.Write("plan", message) } else { if ids != "" { ids += "," diff --git a/services/base/Article.service.go b/services/base/Article.service.go index 40b507e..3296740 100644 --- a/services/base/Article.service.go +++ b/services/base/Article.service.go @@ -238,6 +238,7 @@ type ArticleService interface { * ******************************************************************************/ ImportArtcleLockWeekFile(user *global.User, savePath string) error + BindArticle(taskVal map[string]string) } /****************************************************************************** diff --git a/services/base/Customer.service.go b/services/base/Customer.service.go index 6f66e4d..20ece2c 100644 --- a/services/base/Customer.service.go +++ b/services/base/Customer.service.go @@ -251,6 +251,7 @@ type CustomerService interface { //erp导入 ImportCustomer([][]interface{}) + BindCustomer(taskVal map[string]string) } /****************************************************************************** diff --git a/services/base/implments/Article.service.impl.go b/services/base/implments/Article.service.impl.go index 2aefe0d..9dead60 100644 --- a/services/base/implments/Article.service.impl.go +++ b/services/base/implments/Article.service.impl.go @@ -12,6 +12,7 @@ import ( "leit.com/LAPP_CHEERSSON_BACKEND/db" "leit.com/LAPP_CHEERSSON_BACKEND/global" "leit.com/LAPP_CHEERSSON_BACKEND/grmi" + apMeta "leit.com/LAPP_CHEERSSON_BACKEND/meta/ap" meta "leit.com/LAPP_CHEERSSON_BACKEND/meta/base" modelAp "leit.com/LAPP_CHEERSSON_BACKEND/models/ap" model "leit.com/LAPP_CHEERSSON_BACKEND/models/base" @@ -155,6 +156,98 @@ func (impl *ArticleServiceImplement) InsertOne(user *global.User, entity *model. return nil } +func (impl *ArticleServiceImplement) BindArticle(taskVal map[string]string) { + grmi.Log(nil, "/services/base/implments/Customer.service.impl.go", "BindArticle", "自动绑定物料") + engine := db.Eloquent.Master() + session := engine.NewSession() + defer session.Close() + //查询客户 + custDao := dal.NewCustomerDAO(session, model.PlantNr, "System") + custId := strings.Split(taskVal["bindCust"], ",") + var _custId []interface{} + for _, v := range custId { + _custId = append(_custId, v) + } + custList, err := custDao.Select([]grmi.Predicate{ + meta.Customer_CustomerId.NewPredicate(grmi.Include, _custId...), + }, nil) + if err != nil { + fmt.Println(err.Error()) + return + } + fmt.Println(len(_custId)) + fmt.Println(len(custId)) + var custArticleData []modelAp.CustArtlst + custArticleDao := dalAp.NewCustArtlstDAO(session, model.PlantNr, "System") + if custList != nil { + //查询所有成品 + custDao := dal.NewArticleDAO(session, model.PlantNr, "System") + artList, err := custDao.Select([]grmi.Predicate{ + meta.Article_ArtTypeId.NewPredicate(grmi.Equal, model.ART_TYPE_FINISHED), + }, nil) + if err != nil { + return + } + _map := make(map[string]int) + for _, v := range custList { + //删除现有关系 + _ = custArticleDao.DeleteWhere([]grmi.Predicate{ + apMeta.CustArtlst_CustomerId.NewPredicate(grmi.Equal, v.CustomerId), + }) + for _, _v := range artList { + //查询物料是否存在关系 + if key, ok := _map[_v.ArtId]; ok { + if key == 1 { + continue + } + } else { + _custArticleOne, _ := custArticleDao.Select([]grmi.Predicate{ + apMeta.CustArtlst_ArtId.NewPredicate(grmi.Equal, _v.ArtId), + }, nil) + if len(_custArticleOne) == 0 { + _map[_v.ArtId] = 2 + } else { + _map[_v.ArtId] = 1 + } + } + + custArticleData = append(custArticleData, modelAp.CustArtlst{ + PlantNr: model.PlantNr, + CustomerId: v.CustomerId, + ArtId: _v.ArtId, + Descr1: _v.Descr1, + Descr2: _v.Descr2, + }) + } + } + } + _ = session.Begin() + if custArticleData != nil { + if len(custArticleData) > 20 { + var _detail []modelAp.CustArtlst + for k, v := range custArticleData { + _detail = append(_detail, v) + if (k > 0 && k%20 == 0) || k+1 == len(custArticleData) { + err := custArticleDao.Insert(&_detail) + if err != nil { + _ = session.Rollback() + fmt.Println(err.Error()) + panic(err.Error()) + } + _detail = []modelAp.CustArtlst{} + } + } + } else { + err := custArticleDao.Insert(&custArticleData) + if err != nil { + _ = session.Rollback() + panic(err.Error()) + } + } + } + _ = session.Commit() +} + /****************************************************************************** * * @Reference leit.com/LAPP_CHEERSSON_BACKEND/services/base/ArticleService.DeleteOne @@ -728,7 +821,7 @@ func (impl *ArticleServiceImplement) ImportArtcleLockWeekFile(user *global.User, } //开启session err = session.Begin() - if err != nil{ + if err != nil { return err } //判断客户是否相同,不相同continue @@ -755,30 +848,30 @@ func (impl *ArticleServiceImplement) ImportArtcleLockWeekFile(user *global.User, return errors.New("第五列主要没有维护") } //查询物料信息 - artInfo,err := dao.SelectOne(ArtId) - if err != nil{ + artInfo, err := dao.SelectOne(ArtId) + if err != nil { session.Rollback() return err } - if artInfo == nil{ + if artInfo == nil { session.Rollback() - return errors.New(fmt.Sprintf("物料编号:%s没有维护",ArtId)) + return errors.New(fmt.Sprintf("物料编号:%s没有维护", ArtId)) } - artInfo.DeliveryBuffer = utils.ValueToFloat(lockWeek,0.0) + artInfo.DeliveryBuffer = utils.ValueToFloat(lockWeek, 0.0) err = dao.UpdateOne(artInfo) if err != nil { session.Rollback() return err } //更新库存 - lockArt,err := daoAp.SelectOne(ArtId) - if lockArt == nil{ + lockArt, err := daoAp.SelectOne(ArtId) + if lockArt == nil { stockArt := new(modelAp.ArticleStockLevel) stockArt.PlantNr = user.PlantNr stockArt.Descr = artInfo.Descr1 stockArt.ArtId = ArtId - stockArt.MaxCoverPeriod = utils.ValueToFloat(targetStockWeek,0.0) - stockArt.MinCoverPeriod =utils.ValueToFloat(smallStockWeek,0.0) + stockArt.MaxCoverPeriod = utils.ValueToFloat(targetStockWeek, 0.0) + stockArt.MinCoverPeriod = utils.ValueToFloat(smallStockWeek, 0.0) stockArt.MaxCoverPeriodType = "W" stockArt.MinCoverPeriodType = "W" err = daoAp.InsertOne(stockArt) @@ -786,9 +879,9 @@ func (impl *ArticleServiceImplement) ImportArtcleLockWeekFile(user *global.User, session.Rollback() return err } - }else{ - lockArt.MaxCoverPeriod = utils.ValueToFloat(targetStockWeek,0.0) - lockArt.MinCoverPeriod =utils.ValueToFloat(smallStockWeek,0.0) + } else { + lockArt.MaxCoverPeriod = utils.ValueToFloat(targetStockWeek, 0.0) + lockArt.MinCoverPeriod = utils.ValueToFloat(smallStockWeek, 0.0) lockArt.MaxCoverPeriodType = "W" lockArt.MinCoverPeriodType = "W" err := daoAp.UpdateOne(lockArt) @@ -798,8 +891,8 @@ func (impl *ArticleServiceImplement) ImportArtcleLockWeekFile(user *global.User, } } //更新主要资源 - mainResurce,err := mainRedao.SelectOne(ArtId) - if mainResurce == nil{ + mainResurce, err := mainRedao.SelectOne(ArtId) + if mainResurce == nil { mainResurceone := new(modelAp.ArticleResource) mainResurceone.PlantNr = user.PlantNr mainResurceone.ResourceId = resourceId @@ -809,7 +902,7 @@ func (impl *ArticleServiceImplement) ImportArtcleLockWeekFile(user *global.User, session.Rollback() return err } - }else{ + } else { mainResurce.ResourceId = resourceId err := mainRedao.UpdateOne(mainResurce) if err != nil { @@ -817,10 +910,10 @@ func (impl *ArticleServiceImplement) ImportArtcleLockWeekFile(user *global.User, return err } } - if sedResourceId != ""{ + if sedResourceId != "" { //更新次要资源 - sedResurce,err := secMaindao.SelectOne(ArtId,sedResourceId) - if sedResurce == nil{ + sedResurce, err := secMaindao.SelectOne(ArtId, sedResourceId) + if sedResurce == nil { sedResurceeone := new(modelAp.ArticleSecondaryResource) sedResurceeone.PlantNr = user.PlantNr sedResurceeone.SecondaryResourceId = sedResourceId @@ -830,7 +923,7 @@ func (impl *ArticleServiceImplement) ImportArtcleLockWeekFile(user *global.User, session.Rollback() return err } - }else{ + } else { sedResurce.SecondaryResourceId = sedResourceId err := secMaindao.UpdateOne(sedResurce) if err != nil { @@ -839,10 +932,10 @@ func (impl *ArticleServiceImplement) ImportArtcleLockWeekFile(user *global.User, } } } - if threeResourceId != ""{ + if threeResourceId != "" { //更新替代资源 - threeResurce,err := threeDao.SelectOne(ArtId,threeResourceId) - if threeResurce == nil{ + threeResurce, err := threeDao.SelectOne(ArtId, threeResourceId) + if threeResurce == nil { threeResurceeone := new(modelAp.ArticleAlternativeResource) threeResurceeone.PlantNr = user.PlantNr threeResurceeone.AlternativeResourceId = threeResourceId @@ -852,7 +945,7 @@ func (impl *ArticleServiceImplement) ImportArtcleLockWeekFile(user *global.User, session.Rollback() return err } - }else{ + } else { threeResurce.AlternativeResourceId = threeResourceId err := threeDao.UpdateOne(threeResurce) if err != nil { diff --git a/services/base/implments/Customer.service.impl.go b/services/base/implments/Customer.service.impl.go index bf76e98..6a6fab5 100644 --- a/services/base/implments/Customer.service.impl.go +++ b/services/base/implments/Customer.service.impl.go @@ -3,6 +3,7 @@ package implments import ( + "fmt" apDal "leit.com/LAPP_CHEERSSON_BACKEND/dao/ap" dal "leit.com/LAPP_CHEERSSON_BACKEND/dao/base" "leit.com/LAPP_CHEERSSON_BACKEND/db" @@ -13,6 +14,7 @@ import ( apModel "leit.com/LAPP_CHEERSSON_BACKEND/models/ap" model "leit.com/LAPP_CHEERSSON_BACKEND/models/base" "leit.com/LAPP_CHEERSSON_BACKEND/utils" + "strings" ) /****************************************************************************** @@ -292,6 +294,78 @@ func (impl *CustomerServiceImplement) Delete(user *global.User, entities *[]mode return nil } +func (impl *CustomerServiceImplement) BindCustomer(taskVal map[string]string) { + grmi.Log(nil, "/services/base/implments/Customer.service.impl.go", "BindCustomer", "自动绑定客户") + engine := db.Eloquent.Master() + session := engine.NewSession() + defer session.Close() + //查询用户 + userDao := dal.NewUserDAO(session, model.PlantNr, "System") + userId := strings.Split(taskVal["bindUser"], ",") + var _userId []interface{} + for _, v := range userId { + _userId = append(_userId, v) + } + userList, err := userDao.Select([]grmi.Predicate{ + meta.User_UserId.NewPredicate(grmi.Include, _userId...), + }, nil) + if err != nil { + fmt.Println(err.Error()) + return + } + var custUserData []apModel.UserCustlst + userCustDao := apDal.NewUserCustlstDAO(session, model.PlantNr, "System") + if userList != nil { + //查询所有客户 + custDao := dal.NewCustomerDAO(session, model.PlantNr, "System") + custList, err := custDao.Select(nil, nil) + if err != nil { + return + } + for _, v := range userList { + if v.CustCommissioner != "" { + v.CustCommissioner = "" + _ = userDao.UpdateOne(&v) + } + //删除现有关系 + userCustDao.DeleteWhere([]grmi.Predicate{ + apMeta.UserCustlst_UserId.NewPredicate(grmi.Equal, v.UserId), + }) + for _, _v := range custList { + custUserData = append(custUserData, apModel.UserCustlst{ + UserId: v.UserId, + CustomerId: _v.CustomerId, + }) + } + } + } + + _ = session.Begin() + if custUserData != nil { + if len(custUserData) > 20 { + var _detail []apModel.UserCustlst + for k, v := range custUserData { + _detail = append(_detail, v) + if (k > 0 && k%20 == 0) || k+1 == len(custUserData) { + err := userCustDao.Insert(&_detail) + if err != nil { + _ = session.Rollback() + panic(err.Error()) + } + _detail = []apModel.UserCustlst{} + } + } + } else { + err := userCustDao.Insert(&custUserData) + if err != nil { + _ = session.Rollback() + panic(err.Error()) + } + } + } + _ = session.Commit() +} + func (impl *CustomerServiceImplement) ImportCustomer(_list [][]interface{}) { grmi.Log(nil, "/services/base/implments/Customer.service.impl.go", "CustomerTree", "客户列表") @@ -324,6 +398,7 @@ func (impl *CustomerServiceImplement) ImportCustomer(_list [][]interface{}) { }) userCustMap[v.CustCommissioner] = append(userCustMap[v.CustCommissioner], v.UserId) } + var userCustList []apModel.UserCustlst for _, v := range _list { if _, ok := custMap[utils.ValueToString(v[1], "")]; ok { @@ -387,28 +462,28 @@ func (impl *CustomerServiceImplement) ImportCustomer(_list [][]interface{}) { DemandModelId: _demandModel.DemandModelId, }) } - if data == nil { - return - } + _ = session.Begin() - if len(data) > 20 { - var _detail []model.Customer - for k, v := range data { - _detail = append(_detail, v) - if (k > 0 && k%20 == 0) || k+1 == len(data) { - err := dao.Insert(&_detail) - if err != nil { - _ = session.Rollback() - panic(err.Error()) + if data != nil { + if len(data) > 20 { + var _detail []model.Customer + for k, v := range data { + _detail = append(_detail, v) + if (k > 0 && k%20 == 0) || k+1 == len(data) { + err := dao.Insert(&_detail) + if err != nil { + _ = session.Rollback() + panic(err.Error()) + } + _detail = []model.Customer{} } - _detail = []model.Customer{} } - } - } else { - err := dao.Insert(&data) - if err != nil { - _ = session.Rollback() - panic(err.Error()) + } else { + err := dao.Insert(&data) + if err != nil { + _ = session.Rollback() + panic(err.Error()) + } } } if userCustList != nil { diff --git a/task/bindArticle/main.go b/task/bindArticle/main.go new file mode 100644 index 0000000..9ff6eac --- /dev/null +++ b/task/bindArticle/main.go @@ -0,0 +1,17 @@ +package main + +import ( + "fmt" + "leit.com/LAPP_CHEERSSON_BACKEND/task" +) + +func main() { + err, taskVal := task.EtlTaskArticleInit() + if err != nil { + fmt.Println(err) + return + } + task.BindArticle(taskVal) + fmt.Println("OK") + return +} diff --git a/task/k3cloud.go b/task/k3cloud.go index d1b2e49..55d3522 100644 --- a/task/k3cloud.go +++ b/task/k3cloud.go @@ -28,14 +28,18 @@ var lastTime = TypeTime{} var serviceOfArticle = svr.NewArticleService() var serviceOfBomList = svrMe.NewBomLstService() var serviceOfCustomer = svr.NewCustomerService() -var serviceOfSaleOrder = svr.NewSalesOrderService() -var serviceOfStdef = svr.NewStdefService() + +//var serviceOfSaleOrder = svr.NewSalesOrderService() +//var serviceOfStdef = svr.NewStdefService() var serviceOfCustArtlst = svrAp.NewCustArtlstService() var serviceOfProject = svrMe.NewProjectService() var serviceOfUom = svr.NewUomService() var balanceService = svrAp.NewBalanceService() func TaskInit() { + //innerLog, err := logger.NewLogger("system", "plan") + //fmt.Println(err) + //innerLog.Debug("系统异常:") time.AfterFunc(10*time.Second, func() { balanceService.RefreshData() }) @@ -70,8 +74,9 @@ func oneTask(_date time.Time) { //ImportMaterial() //ImportMaterialGroupSearch() //val := make(map[string]string) - //val["ResourceId"] = "0105" - //ImportArticle(val) + //val["bindCust"] = "011016" + //ImportArticle(val, "") + //BindArticle(val) //ImportBomList() //ImportCustomer() //ImportSaleOrder() @@ -106,23 +111,32 @@ func ImportCustomer() { serviceOfCustomer.ImportCustomer(response) } -func ImportQichu(){ +//用户自动绑定客户 +func BindCustomer(taskVal map[string]string) { + serviceOfCustomer.BindCustomer(taskVal) +} + +//客户自动绑定物料 +func BindArticle(taskVal map[string]string) { + serviceOfArticle.BindArticle(taskVal) +} +func ImportQichu() { impl := implments.NewBalanceServiceImplement() alldata_Article := impl.GetGlobalArticleData() - erp.GetQiChuQty(model.PlantNr,"system", &alldata_Article) + erp.GetQiChuQty(model.PlantNr, "system", &alldata_Article) } -func ImportZhaizhi(){ +func ImportZhaizhi() { impl := implments.NewBalanceServiceImplement() alldata_Article := impl.GetGlobalArticleData() - erp.GetZhaizhiQty(model.PlantNr,"system", &alldata_Article) - erp.GetZhaizhiWeekQty(model.PlantNr,"system", &alldata_Article) + erp.GetZhaizhiQty(model.PlantNr, "system", &alldata_Article) + erp.GetZhaizhiWeekQty(model.PlantNr, "system", &alldata_Article) } -func ImportChaigou(){ +func ImportChaigou() { impl := implments.NewBalanceServiceImplement() alldata_Article := impl.GetGlobalArticleData() - erp.GetChaigouQty(model.PlantNr,"system", &alldata_Article) + erp.GetChaigouQty(model.PlantNr, "system", &alldata_Article) } //销售订单 @@ -131,15 +145,16 @@ func ImportSaleOrder() { //serviceOfSaleOrder.ImportSalesOrder(response) impl := implments.NewBalanceServiceImplement() alldata_Article := impl.GetGlobalArticleData() - erp.GetOrderQty(model.PlantNr,"system", &alldata_Article) + erp.GetOrderQty(model.PlantNr, "system", &alldata_Article) } -func ImportDuli(){ +func ImportDuli() { // 独立需求 impl := implments.NewBalanceServiceImplement() alldata_Article := impl.GetGlobalArticleData() erp.GetDuliQty(model.PlantNr, "system", &alldata_Article) } + //物料分组 func ImportMaterialGroupSearch() string { response := utilService.MaterialGroupInit().MaterialGroupSearch("", "") @@ -268,7 +283,7 @@ func ImportBalance() { engine := db.Eloquent.Master() session := engine.NewSession() defer session.Close() - dao := dal.NewArticleStockDAO(session,model.PlantNr, "system") + dao := dal.NewArticleStockDAO(session, model.PlantNr, "system") dao.DeleteWhere([]grmi.Predicate{meta.ArticleStock_PlantNr.NewPredicate(grmi.Equal, model.PlantNr)}) impl_Balance := implments.NewBalanceServiceImplement() diff --git a/utils/k3cloud.go b/utils/k3cloud.go index e7eb21f..857193b 100644 --- a/utils/k3cloud.go +++ b/utils/k3cloud.go @@ -18,8 +18,8 @@ type K3config struct { K3Response response.K3ResponseStruct FUseOrgId string `json:"FUseOrgId1"` FUseOrgNo string `json:"FUseOrgId1"` - FUseOrgId2 string `json:"FUseOrgId2"` - FUseOrgNo2 string `json:"FUseOrgNo2"` + FUseOrgId2 string `json:"FUseOrgId2"` + FUseOrgNo2 string `json:"FUseOrgNo2"` } var K3Obj *K3config @@ -86,7 +86,7 @@ K3cloud 登录 */ func (k3config *K3config) Login() { formParams := util.CreateLoginPostData(k3config.AcctID, k3config.Username, k3config.Password, k3config.LcID, k3config.OrgNumber) - res, _ := k3config.session.PostJson(k3config.CloudUrl+util.LOGIN_API, formParams) + res, _, _ := k3config.session.PostJson(k3config.CloudUrl+util.LOGIN_API, formParams) k3Response := response.K3LoginResponseToStruct(res) if k3Response.LoginResultType == 0 { panic(k3Response.Message) @@ -99,7 +99,7 @@ func (k3config *K3config) Login() { func (K3config *K3config) SearchApi(formId string, search interface{}) ([][]interface{}, error) { //root.Model formParams := util.CreateBusinessPostData(formId, util.Struct2Map(search)) - res, err := K3config.GetSession().PostJson(K3config.CloudUrl+util.GETBILL_API, formParams) + res, err, _ := K3config.GetSession().PostJson(K3config.CloudUrl+util.GETBILL_API, formParams) if err != nil { return nil, err } @@ -109,23 +109,23 @@ func (K3config *K3config) SearchApi(formId string, search interface{}) ([][]inte /** 保存数据 */ -func (K3config *K3config) SaveApi(formId string, saveData request.SaveRequest) (*response.K3ResponseStruct, error) { +func (K3config *K3config) SaveApi(formId string, saveData request.SaveRequest) (*response.K3ResponseStruct, error, string) { formParams := util.CreateBusinessPostData(formId, util.Struct2Map(saveData)) - res, err := K3config.GetSession().PostJson(K3config.CloudUrl+util.SAVE_API, formParams) + res, err, req := K3config.GetSession().PostJson(K3config.CloudUrl+util.SAVE_API, formParams) if err != nil { - return nil, err + return nil, err, req } response := response.K3ResponseToStruct(res) if !response.Result.ResponseStatus.IsSuccess { - return nil, fmt.Errorf("%s", response.Result.ResponseStatus.Errors) + return nil, fmt.Errorf("%s", response.Result.ResponseStatus.Errors), req } - return &response, nil + return &response, nil, req } //批量保存 func (K3config *K3config) BatchSaveApi(formId string, saveData request.SaveRequest) (*response.K3ResponseStruct, error) { formParams := util.CreateBusinessPostData(formId, util.Struct2Map(saveData)) - res, err := K3config.GetSession().PostJson(K3config.CloudUrl+util.BATCHSAVE_API, formParams) + res, err, _ := K3config.GetSession().PostJson(K3config.CloudUrl+util.BATCHSAVE_API, formParams) if err != nil { return nil, err } @@ -138,7 +138,7 @@ func (K3config *K3config) BatchSaveApi(formId string, saveData request.SaveReque func (K3config *K3config) BillCloseApi(formId string, opNumber string, saveData request.CloseRequest) (*response.K3ResponseStruct, error) { formParams := util.CreateClosePostData(formId, opNumber, util.Struct2Map(saveData)) - res, err := K3config.GetSession().PostJson(K3config.CloudUrl+util.BILLCLOSE_API, formParams) + res, err, _ := K3config.GetSession().PostJson(K3config.CloudUrl+util.BILLCLOSE_API, formParams) if err != nil { return nil, err } @@ -152,7 +152,7 @@ func (K3config *K3config) BillCloseApi(formId string, opNumber string, saveData func (K3config *K3config) DeleteApi(formId string, saveData request.DeleteRequest) (*response.K3ResponseStruct, error) { formParams := util.CreateBusinessPostData(formId, util.Struct2Map(saveData)) - res, err := K3config.GetSession().PostJson(K3config.CloudUrl+util.DELETE_API, formParams) + res, err, _ := K3config.GetSession().PostJson(K3config.CloudUrl+util.DELETE_API, formParams) if err != nil { return nil, err } diff --git a/utils/k3cloud/base/curl.go b/utils/k3cloud/base/curl.go index f10d6b2..00b4e53 100644 --- a/utils/k3cloud/base/curl.go +++ b/utils/k3cloud/base/curl.go @@ -8,7 +8,6 @@ package util import ( "encoding/json" - "fmt" "io/ioutil" "leit.com/LAPP_CHEERSSON_BACKEND/infra/logger" "net/http" @@ -86,16 +85,15 @@ func (self *Browser) Post(requestUrl string, params map[string]string) []byte { } //发送PostJson请求 -func (self *Browser) PostJson(requestUrl string, params map[string]interface{}) ([]byte, error) { +func (self *Browser) PostJson(requestUrl string, params map[string]interface{}) ([]byte, error, string) { postData := self.jsonParams(params) - fmt.Println(postData) request, _ := http.NewRequest("POST", requestUrl, strings.NewReader(postData)) request.Header.Set("Content-Type", "application/json") self.setRequestCookie(request) response, err := self.client.Do(request) if err != nil { - return []byte{}, err + return []byte{}, err, postData } defer response.Body.Close() @@ -105,15 +103,14 @@ func (self *Browser) PostJson(requestUrl string, params map[string]interface{}) data, err := ioutil.ReadAll(response.Body) result := string(data) - fmt.Println(result) is := strings.Contains(result, "\"ErrorCode\":500,\"") if is { innerLog, _ := logger.NewLogger("system", "erp_post_response") innerLog.Debug("erp报错请求:", postData) innerLog.Debug("erp报错:", result) - return nil, err + return nil, err, postData } - return data, err + return data, err, postData } //为请求设置 cookie diff --git a/utils/k3cloud/service/PLN_PLANORDER.go b/utils/k3cloud/service/PLN_PLANORDER.go index 1bd4008..0e5a4fd 100644 --- a/utils/k3cloud/service/PLN_PLANORDER.go +++ b/utils/k3cloud/service/PLN_PLANORDER.go @@ -1,6 +1,7 @@ package service import ( + "encoding/json" "fmt" dal "leit.com/LAPP_CHEERSSON_BACKEND/dao/ap" dal_base "leit.com/LAPP_CHEERSSON_BACKEND/dao/base" @@ -73,7 +74,7 @@ func (_this *PLN_PLANORDER_Service) Search(FilterString, OrderString string) [][ return data } -func (_this *PLN_PLANORDER_Service) Save(PlantNr int, UserId string, articleDemand *model.PlanOrder, alldata_Article *[]model_base.Article) (string, error) { +func (_this *PLN_PLANORDER_Service) Save(PlantNr int, UserId string, articleDemand *model.PlanOrder, alldata_Article *[]model_base.Article) (string, error, string, string) { engine := db.Eloquent.Master() session := engine.NewSession() defer session.Close() @@ -82,7 +83,7 @@ func (_this *PLN_PLANORDER_Service) Save(PlantNr int, UserId string, articleDema dao_PlanOrder := dal.NewPlanOrderDAO(session, PlantNr, UserId) article, err := dao_Article.SelectOne(articleDemand.ArtId) if err != nil || article == nil { - return "", err + return "", err, "", "" } //周一 articleDemand.PlanDate = grmi.Date(utils2.WeekDayMondayZeroTs(articleDemand.PlanDate.Restore())) @@ -174,17 +175,18 @@ func (_this *PLN_PLANORDER_Service) Save(PlantNr int, UserId string, articleDema }, } - response, err := _this.SaveApi(_this.FormID, request) + response, err, req := _this.SaveApi(_this.FormID, request) + _response, _ := json.Marshal(response) if err != nil { - return "", err + return "", err, req, string(_response) } if response.Result.ResponseStatus.IsSuccess == true { articleDemand.Operator = strconv.Itoa(response.Result.ID) dao_PlanOrder.UpdateOne(articleDemand) - return strconv.Itoa(response.Result.ID), nil + return strconv.Itoa(response.Result.ID), nil, req, string(_response) } - return "", fmt.Errorf(fmt.Sprint(response.Result.ResponseStatus.Errors)) + return "", fmt.Errorf(fmt.Sprint(response.Result.ResponseStatus.Errors)), req, string(_response) } func (_this *PLN_PLANORDER_Service) Delete(ids string) error { diff --git a/utils/k3cloud/service/PRD_MO.go b/utils/k3cloud/service/PRD_MO.go index a2d793b..deb467c 100644 --- a/utils/k3cloud/service/PRD_MO.go +++ b/utils/k3cloud/service/PRD_MO.go @@ -30,7 +30,7 @@ func PRD_MO_Init_Weiwai() *PRD_MO_Service { K3config: utils.K3Obj, FormID: "PRD_MO", FieldKeys: "FMaterialId.FNumber,FNoStockInQty,FBillType.FNumber", - FUseOrgKey: "FEntrustOrgId=" + utils.K3Obj.FUseOrgId+ " And FStatus IN (1,2,3,4,5)", + FUseOrgKey: "FEntrustOrgId=" + utils.K3Obj.FUseOrgId + " And FStatus IN (1,2,3,4,5)", } return voucher } diff --git a/utils/k3cloud/service/PUR_Requisition.go b/utils/k3cloud/service/PUR_Requisition.go index dc334f9..23f8393 100644 --- a/utils/k3cloud/service/PUR_Requisition.go +++ b/utils/k3cloud/service/PUR_Requisition.go @@ -10,13 +10,14 @@ import ( request2 "leit.com/LAPP_CHEERSSON_BACKEND/utils/k3cloud/struct/request" "time" ) + /** 供应链 -》 采购管理 ——》采购申请单 */ type PUR_Requisition_Service struct { *utils2.K3config - FormID string - FieldKeys string + FormID string + FieldKeys string FUseOrgKey string } @@ -24,20 +25,19 @@ type PUR_Requisition_Service struct { //到货日期 入库数量 物料编码 func PUR_Requisition_Init() *PUR_Requisition_Service { voucher := &PUR_Requisition_Service{ - K3config: utils2.K3Obj, - FormID: "PUR_Requisition", - FieldKeys: "FMaterialId.FNumber,FStockQty,FArrivalDate", - FUseOrgKey: "FReceiveOrgId="+utils2.K3Obj.FUseOrgId, + K3config: utils2.K3Obj, + FormID: "PUR_Requisition", + FieldKeys: "FMaterialId.FNumber,FStockQty,FArrivalDate", + FUseOrgKey: "FReceiveOrgId=" + utils2.K3Obj.FUseOrgId, } return voucher } - -func (_this *PUR_Requisition_Service) Search( FilterString, OrderString string) [][]interface{} { +func (_this *PUR_Requisition_Service) Search(FilterString, OrderString string) [][]interface{} { var data [][]interface{} - if FilterString != ""{ - FilterString = _this.FUseOrgKey+" And "+FilterString - }else{ + if FilterString != "" { + FilterString = _this.FUseOrgKey + " And " + FilterString + } else { FilterString = _this.FUseOrgKey } request := request2.SearchRequest{ @@ -74,7 +74,7 @@ func (_this *PUR_Requisition_Service) Save(PlantNr int, UserId string, articleDe dao_Article := dal_base.NewArticleDAO(session, PlantNr, UserId) article, err := dao_Article.SelectOne(articleDemand.ArtId) - if err != nil || article == nil{ + if err != nil || article == nil { return err } //周一 @@ -92,18 +92,18 @@ func (_this *PUR_Requisition_Service) Save(PlantNr int, UserId string, articleDe FNumber: article.ArtId, }, FMaterialDesc: article.Descr1, - FUnitID: PUR_Requisition.FUnitID{ + FUnitID: PUR_Requisition.FUnitID{ article.UomId, }, - FReqQty: articleDemand.DemandQty, - FApproveQty: articleDemand.DemandQty, + FReqQty: articleDemand.DemandQty, + FApproveQty: articleDemand.DemandQty, FPurchaseOrgID: PUR_Requisition.FPurchaseOrgID{ FNumber: utils2.K3Obj.FUseOrgNo, }, - FReceiveOrgID:PUR_Requisition.FReceiveOrgID{ + FReceiveOrgID: PUR_Requisition.FReceiveOrgID{ FNumber: utils2.K3Obj.FUseOrgNo, }, - FPriceUnitID:PUR_Requisition.FPriceUnitID{ + FPriceUnitID: PUR_Requisition.FPriceUnitID{ article.UomId, }, FPriceUnitQty: articleDemand.DemandQty, @@ -111,12 +111,12 @@ func (_this *PUR_Requisition_Service) Save(PlantNr int, UserId string, articleDe article.UomId, }, FREQSTOCKQTY: articleDemand.DemandQty, - FBaseReqQty: articleDemand.DemandQty, - FSalUnitID: PUR_Requisition.FSalUnitID{ + FBaseReqQty: articleDemand.DemandQty, + FSalUnitID: PUR_Requisition.FSalUnitID{ article.UomId, }, - FSalQty: articleDemand.DemandQty, - FSalBaseQty: articleDemand.DemandQty, + FSalQty: articleDemand.DemandQty, + FSalBaseQty: articleDemand.DemandQty, FIsVmiBusiness: false, // "FLeadTime": 2, } @@ -131,12 +131,12 @@ func (_this *PUR_Requisition_Service) Save(PlantNr int, UserId string, articleDe FBillTypeID: PUR_Requisition.FBillTypeID{ FNUMBER: "CGSQD01_SYS", }, - FApplicationDate: articleDemand.DemandDate.ToString(), - FRequestType:article.ArtTypeId, - FApplicationOrgID:PUR_Requisition.FApplicationOrgID{ + FApplicationDate: articleDemand.DemandDate.ToString(), + FRequestType: article.ArtTypeId, + FApplicationOrgID: PUR_Requisition.FApplicationOrgID{ FNumber: utils2.K3Obj.FUseOrgNo, }, - FCurrencyID:PUR_Requisition.FCurrencyID{ + FCurrencyID: PUR_Requisition.FCurrencyID{ //todo FNumber: "PRE001", }, @@ -145,15 +145,15 @@ func (_this *PUR_Requisition_Service) Save(PlantNr int, UserId string, articleDe FNumber: "HLTX01_SYS", }, FIsConvert: false, - FACCTYPE: "Q", + FACCTYPE: "Q", FMobBillHead: PUR_Requisition.FMobBillHead{ - FIsMobBill: false, + FIsMobBill: false, FMobIsPending: false, }, - FEntity:entityList, + FEntity: entityList, }, } - _, err = _this.SaveApi(_this.FormID, request) + _, err, _ = _this.SaveApi(_this.FormID, request) return err -} \ No newline at end of file +} diff --git a/utils/k3cloud/service/REM_IndepenReqPlan.go b/utils/k3cloud/service/REM_IndepenReqPlan.go index ae63ba8..3d2424c 100644 --- a/utils/k3cloud/service/REM_IndepenReqPlan.go +++ b/utils/k3cloud/service/REM_IndepenReqPlan.go @@ -128,6 +128,6 @@ func (_this *REM_IndepenReqPlan_Service) Save(PlantNr int, UserId string, articl }, } - _, err = _this.SaveApi(_this.FormID, request) + _, err, _ = _this.SaveApi(_this.FormID, request) return err } diff --git a/utils/k3cloud/service/pln_forecast.go b/utils/k3cloud/service/pln_forecast.go index d173ab9..6edeba9 100644 --- a/utils/k3cloud/service/pln_forecast.go +++ b/utils/k3cloud/service/pln_forecast.go @@ -26,7 +26,7 @@ func (_this *PlnForecastService) SaveForecast(_request pln_forecast.PlnForecastS Model: _request, } - response, err = _this.SaveApi(_this.FormID, request) + response, err, _ = _this.SaveApi(_this.FormID, request) return } diff --git a/utils/log/log.go b/utils/log/log.go new file mode 100644 index 0000000..236a4c8 --- /dev/null +++ b/utils/log/log.go @@ -0,0 +1,95 @@ +package log + +import ( + "github.com/spf13/viper" + "leit.com/LAPP_CHEERSSON_BACKEND/utils" + "os" + "strings" + "time" +) + +var loggerConfig = new(outputSettings) +var logFileMap map[string]string + +func InitLog() error { + var err error + viper.SetConfigName("htm_log_config") + viper.SetConfigType("yaml") + viper.AddConfigPath("./conf/") + if err = viper.ReadInConfig(); err != nil { + return err + } + if err = viper.Unmarshal(loggerConfig); err != nil { + return err + } + for _, v := range loggerConfig.Config { + err = folder(v) + if err != nil { + panic(err) + } + } + return nil +} + +/** +*打开文件不存在创建文件 + */ +func folder(model outputDriver) error { + err := os.MkdirAll(model.Filename, os.ModePerm) + return err +} + +/** +写入文件 +*/ +func Write(model string, info map[string]string) { + year, month, day := time.Now().Date() + path := loggerConfig.Config[model].Filename + "/" + utils.ValueToString(year, "") + utils.ValueToString(month, "") + utils.ValueToString(day, "") + "." + loggerConfig.Config[model].Filetype + var file *os.File + message := loggerConfig.Config[model].Info + for _, v := range loggerConfig.Config[model].Replace { + message = strings.Replace(message, "["+v+"]", info[v], -1) + } + if !IsExist(path) { + message = loggerConfig.Config[model].Default + message + } + file, err := os.OpenFile(path, os.O_CREATE|os.O_APPEND, 0666) + if err != nil { + panic(err) + } + defer file.Close() + file.Write([]byte(message)) +} + +//判断文件是否存在 +func IsExist(path string) bool { + _, err := os.Stat(path) + return err == nil || os.IsExist(err) +} + +/** +* 判断文件是否存在 存在返回 true 不存在返回false + */ +func checkFileIsExist(filename string) bool { + var exist = true + if _, err := os.Stat(filename); os.IsNotExist(err) { + exist = false + } + return exist +} + +type outputSettings struct { + Config map[string]outputDriver `yaml:"config"` +} +type outputDriver struct { + Filename string `yaml:"filename"` + Filetype string `yaml:"filetype"` + Default string `yaml:"default"` + MaxAge string `yaml:"MaxAge"` + Info string `yaml:"info"` + Replace []string `yaml:"replace"` +} + +func LogFileMapInit() { + logFileMap = make(map[string]string) +} diff --git a/utils/utils.go b/utils/utils.go index d3ac1ea..b53fe4c 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -445,17 +445,16 @@ func MinTime(vals ...time.Time) time.Time { return min } - -func Decimal(value float64,length int) float64 { - if length <= 0{ +func Decimal(value float64, length int) float64 { + if length <= 0 { length = 2 } - format := "%."+strconv.Itoa(length)+"f" + format := "%." + strconv.Itoa(length) + "f" value, _ = strconv.ParseFloat(fmt.Sprintf(format, value), 64) return value } -func FloatToString(value float64,length int) string { +func FloatToString(value float64, length int) string { value = math.Floor(value + 0/5) return strconv.FormatFloat(value, 'f', -1, 64) } @@ -463,4 +462,4 @@ func FloatToString(value float64,length int) string { func Round(f float64, n int) float64 { n10 := math.Pow10(n) return math.Trunc((f+0.5/n10)*n10) / n10 -} \ No newline at end of file +}