Commit 59d05237 by wang

更改数据合并规则

parent 069ef7c2
......@@ -22,37 +22,40 @@ func main() {
if err := boot.Boot(path); err != nil {
panic(err)
}
//service.NewServiceSupplier().MergerCriteria()
//service.NewServiceSupplier().MappingHandle(2)
//return
switch taskName {
case "supplierMerge":
fmt.Println("供应商合并")
return
//return
service.NewServiceSupplier().MergerCriteria()
break
case "erpMapping":
fmt.Println("erp映射")
return
//return
service.NewServiceSupplier().MappingHandle(2)//映射处理(1,联营 2,erp 3,自营,4erp联营)
service.NewServiceSupplier().MappingHandle(4)
break
case "zyMapping":
fmt.Println("自营映射")
return
//
service.NewServiceSupplier().MappingHandle(3)//映射处理(1,联营 2,erp 3,自营)
break
case "lyMapping":
fmt.Println("联营映射")
return
//return
service.NewServiceSupplier().MappingHandle(1)//映射处理(1,联营 2,erp 3,自营)
break
case "lySkuMerge":
fmt.Println("联营sku整合")
return
//return
service.NewServiceLy().Merger()//联营sku整合
break
case "erpSkuMerge":
fmt.Println("erpSku整合")
return
//return
service.NewErpService().SyncErp()
break
}
......
1,深圳市港晟电子有限公司,测试-ws-标准名称1,L0000001,林文焕,贸易商,
2,深圳市华之电科技有限公司,测试-ws-标准名称1,L0000002,易敏,分销商/平台,
3,EBV ELEKTRONIK GmbH & Co KG,测试-ws-标准名称1,L0000003,李晶晶-zhong,代理,
4,Avnet EM EMEA,测试-ws-标准名称1,L0000004,罗晓民,贸易商,
5,深圳市创迪峰电子有限公司,测试-ws-标准名称2,L0000005,谭博利,分销商/平台,
6,萃冠电子贸易(深圳)有限公司,测试-ws-标准名称2,L0000006,张维,代理,
7,深圳市金硕微科技有限公司,测试-ws-标准名称2,L0000007,姜喆,原厂,
8,深圳市安亿电子有限公司,测试-ws-标准名称2,L0000008,张越,其他,
9,上海冠连电子科技有限公司,测试-ws-标准名称2,L0000009,林文焕,贸易商,
10,赛柏斯电子(香港)有限公司,测试-ws-标准名称3,L0000010,易敏,分销商/平台,
11,深圳盛泰科技有限公司,测试-ws-标准名称4,L0000011,李晶晶-zhong,贸易商,
12,河南圣泰科技有限公司,测试-ws-标准名称5,L0000012,罗晓民,贸易商,
13,深圳市达锐安电子有限公司,测试-ws-标准名称6,L0000013,谭博利,分销商/平台,
14,上海冠飞电子科技有限公司,测试-ws-标准名称7,L0000014,张维,贸易商,
15,深圳鸿登电子科技有限公司,测试-ws-标准名称8,L0000015,姜喆,贸易商,
16,深圳市英泰格电子科技有限公司,测试-ws-标准名称9,L0000016,张越,分销商/平台,
17,苏州创格尔电子有限公司,测试-ws-标准名称9,L0000017,张越,分销商/平台,
17,苏州创格尔电子有限公司2,测试-ws-标准名称9,L0000017,姜喆,分销商/平台,
3244,深圳市立创电子商务有限公司4,深圳市立创电子商务有限公司101,2021-02-25,L0010891,张右辉
3244,深圳市立创电子商务有限公司5,深圳市立创电子商务有限公司101,2021-02-25,L0010890,张右辉
3244,深圳市立创电子商务有限公司6,深圳市立创电子商务有限公司102,2021-02-25,L0010889,张右辉
3244,深圳市立创电子商务有限公司7,深圳市立创电子商务有限公司102,2021-02-25,L0010888,陈淑华123
3244,金蝶测试供应商1,金蝶标准供应商,2021-02-25,L0010888,张右辉
3244,金蝶测试供应商2,金蝶标准供应商,2021-02-25,L0010888,陈淑华
3244,金蝶测试供应商3,金蝶标准供应商,2021-02-25,L0010888,王松
\ No newline at end of file
1,深圳市港晟电子有限公司,测试-ws-标准名称1,L0000001,韦燕,贸易商,
2,深圳市华之电科技有限公司,测试-ws-标准名称1,L0000002,王秋,分销商/平台,
2,深圳市华之电科技有限公司,测试-ws-标准名称1,L0010864,王秋,分销商/平台,
3,EBV ELEKTRONIK GmbH & Co KG,测试-ws-标准名称1,L0000003,朱玉嘉,代理,
4,Avnet EM EMEA,测试-ws-标准名称1,L0000004,易娜,贸易商,
5,深圳市创迪峰电子有限公司,测试-ws-标准名称2,L0000005,易娜,分销商/平台,
6,萃冠电子贸易(深圳)有限公司,测试-ws-标准名称2,L0000006,朱玉嘉,代理,
7,深圳市金硕微科技有限公司,测试-ws-标准名称2,L0000007,朱玉嘉,原厂,
8,深圳市安亿电子有限公司,测试-ws-标准名称2,L0000008,王秋,其他,
9,上海冠连电子科技有限公司,测试-ws-标准名称2,L0000009,王秋,贸易商,
10,赛柏斯电子(香港)有限公司,测试-ws-标准名称3,L0000010,易娜,分销商/平台,
11,深圳盛泰科技有限公司,测试-ws-标准名称4,L0000011,王秋,贸易商,
12,河南圣泰科技有限公司,测试-ws-标准名称5,L0000012,易娜,贸易商,
3629,深圳市弘安盛电子有限公司,深圳市弘安盛电子有限公司,D0000724,韦燕,代理
3858,福州新拓电子有限公司,福州新拓电子有限公司,D0000383,王秋,代理
4831,深圳市信宏泰电子有限公司,深圳市信宏泰电子有限公司,0030000018,朱玉嘉,代理
1612,深圳视创盈科技有限公司,深圳视创盈科技有限公司,M0001606,王秋,贸易商
2884,深圳市恒迪通电子有限公司,深圳市恒迪通电子有限公司,M0000913,韦燕,贸易商
6988,深圳市立创电子商务有限公司,深圳市立创电子商务有限公司,M0000203,朱玉嘉,分销商/平台
8114,深圳市霆宝科技有限公司,深圳市霆宝科技有限公司,D0000876,韦燕,代理,2021-02-24
8148,鼎泰新科技(深圳)有限公司,鼎泰新科技(深圳)有限公司,ZY0000143,韦燕,代理
8175,Topgain Investments Ltd,Topgain Investments Ltd,D0000360,王秋,代理
1446,深圳辰达行电子有限公司,深圳辰达行电子有限公司,ZY0000039,韦燕,原厂
......@@ -87,6 +87,7 @@ func (this *ServiceSupplier)MappingHandle(MappingType int) {
}
/**
获取指定 supplierName 的供应商详情(状态是2的,is_type=0的),没有就新增
@purchaseNames 采购员s(excel 一个标准供应商有多个供应商,可能每个供应商都有采购员),用作新增供应商修改采购商
......@@ -95,24 +96,30 @@ func (this *ServiceSupplier)MappingHandle(MappingType int) {
func (this *ServiceSupplier) GetStatus2SupplierInfo(supplierName string,purchaseNames []interface{},groupName string) PoolSupplierEntity {
//todo 如果没有就新增,然后返回
dbSpu:= mysql.Conn("supp") //spu实例化链接
poolSupplierEntity:=PoolSupplierEntity{}
has,err:= dbSpu.Table("lie_supplier_channel").Where("is_type=? and status=? and supplier_name=?",0,2,supplierName).Get(&poolSupplierEntity)
poolSupplierEntitys:=[]PoolSupplierEntity{}
err:=dbSpu.Table("lie_supplier_channel").Where("supplier_name=?",supplierName).Find(&poolSupplierEntitys)
if(err!=nil){
panic(TaskName+"[插入映射-查询标准]查询标供应商出错:"+"供应商标准名称:"+supplierName+err.Error())
syncLog.SyncInsertLog("mapping_insert","[插入映射-新增标准]查询标供应商出错:"+"供应商标准名称:"+supplierName+err.Error(),syncLog.LogLevelFatal)
panic(nil)
}
if(!has){//新增
has,poolSupplierEntity:=this.onlyOpenHandle(supplierName,poolSupplierEntitys)
if(has==true){
return poolSupplierEntity
}else{
common.PrintStdout().Printf("不存在此标准供应商,供应商名:%s,进行新增",supplierName)
poolSupplierEntity:=PoolSupplierEntity{}
poolSupplierEntity.Status=2
poolSupplierEntity.SupplierName=supplierName
_,err:= dbSpu.Table("lie_supplier_channel").Insert(&poolSupplierEntity)
if(err!=nil){
syncLog.SyncInsertLog(TaskName+"mapping_insert","[插入映射-新增标准]出错:"+"供应商标准名称:"+supplierName+err.Error(),syncLog.LogLevelFatal)
syncLog.SyncInsertLog("mapping_insert","[插入映射-新增标准]出错:"+"供应商标准名称:"+supplierName+err.Error(),syncLog.LogLevelFatal)
panic(nil)
}
//组装供应商编码供应商编码(内部和外部)
//组装供应商编码供应商编码(内部和外部)
oldStr:=fmt.Sprintf("%d",int64(10000000)+poolSupplierEntity.SupplierId)
poolSupplierEntity.SupplierCode=strings.Replace(oldStr,"1","L",1)
poolSupplierEntity.SupplierSn=strings.Replace(oldStr,"1","O",1)
//end
//end
//组装采购员
cmsEntitys:=[]CmsEntity{}//采购员 cmsDB数据
......@@ -132,11 +139,11 @@ func (this *ServiceSupplier) GetStatus2SupplierInfo(supplierName string,purchase
}
channelUidString=php2go.Implode(",",channelUidS)
poolSupplierEntity.ChannelUid=channelUidString
//end
//end
poolSupplierEntity.SupplierGroup= gconv.Int(SupplierGroupCn[groupName])
//修改
_,err= dbSpu.Table("lie_supplier_channel").Where("supplier_id=?",poolSupplierEntity.SupplierId).Update(&poolSupplierEntity)
//修改
_,err= dbSpu.Table("lie_supplier_channel").Where("supplier_id=?",poolSupplierEntity.SupplierId).Update(&poolSupplierEntity)
if(err!=nil){
errmsg:=fmt.Sprintf(TaskName+"[修改编码]出错:供应商标准名称:%s;%s;id:%d",supplierName,err.Error(),poolSupplierEntity.SupplierId)
syncLog.SyncInsertLog("mapping_insert",errmsg,syncLog.LogLevelFatal)
......@@ -144,12 +151,14 @@ func (this *ServiceSupplier) GetStatus2SupplierInfo(supplierName string,purchase
//panic("[插入映射-修改编码]出错:"+"供应商标准名称:"+supplierName+err.Error())
}
return poolSupplierEntity
//common.PrintStdout().Printf("[整合标准数据]查询标供应商:"+groupName+"内 供应商编码:"+oneSuplier["canal"]+"没有数据")
}else{
return poolSupplierEntity
}
}
func getStat() {
}
//插入映射
func (this *ServiceSupplier) InsertMapping(SupplierInfoOne SupplierMappingEntity) {
dbSpu:= mysql.Conn("supp") //spu实例化链接
......
......@@ -3,7 +3,7 @@ package service
import (
"fmt"
"go_supplier_task/pkg/common"
"go_supplier_task/pkg/gredis"
syncLog "go_supplier_task/pkg/logger/sync"
"go_supplier_task/pkg/mysql"
"sort"
)
......@@ -35,85 +35,109 @@ func (this *ServiceSupplier)MergerCriteria() {
PoolSupplierEntitys := make([]PoolSupplierEntity, 0)
for _,oneSuplier:=range supplierDataList{
poolSupplierEntity:=PoolSupplierEntity{}
has,err:= dbSpu.Table("lie_supplier_channel").Where("is_type=? and supplier_code=?",0,oneSuplier["canal"]).Get(&poolSupplierEntity)
has,err:= dbSpu.Table("lie_supplier_channel").Where("supplier_code=?",oneSuplier["canal"]).Get(&poolSupplierEntity)
if(err!=nil){
panic("[整合标准数据]查询标供应商出错:"+"供应商编码"+oneSuplier["canal"]+err.Error())
msg:="[整合标准数据]查询标供应商出错:"+"供应商编码"+oneSuplier["canal"]+err.Error()
syncLog.SyncInsertLog("merger_criteria",msg,syncLog.LogLevelFatal)
panic(nil)
}
if(!has){
common.PrintStdout().Printf("[整合标准数据]查询标供应商:"+groupName+"内 供应商编码:"+oneSuplier["canal"]+"没有数据")
msg:=fmt.Sprintf("[整合标准数据]查询标供应商:"+groupName+"内 供应商编码:"+oneSuplier["canal"]+"没有数据")
syncLog.SyncInsertLog("merger_criteria",msg,syncLog.LogLevelFatal)
continue
}else{
PoolSupplierEntitys=append(PoolSupplierEntitys,poolSupplierEntity)
}
}
sort.Sort(SupplierEntitySorter(PoolSupplierEntitys))
/**
启用 禁用规则:
以原始编码去标准供应商表查询状态,如果有两个以上是启用状态,随机选择一个启用,其他皆为禁用。
如果只有一个供应商启用状态,不用改变
如果都不是启用,选择最新的启用,其他都是禁用
*/
if(len(PoolSupplierEntitys)>0){
isUpdate:=false//组里有状态为2(启用)的,并且对其更新了
for _,SupplierOne:=range PoolSupplierEntitys{
SupplierOne.SupplierName=groupName
if(SupplierOne.Status==2){
if(isUpdate){
//todo 修改状态为禁用,更改成标准供应商名
SupplierOne.Status=-2
}else{
//todo 修改状态为启用(其实本来就是启用),更改成标准供应商名
isUpdate=true
SupplierOne.Status=2
}
}else{
//todo 修状态为禁用,更改成标准供应商名
SupplierOne.Status=-2
isExis,_:=this.onlyOpenHandle(groupName,PoolSupplierEntitys)
if(!isExis){
common.PrintStdout().Printf("[整合标准数据]标准供应商:"+groupName+" 组内没有对应联营供应商数据")
}
}
}
//启用唯一一个供应商处理
func (this *ServiceSupplier) onlyOpenHandle(groupName string,PoolSupplierEntitys []PoolSupplierEntity,updateCols ...string)(isExis bool,oneSupplierEntity PoolSupplierEntity){
/**
启用 禁用规则:
以原始编码去标准供应商表查询状态,如果有两个以上是启用状态,随机选择一个启用,其他皆为禁用。
如果只有一个供应商启用状态,不用改变
如果都不是启用,选择最新的启用,其他都是禁用
*/
dbSpu:= mysql.Conn("supp") //spu实例化链接
criterionSupplierEntity:=PoolSupplierEntity{}//标准供应商
has,err:= dbSpu.Table("lie_supplier_channel").Where("status=? and supplier_name=?",2,groupName).Get(&criterionSupplierEntity)
if(err!=nil){
errMsg:="[整合标准数据][插入映射-查询标准]查询标供应商出错:"+"供应商标准名称:"+groupName+err.Error()
syncLog.SyncInsertLog("merger_criteria",errMsg,syncLog.LogLevelFatal)
panic(nil)
}
var onlyOpenSupplier PoolSupplierEntity
isUpdate:=false//组里有状态为2(启用)的,并且对其更新了
if(has){
common.PrintStdout().Printf("[整合标准数据]已经存在标准供应商:"+groupName+"")
isUpdate=true
onlyOpenSupplier= criterionSupplierEntity
}
if(len(PoolSupplierEntitys)>0){
for _,SupplierOne:=range PoolSupplierEntitys{
SupplierOne.SupplierName=groupName
SupplierOne.IsType=0//改成真的
SupplierOne.Status=-2//禁用
if(SupplierOne.Status==2){//有状态为2的
if(!isUpdate ){
//todo 修改状态为启用
SupplierOne.Status=2
isUpdate=true
onlyOpenSupplier=SupplierOne
}
this.updateSupplier(SupplierOne)
}
//遍历到最后了还没有找到启用的供应商,就把第一个当成启用的供应商
if(!isUpdate){
//todo 修改状态为启用(其实本来就是启用),更改成标准供应商名
PoolSupplierEntitys[0].SupplierName=groupName
PoolSupplierEntitys[0].Status=2
this.updateSupplier(PoolSupplierEntitys[0])
}
this.updateSupplier(SupplierOne,updateCols...)
}
//遍历到最后了还没有找到启用的供应商,就把第一个当成启用的供应商
if(!isUpdate){
//todo 修改状态为启用(其实本来就是启用),更改成标准供应商名
PoolSupplierEntitys[0].SupplierName=groupName
PoolSupplierEntitys[0].Status=2
PoolSupplierEntitys[0].IsType=0
this.updateSupplier(PoolSupplierEntitys[0],updateCols...)
return true,PoolSupplierEntitys[0]
}else{
common.PrintStdout().Printf("[整合标准数据]标准供应商:"+groupName+" 组内没有对应联营供应商数据")
return true,onlyOpenSupplier
}
//panic("执行一组就退出")
}else{
return false,oneSupplierEntity
}
}
/**
更新供应商数据状态(单条)
@param status
@param supplierName
@param SupplierCode
*/
func (this *ServiceSupplier) updateSupplier(supplierEntity PoolSupplierEntity) {
func (this *ServiceSupplier) updateSupplier(supplierEntity PoolSupplierEntity,cols ...string) {
if(len(cols)<=0){
cols=[]string{
"is_type","updated","status","supplier_name",
}
}
dbSpu:= mysql.Conn("supp") //spu实例化链接
_,err:= dbSpu.Table("lie_supplier_channel").Where("supplier_id=?",supplierEntity.SupplierId).Update(supplierEntity)
_,err:= dbSpu.Table("lie_supplier_channel").Where("supplier_id=?",supplierEntity.SupplierId).Cols(cols...).Update(supplierEntity)
if(err!=nil){
errMsg:=fmt.Sprintf("修改失败:错误:%s;数据:%s",err.Error(),fmt.Sprintln(supplierEntity))
common.PrintStdout().Printf(errMsg)
this.RecordRedisErr(SupplierEerrKey,supplierEntity.SupplierId,errMsg)
syncLog.SyncInsertLog("merger_criteria",errMsg,syncLog.LogLevelFatal)
panic(nil)
}
common.PrintStdout().Printf("修改成功:%s",fmt.Sprintln(supplierEntity))
}
func (this *ServiceSupplier)RecordRedisErr(hashkey string,key interface{},value string) {
redisWriteConn := gredis.Conn("search_w")
defer redisWriteConn.Close()
_,err:=redisWriteConn.Do("HSET",hashkey,key,value)
if(err!=nil){
common.PrintStdout().Printf("HSET 失败"+err.Error())
}
}
......
......@@ -22,8 +22,10 @@ type PoolSupplierEntity struct {
Currency int `json:"currency" `//币种
TaxNumber string `json:"tax_number" `//币种
SupplierAddress string `json:"supplier_address" `//币种
SupplierGroup int `json:"supplier_group" `//分组
UpdateTime int `json:"update_time" xorm:"updated"`
SupplierGroup int `json:"supplier_group" `//分组
IsType int `json:"is_type"` //'1假 0真',
UpdateTime int `json:"update_time" xorm:"updated"`
}
//映射表
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment