苏州瑞玛APS项目web后台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

454 lines
12 KiB

package task
import (
"fmt"
"github.com/go-xorm/xorm"
dal "leit.com/LAPP_CHEERSSON_BACKEND/dao/base"
"leit.com/LAPP_CHEERSSON_BACKEND/db"
"leit.com/LAPP_CHEERSSON_BACKEND/grmi"
meta "leit.com/LAPP_CHEERSSON_BACKEND/meta/base"
model "leit.com/LAPP_CHEERSSON_BACKEND/models/base"
svrAp "leit.com/LAPP_CHEERSSON_BACKEND/services/ap"
"leit.com/LAPP_CHEERSSON_BACKEND/services/ap/implments"
svr "leit.com/LAPP_CHEERSSON_BACKEND/services/base"
"leit.com/LAPP_CHEERSSON_BACKEND/services/erp"
svrMe "leit.com/LAPP_CHEERSSON_BACKEND/services/me"
"leit.com/LAPP_CHEERSSON_BACKEND/utils"
utilService "leit.com/LAPP_CHEERSSON_BACKEND/utils/k3cloud/service"
"math"
"os"
"time"
)
type TypeTime struct {
OneTime time.Time
}
var lastTime = TypeTime{}
var serviceOfArticle = svr.NewArticleService()
var serviceOfBomList = svrMe.NewBomLstService()
var serviceOfCustomer = svr.NewCustomerService()
//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()
})
//go func() {
// timer := time.NewTicker(30 * time.Second)
// for {
// select {
// case <-timer.C:
// erp.PublishPlan(100, "admin")
// }
// }
//}()
i := true
for true {
oneTask(time.Time{})
if i {
//erp.PublishPlan(100, "admin")
i = false
}
time.Sleep(time.Minute * 4)
}
}
//1天任务
func oneTask(_date time.Time) {
//需要定时登录erp
utils.K3configInit()
//if DaysBetweenDates(lastTime.OneTime, _date) >= 1 {
//go func() {
//ImportMaterial()
//ImportMaterialGroupSearch()
//val := make(map[string]string)
//val["bindCust"] = "011016"
//ImportArticle(val, "")
//BindArticle(val)
//ImportBomList()
//ImportCustomer()
//ImportSaleOrder()
//ImportCustomerMaterialSearch()
//ImportProjectSearch()
//}()
//ImportUnit()
lastTime.OneTime = _date
//}
}
//物料
func ImportArticle(taskVal map[string]string, ids string) {
fiterString := "FErpClsID IN('1','2','3')"
if ids != "" {
fiterString += " and FMaterialGroup IN(" + ids + ")"
}
response := utilService.BdMAterialServiceInit().MaterialSearch(fiterString, "")
//将数据发送到servvice
serviceOfArticle.ImportArticle(response, taskVal)
}
//导入bom
func ImportBomList() {
response := utilService.EngBomServiceInit().EngBomSearch("", "")
serviceOfBomList.ImportBomList(response)
}
//导入客户
func ImportCustomer() {
response := utilService.CustomerInit().CustomerSearch("", "")
serviceOfCustomer.ImportCustomer(response)
}
//用户自动绑定客户
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)
}
func ImportWeiWai() {
impl := implments.NewBalanceServiceImplement()
alldata_Article := impl.GetGlobalArticleData()
erp.GetWeiWaiWeekQty(model.PlantNr, "system", &alldata_Article)
erp.GetWeiWaiQty(model.PlantNr, "system", &alldata_Article)
}
func ImportZhaizhi() {
impl := implments.NewBalanceServiceImplement()
alldata_Article := impl.GetGlobalArticleData()
erp.GetZhaizhiQty(model.PlantNr, "system", &alldata_Article)
erp.GetZhaizhiWeekQty(model.PlantNr, "system", &alldata_Article)
}
func ImportChaigou() {
impl := implments.NewBalanceServiceImplement()
alldata_Article := impl.GetGlobalArticleData()
erp.GetChaigouQty(model.PlantNr, "system", &alldata_Article)
erp.GetWaigouWeekQty(model.PlantNr, "system", &alldata_Article)
}
//销售订单
func ImportSaleOrder() {
//response := utilService.SaleOrderInit().SaleOrderSearch("", "")
//serviceOfSaleOrder.ImportSalesOrder(response)
impl := implments.NewBalanceServiceImplement()
alldata_Article := impl.GetGlobalArticleData()
erp.GetOrderQty(model.PlantNr, "system", &alldata_Article)
}
func ImportDuli() {
// 独立需求
impl := implments.NewBalanceServiceImplement()
alldata_Article := impl.GetGlobalArticleData()
erp.GetDuliQty(model.PlantNr, "system", &alldata_Article)
}
//物料分组
func ImportMaterialGroupSearch() string {
response := utilService.MaterialGroupInit().MaterialGroupSearch("", "")
//将数据放入到map中
utils.ClearMaterialgroupMap()
levelMap := make(map[int]int)
ids := ""
for _, v := range response {
//判断层级是第几级
pid := utils.ValueToInt(v[1], 0)
id := utils.ValueToInt(v[0], 0)
fNumber := utils.ValueToString(v[2], "")
if pid == 0 {
levelMap[id] = 1
utils.AppendMaterialgroupMap(id, utils.GetMaterialgroupMap(pid))
continue
} else {
levelMap[id] = levelMap[pid] + 1
}
if levelMap[id] == 2 {
//该层级确认
if len(fNumber) == 0 {
utils.AppendMaterialgroupMap(id, "")
continue
}
switch fNumber[len(fNumber)-1 : len(fNumber)] {
case "F":
utils.AppendMaterialgroupMap(id, "FINISHED")
if ids != "" {
ids += ","
}
ids += utils.ValueToString(id, "")
break
case "R":
utils.AppendMaterialgroupMap(id, "MATERIALS")
if ids != "" {
ids += ","
}
ids += utils.ValueToString(id, "")
break
case "S":
utils.AppendMaterialgroupMap(id, "SEMI_FINISHED")
if ids != "" {
ids += ","
}
ids += utils.ValueToString(id, "")
break
default:
utils.AppendMaterialgroupMap(id, "")
break
}
} else {
utils.AppendMaterialgroupMap(id, utils.GetMaterialgroupMap(pid))
if utils.GetMaterialgroupMap(pid) != "" {
if ids != "" {
ids += ","
}
ids += utils.ValueToString(id, "")
}
}
}
return ids
}
//客户物料对应表
func ImportCustomerMaterialSearch() {
svrCust := utilService.CustomerMaterialInit()
response := svrCust.CustomerMaterialSearch("", "")
serviceOfCustArtlst.ImportCustArtlst(svrCust.FieldKeys, response)
}
//项目
func ImportProjectSearch() {
svrProject := utilService.ProjectInit()
response := svrProject.ProjectSearch("", "")
serviceOfProject.ImportProject(svrProject.FieldKeys, response)
}
//辅助参数
func ImportMaterial() {
//加载map
response := utilService.BosAssistantdataSelectServiceInit().AssistantdatalSearch("", "")
utils.ClearMaterialMap()
for _, v := range response {
utils.AppendMaterialMap(utils.ValueToString(v[2], ""), utils.ValueToString(v[1], ""))
}
return
}
//单位
func ImportUnit() {
response := utilService.DdUnitServiceInit().DdUnitSearch("", "")
serviceOfUom.ImportUom(response)
}
//查询组织
func ImportOrg() []OrgType {
response := utilService.OrganizationsServiceInit().OrganizationsSearch("", "")
var data []OrgType
for _, v := range response {
data = append(data, OrgType{
FNumber: utils.ValueToString(v[0], ""),
FName: utils.ValueToString(v[1], ""),
FOrgID: utils.ValueToString(v[2], ""),
})
}
return data
}
//查询员工
func ImportEmpinfo() []Empinfo {
response := utilService.EmpinfoServiceInit().EmpinfoSearch("", "")
var data []Empinfo
for _, v := range response {
data = append(data, Empinfo{
FNumber: utils.ValueToString(v[0], ""),
FName: utils.ValueToString(v[1], ""),
FID: utils.ValueToString(utils.ValueToInt(v[2], 0), ""),
})
}
return data
}
//导入库存
func ImportBalance() {
engine := db.Eloquent.Master()
session := engine.NewSession()
defer session.Close()
dao := dal.NewArticleStockDAO(session, model.PlantNr, "system")
dao.DeleteWhere([]grmi.Predicate{meta.ArticleStock_PlantNr.NewPredicate(grmi.Equal, model.PlantNr)})
impl_Balance := implments.NewBalanceServiceImplement()
alldata_Article := impl_Balance.GetGlobalArticleDataNew()
erp.GetQiChuQty(model.PlantNr, "system", &alldata_Article)
erp.GetZhaizhiQty(model.PlantNr, "system", &alldata_Article)
//erp.GetChaigouiQty(model.PlantNr, "system", &alldata_Article)
}
type Empinfo struct {
FNumber string `json:"FNumber"`
FName string `json:"FName"`
FID string `json:"FID"`
}
type OrgType struct {
FNumber string `json:"FNumber"`
FName string `json:"FName"`
FOrgID string `json:"FOrgID"`
}
//DaysBetweenDates 返回前后两个日期共包含多少天
func DaysBetweenDates(startDate, endDate time.Time) int {
return int(math.Floor(math.Abs(endDate.Sub(startDate).Hours()/24))) + 1
}
type TaskParam struct {
TaskId int `xorm:"int 'TaskId'"`
ShellName string `xorm:"nvarchar(255) 'ShellName'"`
ParamName string `xorm:"nvarchar(255) 'ParamName'"`
ParamValue string `xorm:"nvarchar(255) 'ParamValue'"`
ValueType string `xorm:"int 'ValueType'"`
}
func EtlTaskInit() error {
var err error
utils.TimezoneLocation, err = time.LoadLocation("Asia/Shanghai")
if err != nil {
return fmt.Errorf("init time zone failed:" + err.Error())
}
//获取参数
if len(os.Args) < 6 {
return fmt.Errorf("参数长度错误")
}
//目标链接
var targetDsn = os.Args[2]
var taskDsn = os.Args[3]
var taskID = os.Args[5]
//需要查询任务 配置
//实例化任务数据库
task, err := xorm.NewEngine("mssql", taskDsn)
if err != nil {
return fmt.Errorf("初始化任务数据库引擎错误:" + err.Error())
}
var taskList []TaskParam
//查询任务参数
err = task.Table("ShellParam").Where("TaskId=?", taskID).Find(&taskList)
if err != nil {
return fmt.Errorf("任务参数查询错误:" + err.Error())
}
valMap := make(map[string]string)
for _, v := range taskList {
valMap[v.ParamName] = v.ParamValue
}
//实例化金蝶云
utils.K3configInit()
if _info, ok := valMap["FUseOrgId"]; ok {
utils.K3Obj.FUseOrgId = _info
} else {
return fmt.Errorf("缺少参数配置FUseOrgId")
}
if _info, ok := valMap["FUseOrgNo"]; ok {
utils.K3Obj.FUseOrgNo = _info
} else {
return fmt.Errorf("缺少参数配置FUseOrgNo")
}
//实例化目标数据库
var slaves []*xorm.Engine
var master *xorm.Engine
master, err = xorm.NewEngine("mssql", targetDsn)
if err != nil {
return fmt.Errorf("链接目标库失败:" + err.Error())
}
if err = master.Ping(); err != nil {
return fmt.Errorf("链接目标库失败:" + err.Error())
}
master.SetTZLocation(utils.TimezoneLocation)
master.SetTZDatabase(utils.TimezoneLocation)
db.Eloquent, err = xorm.NewEngineGroup(master, slaves)
if err != nil {
return fmt.Errorf("目标库使用错误:" + err.Error())
}
return nil
}
func EtlTaskArticleInit() (error, map[string]string) {
var err error
utils.TimezoneLocation, err = time.LoadLocation("Asia/Shanghai")
if err != nil {
return fmt.Errorf("init time zone failed:" + err.Error()), nil
}
//获取参数
if len(os.Args) < 6 {
return fmt.Errorf("参数长度错误"), nil
}
//目标链接
var targetDsn = os.Args[2]
var taskDsn = os.Args[3]
var taskID = os.Args[5]
//需要查询任务 配置
//实例化任务数据库
task, err := xorm.NewEngine("mssql", taskDsn)
if err != nil {
return fmt.Errorf("初始化任务数据库引擎错误:" + err.Error()), nil
}
var taskList []TaskParam
//查询任务参数
err = task.Table("ShellParam").Where("TaskId=?", taskID).Find(&taskList)
if err != nil {
return fmt.Errorf("任务参数查询错误:" + err.Error()), nil
}
valMap := make(map[string]string)
for _, v := range taskList {
valMap[v.ParamName] = v.ParamValue
}
//实例化金蝶云
utils.K3configInit()
if _info, ok := valMap["FUseOrgId"]; ok {
utils.K3Obj.FUseOrgId = _info
} else {
return fmt.Errorf("缺少参数配置FUseOrgId"), nil
}
if _info, ok := valMap["FUseOrgNo"]; ok {
utils.K3Obj.FUseOrgNo = _info
} else {
return fmt.Errorf("缺少参数配置FUseOrgNo"), nil
}
//实例化目标数据库
var slaves []*xorm.Engine
var master *xorm.Engine
master, err = xorm.NewEngine("mssql", targetDsn)
if err != nil {
return fmt.Errorf("链接目标库失败:" + err.Error()), nil
}
if err = master.Ping(); err != nil {
return fmt.Errorf("链接目标库失败:" + err.Error()), nil
}
master.SetTZLocation(utils.TimezoneLocation)
master.SetTZDatabase(utils.TimezoneLocation)
db.Eloquent, err = xorm.NewEngineGroup(master, slaves)
if err != nil {
return fmt.Errorf("目标库使用错误:" + err.Error()), nil
}
return nil, valMap
}