Bladeren bron

Merge branch 'develop' of http://code.dashoo.cn/chengjian/opms_backend into feature/customer_1.0

wangxingcheng 2 jaren geleden
bovenliggende
commit
5a7086df70

+ 1 - 0
opms_admin/.gitignore

@@ -28,3 +28,4 @@ admin
 
 .idea/
 /go.sum
+/opms_admin

+ 4 - 0
opms_admin/app/dao/internal/sys_menu.go

@@ -11,6 +11,7 @@ import (
 	"github.com/gogf/gf/frame/g"
 	"github.com/gogf/gf/frame/gmvc"
 	"time"
+
 	"dashoo.cn/micro/app/model"
 )
 
@@ -28,6 +29,7 @@ type sysMenuColumns struct {
 	Id          string // 菜单ID
 	MenuName    string // 菜单名称
 	ParentId    string // 父菜单ID
+	Name        string // 路由名称
 	Path        string // 路由地址
 	Component   string // 组件路径
 	Query       string // 路由参数
@@ -62,6 +64,7 @@ var (
 			Id:          "id",
 			MenuName:    "menu_name",
 			ParentId:    "parent_id",
+			Name:        "name",
 			Path:        "path",
 			Component:   "component",
 			Query:       "query",
@@ -98,6 +101,7 @@ func NewSysMenuDao(tenant string) SysMenuDao {
 			Id:          "id",
 			MenuName:    "menu_name",
 			ParentId:    "parent_id",
+			Name:        "name",
 			Path:        "path",
 			Component:   "component",
 			Query:       "query",

+ 1 - 0
opms_admin/app/model/internal/sys_menu.go

@@ -13,6 +13,7 @@ type SysMenu struct {
 	Id          int         `orm:"id,primary"   json:"id"`          // 菜单ID
 	MenuName    string      `orm:"menu_name"    json:"menuName"`    // 菜单名称
 	ParentId    int         `orm:"parent_id"    json:"parentId"`    // 父菜单ID
+	Name        string      `orm:"name"         json:"name"`        // 路由名称
 	Path        string      `orm:"path"         json:"path"`        // 路由地址
 	Component   string      `orm:"component"    json:"component"`   // 组件路径
 	Query       string      `orm:"query"        json:"query"`       // 路由参数

+ 3 - 5
opms_admin/app/model/sys_dict_data.go

@@ -57,15 +57,13 @@ type DictDataAddReq struct {
 	DictSort  int    `p:"dictSort"  v:"integer#排序只能为整数"`
 	CssClass  string `p:"cssClass"`
 	ListClass string `p:"listClass"`
-	//IsDefault string `p:"isDefault" v:"required|in:10,20#系统默认不能为空|默认值只能为10或20"`
-	Status   string `p:"status"    v:"required|in:10,20#状态不能为空|状态只能为10或20"`
-	Remark   string `p:"remark"`
-	CreateBy uint64
+	IsDefault string `p:"isDefault" v:"required|in:10,20#系统默认不能为空|默认值只能为10或20"`
+	Status    string `p:"status"    v:"required|in:10,20#状态不能为空|状态只能为10或20"`
+	Remark    string `p:"remark"`
 }
 
 // EditDictDataReq 修改字典数据操作请求参数
 type EditDictDataReq struct {
 	DictCode int `p:"dictCode" v:"required|min:1#主键ID不能为空|主键ID不能小于1"`
-	UpdateBy uint64
 	DictDataAddReq
 }

+ 4 - 0
opms_admin/app/model/sys_menu.go

@@ -20,6 +20,7 @@ type SysMenuReq struct {
 	Id         int    `json:"id"`                             // ID
 	ParentId   int    `json:"parentId"`                       // 父菜单ID
 	MenuName   string `json:"menuName" v:"required#菜单名称不能为空"` // 菜单名称
+	Name       string `json:"name"`                           // 路由名称
 	Path       string `json:"path"`                           // 路由地址
 	Component  string `json:"component"`                      // 组件路径
 	Query      string `json:"query"`                          // 路由参数
@@ -58,6 +59,9 @@ type Meta struct {
 }
 
 func (m SysMenu) ConvName() string {
+	if m.Name != "" {
+		return m.Name
+	}
 	name := m.Path
 	if strings.Contains(m.Path, "/") {
 		nameList := strings.Split(m.Path, "/")

+ 1 - 1
opms_admin/app/service/context.go

@@ -156,7 +156,7 @@ func (c *contextService) GetCxtUserName() string {
 	if c.CxtUser == nil {
 		return "-1"
 	}
-	return c.CxtUser.UserName
+	return c.CxtUser.NickName
 }
 
 func (c *contextService) GetCxtUserDeptId() int {

+ 4 - 0
opms_admin/app/service/sys_dict_type.go

@@ -4,6 +4,7 @@ import (
 	"context"
 	"dashoo.cn/micro/app/dao"
 	"dashoo.cn/micro/app/model"
+	"dashoo.cn/opms_libary/myerrors"
 	"github.com/gogf/gf/container/garray"
 	"github.com/gogf/gf/database/gdb"
 	"github.com/gogf/gf/errors/gerror"
@@ -113,6 +114,9 @@ func (s *dictTypeService) UpdateById(req *model.SysDictTypeEditReq) error {
 		if err != nil {
 			return err
 		}
+		if dt == nil {
+			return myerrors.NewMsgError(nil, "字典不存在")
+		}
 		//修改字典类型
 		data := new(model.SysDictType)
 		if err := gconv.Struct(req, data); err != nil {

+ 1 - 0
opms_parent/.gitignore

@@ -28,3 +28,4 @@ admin
 
 .idea/
 gen.sh
+/opms_parent

+ 1 - 0
opms_parent/app/model/proj/proj_business.go

@@ -83,6 +83,7 @@ type BusinessProduct struct {
 type BusinessGradationReq struct {
 	Id      int    `json:"id"        v:"required# id不能为空"`                             // 主键
 	NboType string `json:"nboType"        v:"required|in:A,B,C#项目类别不能为空|项目类别只能为A、B、C"` // 项目类别(A类B类C类)
+	Remark  string `json:"remark"`                                                     // 备注
 }
 
 // BusinessTransferReq 项目转移请求

+ 1 - 1
opms_parent/app/service/context.go

@@ -63,7 +63,7 @@ func (c *ContextService) GetCxtUserName() string {
 	if c.CxtUser == nil {
 		return "-1"
 	}
-	return c.CxtUser.UserName
+	return c.CxtUser.NickName
 }
 
 func (c *ContextService) GetCxtUserDeptId() int {

+ 5 - 1
opms_parent/app/service/cust/cust_customer.go

@@ -360,6 +360,10 @@ func (s *CustomerService) CustAbstract(Id int64) (followInfo *model.Follow, err
 		g.Log().Error(err)
 		return
 	}
+	if followTime == nil {
+		err = myerrors.NewMsgError(nil, "获取客户信息不存在")
+		return
+	}
 	now := gtime.Now()
 	var hours float64
 	if followTime.FollowUpDate == nil {
@@ -416,7 +420,7 @@ func (s *CustomerService) ChangeCustBelong(Ids []int64, salesId int64, salesName
 	return
 }
 
-//CreateDynamics 创建客户动态信息
+// CreateDynamics 创建客户动态信息
 func (s *CustomerService) CreateDynamics(opnTpye string, content interface{}, ids ...int64) (err error) {
 	datas := make([]*model.CustCustomerDynamics, 0)
 	for _, id := range ids {

+ 6 - 0
opms_parent/app/service/plat/plat_task.go

@@ -268,6 +268,9 @@ func (s *taskService) ChangeStatus(req *model.ChangeStatusReq) (err error) {
 	if err != nil {
 		return err
 	}
+	if task == nil {
+		return fmt.Errorf("数据异常,无匹配数据")
+	}
 	// 状态数据一致性判断
 	if (req.Type == "TaskStatus" && task.TaskStatus != req.OldStatus) || (req.Type == "IsOverdue" && task.IsOverdue != req.OldStatus) {
 		return fmt.Errorf("状态不匹配,进行该操作")
@@ -319,6 +322,9 @@ func (s *taskService) Handle(req *model.HandleReq) (err error) {
 		if err != nil {
 			return err
 		}
+		if task == nil {
+			return fmt.Errorf("数据异常,无匹配数据")
+		}
 		// 构造更新数据
 		handleData := g.Map{
 			"task_status":      "20",

+ 15 - 12
opms_parent/app/service/proj/business.go

@@ -12,6 +12,7 @@ import (
 	"github.com/gogf/gf/frame/g"
 	"github.com/gogf/gf/os/gtime"
 	"github.com/gogf/gf/util/gconv"
+	"strconv"
 	"strings"
 )
 
@@ -65,8 +66,8 @@ func (p *businessService) GetBusinessProduct(id int64) (productList []*model.Pro
 	return
 }
 
-func (p *businessService) GetBusinessDynamics(req *model.BusinessReq) (total int, result g.ListStrAny, err error) {
-	result = make(g.ListStrAny, 0)
+func (p *businessService) GetBusinessDynamics(req *model.BusinessReq) (total int, result g.MapStrAny, err error) {
+	result = make(g.MapStrAny, 0)
 	dynamicsDao := projDao.NewProjBusinessDynamicsDao(p.Tenant).ProjBusinessDynamicsDao.Where(projDao.ProjBusinessDynamics.Columns.BusId, req.BusId)
 	total, err = dynamicsDao.Count()
 	if err != nil {
@@ -74,8 +75,7 @@ func (p *businessService) GetBusinessDynamics(req *model.BusinessReq) (total int
 		return
 	}
 	dynamicsList, err := dynamicsDao.Page(req.GetPage()).Order("created_time desc").All()
-	if err != nil || len(dynamicsList) == 0 {
-		g.Log().Error(err)
+	if err != nil || dynamicsList == nil {
 		return
 	}
 	// 数据树格式转换
@@ -83,10 +83,11 @@ func (p *businessService) GetBusinessDynamics(req *model.BusinessReq) (total int
 	for k, v := range dynamicsList {
 		opnDate := gtime.New(v.OpnDate).Format("Y-m-d")
 		if opnDateFlag == opnDate && k != 0 {
-			result[len(result)-1][opnDate] = append(result[len(result)-1][opnDate].(g.ListStrAny), g.Map{
+			result[opnDate] = append(result[opnDate].(g.ListStrAny), g.Map{
 				"opnPeople":  v.OpnPeople,
 				"opnDate":    v.OpnDate,
 				"opnType":    v.OpnType,
+				"remark":     v.Remark,
 				"opnContent": gconv.Map(v.OpnContent),
 			})
 		} else {
@@ -95,11 +96,10 @@ func (p *businessService) GetBusinessDynamics(req *model.BusinessReq) (total int
 				"opnPeople":  v.OpnPeople,
 				"opnDate":    v.OpnDate,
 				"opnType":    v.OpnType,
+				"remark":     v.Remark,
 				"opnContent": gconv.Map(v.OpnContent),
 			})
-			result = append(result, g.Map{
-				opnDate: temp,
-			})
+			result[opnDate] = temp
 		}
 	}
 	return
@@ -145,7 +145,8 @@ func (p *businessService) Create(req *model.AddProjBusinessReq) (err error) {
 		totalPrice += v.TotalPrice
 		service.SetCreatedInfo(v, p.GetCxtUserId(), p.GetCxtUserName())
 	}
-
+	businessData.NboCode = "NBO" + strconv.Itoa(int(gtime.Timestamp()))
+	businessData.NboStatus = "10"
 	businessData.NboType = "C"
 	businessData.ApproStatus = "10"
 	businessData.EstTransPrice = totalPrice
@@ -291,10 +292,8 @@ func (p *businessService) BusinessGradation(req *model.BusinessGradationReq) err
 		return myerrors.NewMsgError(nil, "同级无法进行调级。")
 	}
 	opnType := "40"
-	opnContent := "项目升级 " + business.NboType + " => " + req.NboType
 	// A < B return -1 项目降级
 	if strings.Compare(business.NboType, req.NboType) < 0 {
-		opnContent = "项目降级 " + business.NboType + " => " + req.NboType
 		opnType = "50"
 	}
 
@@ -312,8 +311,12 @@ func (p *businessService) BusinessGradation(req *model.BusinessGradationReq) err
 		dynamics := model.ProjBusinessDynamics{
 			BusId:   business.Id,
 			OpnType: opnType,
+			Remark:  req.Remark,
 		}
-		err = p.CreateProjBusinessDynamics(tx, dynamics, opnContent)
+		err = p.CreateProjBusinessDynamics(tx, dynamics, g.Map{
+			"origNboType": business.NboType,
+			"nboType":     req.NboType,
+		})
 		return err
 	})
 	return err

+ 37 - 2
opms_parent/app/service/proj/business_contact.go

@@ -6,6 +6,8 @@ import (
 	projDao "dashoo.cn/micro/app/dao/proj"
 	projModel "dashoo.cn/micro/app/model/proj"
 	"dashoo.cn/micro/app/service"
+	"dashoo.cn/opms_libary/myerrors"
+	"github.com/gogf/gf/database/gdb"
 	"github.com/gogf/gf/frame/g"
 )
 
@@ -52,11 +54,44 @@ func (p *businessContactService) Create(req *projModel.BusinessContactReq) (err
 		service.SetCreatedInfo(data, p.GetCxtUserId(), p.GetCxtUserName())
 		contactList = append(contactList, data)
 	}
-	_, err = p.Dao.Insert(&contactList)
+	b, _ := NewBusinessService(p.Ctx)
+	err = p.Dao.Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
+		_, err = p.Dao.Insert(&contactList)
+		if err != nil {
+			return err
+		}
+		// 添加项目动态
+		dynamics := projModel.ProjBusinessDynamics{
+			BusId:   req.BusId,
+			OpnType: "70",
+		}
+		err = b.CreateProjBusinessDynamics(tx, dynamics, nil)
+		return err
+	})
 	return
 }
 
 func (p *businessContactService) DeleteByIds(ids []int64) (err error) {
-	_, err = p.Dao.WhereIn(projDao.ProjBusinessContact.Columns.Id, ids).Delete()
+	result, err := p.Dao.Where(projDao.ProjBusinessContact.Columns.Id+" IN(?)", ids).One()
+	if err != nil {
+		return err
+	}
+	if result == nil {
+		return myerrors.NewMsgError(nil, "联系人不存在")
+	}
+	b, _ := NewBusinessService(p.Ctx)
+	err = p.Dao.Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
+		_, err = p.Dao.WhereIn(projDao.ProjBusinessContact.Columns.Id, ids).Delete()
+		if err != nil {
+			return err
+		}
+		// 添加项目动态
+		dynamics := projModel.ProjBusinessDynamics{
+			BusId:   result.BusId,
+			OpnType: "80",
+		}
+		err = b.CreateProjBusinessDynamics(tx, dynamics, nil)
+		return err
+	})
 	return
 }

BIN
opms_parent/opms_parent