Bläddra i källkod

销售事项、日历

hsun 1 år sedan
förälder
incheckning
b02f28ebbc
4 ändrade filer med 246 tillägg och 61 borttagningar
  1. 199 45
      controllers/roadshow/calendar.go
  2. 25 14
      models/roadshow/calendar.go
  3. 18 0
      routers/commentsRouter.go
  4. 4 2
      utils/constants.go

+ 199 - 45
controllers/roadshow/calendar.go

@@ -724,6 +724,24 @@ func (this *CalendarController) MattersList() {
 		this.FailWithMessage("获取事项信息失败", "获取事项信息失败,GetMattersList,Err:"+err.Error())
 		return
 	}
+
+	// 按钮权限,超过14天无按钮
+	now := time.Now().Local()
+	for _, v := range dataList {
+		// 结束日期14天后无编辑删除按钮权限
+		t := fmt.Sprintf("%s %s", v.EndDate, v.EndTime)
+		ed, e := time.ParseInLocation(utils.FormatDateTime, t, time.Local)
+		if e != nil {
+			this.FailWithMessage("事项结束日期有误", "事项结束日期有误, Err:"+err.Error())
+			return
+		}
+		ed = ed.AddDate(0, 0, 14)
+		if ed.Before(now) {
+			v.ButtonAuth.EditDisabled = true
+			v.ButtonAuth.RemoveDisabled = true
+		}
+	}
+
 	resp.Paging = page
 	resp.List = dataList
 	this.OkDetailed(resp, "获取成功")
@@ -789,6 +807,9 @@ func (this *CalendarController) MattersAdd() {
 		return
 	}
 
+	// 是否为销售
+	sales := isSellerRole(sysUser.RoleTypeCode)
+
 	startDateTime := req.StartDate + " " + req.StartTime
 	endDateTime := req.EndDate + " " + req.EndTime
 	//校验事项时间冲突
@@ -804,29 +825,31 @@ func (this *CalendarController) MattersAdd() {
 		}
 	}
 
-	//校验活动时间冲突--待接受
-	{
-		calendarCount, err := rs.CheckCalendar(startDateTime, endDateTime, "1", sysUser.AdminId, 0)
-		if err != nil {
-			this.FailWithMessage("时间冲突检测失败!", "时间冲突检测失败-CheckCalendarResearcherCount!Err:"+err.Error())
-			return
-		}
-		if calendarCount > 0 {
-			this.FailWithMessage("当前时间与待处理的申请有冲突,请与相关销售沟通!", "时间冲突检测失败-CheckCalendarResearcherCount!")
-			return
+	if !sales {
+		//校验活动时间冲突--待接受
+		{
+			calendarCount, err := rs.CheckCalendar(startDateTime, endDateTime, "1", sysUser.AdminId, 0)
+			if err != nil {
+				this.FailWithMessage("时间冲突检测失败!", "时间冲突检测失败-CheckCalendarResearcherCount!Err:"+err.Error())
+				return
+			}
+			if calendarCount > 0 {
+				this.FailWithMessage("当前时间与待处理的申请有冲突,请与相关销售沟通!", "时间冲突检测失败-CheckCalendarResearcherCount!")
+				return
+			}
 		}
-	}
 
-	//校验活动时间冲突--已接受
-	{
-		calendarCount, err := rs.CheckCalendar(startDateTime, endDateTime, "2", sysUser.AdminId, 0)
-		if err != nil {
-			this.FailWithMessage("时间冲突检测失败!", "时间冲突检测失败-CheckCalendarResearcherCount!Err:"+err.Error())
-			return
-		}
-		if calendarCount > 0 {
-			this.FailWithMessage("当前时间已被占用!", "时间冲突检测失败-CheckCalendarResearcherCount!")
-			return
+		//校验活动时间冲突--已接受
+		{
+			calendarCount, err := rs.CheckCalendar(startDateTime, endDateTime, "2", sysUser.AdminId, 0)
+			if err != nil {
+				this.FailWithMessage("时间冲突检测失败!", "时间冲突检测失败-CheckCalendarResearcherCount!Err:"+err.Error())
+				return
+			}
+			if calendarCount > 0 {
+				this.FailWithMessage("当前时间已被占用!", "时间冲突检测失败-CheckCalendarResearcherCount!")
+				return
+			}
 		}
 	}
 
@@ -861,13 +884,20 @@ func (this *CalendarController) MattersAdd() {
 	item.Status = 1
 	item.CreateTime = time.Now()
 	item.ModifyTime = time.Now()
+	if sales {
+		item.IsSeller = 1
+	}
 	id, err := roadshow.AddRsMatters(item)
 	if err != nil {
 		this.FailWithMessage("保存失败!", "保存失败,AddRsMatters Err:"+err.Error())
 		return
 	}
 	item.RsMattersId = int(id)
-	go rs.MatterToSH(*item)
+
+	// 销售的事项不同步上海
+	if !sales {
+		go rs.MatterToSH(*item)
+	}
 	this.OkDetailed(nil, "保存成功")
 }
 
@@ -949,6 +979,12 @@ func (this *CalendarController) MattersUpdate() {
 	} else {
 		updateParams["matter_content"] = req.MatterContent
 	}
+	req.EditReason = strings.TrimSpace(req.EditReason)
+	if req.EditReason == "" {
+		this.FailWithMessage("请填写修改原因!", "请填写修改原因")
+		return
+	}
+	updateParams["edit_reason"] = req.EditReason
 
 	startDateTime := req.StartDate + " " + req.StartTime
 	endDateTime := req.EndDate + " " + req.EndTime
@@ -971,11 +1007,22 @@ func (this *CalendarController) MattersUpdate() {
 		return
 	}
 
+	// 结束后14天不可再编辑
+	endP = endP.AddDate(0, 0, 14)
+	if endP.Before(time.Now().Local()) {
+		this.FailWithMessage("事项结束14天后不可再编辑!", "事项结束14天后不可再编辑!")
+		return
+	}
+
 	matterItem, err := roadshow.GetMattersById(req.RsMattersId)
 	if err != nil {
 		this.FailWithMessage("保存失败!", "保存失败,GetMattersById,Err:"+err.Error())
 		return
 	}
+
+	// 是否为销售
+	sales := isSellerRole(sysUser.RoleTypeCode)
+
 	//校验事项时间冲突
 	{
 		if matterItem != nil && (matterItem.StartDate != req.StartDate ||
@@ -995,28 +1042,30 @@ func (this *CalendarController) MattersUpdate() {
 		}
 	}
 
-	//校验活动时间冲突--待接受
-	{
-		calendarCount, err := rs.CheckCalendar(startDateTime, endDateTime, "1", sysUser.AdminId, 0)
-		if err != nil {
-			this.FailWithMessage("时间冲突检测失败!", "时间冲突检测失败-CheckCalendarResearcherCount!Err:"+err.Error())
-			return
-		}
-		if calendarCount > 0 {
-			this.FailWithMessage("当前时间与待处理的申请有冲突,请与相关销售沟通!", "时间冲突检测失败-CheckCalendarResearcherCount!")
-			return
-		}
-	}
-	//校验活动时间冲突--待接受
-	{
-		calendarCount, err := rs.CheckCalendar(startDateTime, endDateTime, "2", sysUser.AdminId, 0)
-		if err != nil {
-			this.FailWithMessage("时间冲突检测失败!", "时间冲突检测失败-CheckCalendarResearcherCount!Err:"+err.Error())
-			return
+	if !sales {
+		//校验活动时间冲突--待接受
+		{
+			calendarCount, err := rs.CheckCalendar(startDateTime, endDateTime, "1", sysUser.AdminId, 0)
+			if err != nil {
+				this.FailWithMessage("时间冲突检测失败!", "时间冲突检测失败-CheckCalendarResearcherCount!Err:"+err.Error())
+				return
+			}
+			if calendarCount > 0 {
+				this.FailWithMessage("当前时间与待处理的申请有冲突,请与相关销售沟通!", "时间冲突检测失败-CheckCalendarResearcherCount!")
+				return
+			}
 		}
-		if calendarCount > 0 {
-			this.FailWithMessage("时间冲突,已存在时间段内的活动!", "时间冲突检测失败-CheckCalendarResearcherCount!")
-			return
+		//校验活动时间冲突--待接受
+		{
+			calendarCount, err := rs.CheckCalendar(startDateTime, endDateTime, "2", sysUser.AdminId, 0)
+			if err != nil {
+				this.FailWithMessage("时间冲突检测失败!", "时间冲突检测失败-CheckCalendarResearcherCount!Err:"+err.Error())
+				return
+			}
+			if calendarCount > 0 {
+				this.FailWithMessage("时间冲突,已存在时间段内的活动!", "时间冲突检测失败-CheckCalendarResearcherCount!")
+				return
+			}
 		}
 	}
 
@@ -1031,7 +1080,11 @@ func (this *CalendarController) MattersUpdate() {
 		this.FailWithMessage("保存失败!", "保存失败!UpdateRsMatters:"+err.Error())
 		return
 	}
-	go rs.UpdateSHCalendarByMatter(req)
+
+	// 销售不做上海那边的处理
+	if !sales {
+		go rs.UpdateSHCalendarByMatter(req)
+	}
 	this.OkDetailed(nil, "保存成功")
 }
 
@@ -1059,12 +1112,38 @@ func (this *CalendarController) MattersDelete() {
 		return
 	}
 
+	matters, e := roadshow.GetMattersById(req.RsMattersId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			this.FailWithMessage("事项已被删除, 请刷新页面", "事项已被删除, 请刷新页面")
+			return
+		}
+		this.FailWithMessage("操作失败", "获取事项失败, Err: "+e.Error())
+		return
+	}
+
+	// 事项结束14天后不可再删除
+	t := fmt.Sprintf("%s %s", matters.EndDate, matters.EndTime)
+	ed, _ := time.ParseInLocation(utils.FormatDateTime, t, time.Local)
+	ed = ed.AddDate(0, 0, 14)
+	if ed.Before(time.Now().Local()) {
+		this.FailWithMessage("事项结束14天后不可再删除", "事项结束14天后不可再删除")
+		return
+	}
+
 	err = roadshow.DeleteRsMatters(req.RsMattersId)
 	if err != nil {
 		this.FailWithMessage("保存失败", "保存失败!DeleteRsMatters:"+err.Error())
 		return
 	}
-	go rs.DeleteSHMatter(req.RsMattersId)
+
+	// 是否为销售
+	sales := isSellerRole(sysUser.RoleTypeCode)
+
+	// 删除上海的路演活动, 销售不同步
+	if !sales {
+		go rs.DeleteSHMatter(req.RsMattersId)
+	}
 	this.OkDetailed(nil, "删除成功")
 }
 
@@ -1935,3 +2014,78 @@ func (this *CalendarController) MyCalendarDetail() {
 	resp.RsMattersList = matterList
 	this.OkDetailed(resp, "删除成功")
 }
+
+// SellerCalendarDetail
+// @Title 路演-销售日历详情
+// @Description 路演-销售日历详情
+// @Param   StartDate   query   string  true       "开始日期"
+// @Param   EndDate   query   string  true       "结束日期日期"
+// @Param   SellerId   query   int  true       "销售ID"
+// @Success 200 {object} roadshow.CalendarDetailResp
+// @router /seller/calendar/detail [get]
+func (this *CalendarController) SellerCalendarDetail() {
+	sysUser := this.AdminWx
+	if sysUser == nil {
+		this.FailWithMessage("请登录", "请登录,SysUser Is Empty")
+		return
+	}
+
+	startDate := this.GetString("StartDate")
+	endDate := this.GetString("EndDate")
+	sellerId, _ := this.GetInt("SellerId")
+	if startDate == "" || endDate == "" {
+		this.FailWithMessage("参数错误!", "参数错误 StartDate"+startDate+" EndDate:"+endDate)
+		return
+	}
+	if sellerId <= 0 {
+		calendarList := make([]*roadshow.CalendarListView, 0)
+		matterList := make([]*roadshow.RsMatters, 0)
+		resp := new(roadshow.CalendarPanelDetailResp)
+		resp.CalendarList = calendarList
+		resp.RsMattersList = matterList
+		this.OkDetailed(resp, "删除成功")
+		return
+	}
+
+	// 路演
+	condition := ` AND a.sys_user_id = ? AND b.start_date >= ? AND b.end_date <= ? AND b.status = 2`
+	pars := make([]interface{}, 0)
+	pars = append(pars, sellerId, startDate, endDate)
+	calendarList, err := roadshow.GetCalendarDetailList(condition, pars)
+	if err != nil {
+		this.FailWithMessage("获取数据失败", "获取数据失败, GetCalendarDetailList Err:"+err.Error())
+		return
+	}
+	if calendarList == nil {
+		calendarList = make([]*roadshow.CalendarListView, 0)
+	}
+
+	// 事项
+	matterList, err := roadshow.GetRsMattersList(startDate, endDate, sellerId)
+	if err != nil {
+		this.FailWithMessage("获取数据失败", "获取数据失败, GetRsMattersList Err:"+err.Error())
+		return
+	}
+	if matterList == nil {
+		matterList = make([]*roadshow.RsMatters, 0)
+	}
+
+	resp := new(roadshow.CalendarPanelDetailResp)
+	resp.CalendarList = calendarList
+	resp.RsMattersList = matterList
+	this.OkDetailed(resp, "删除成功")
+}
+
+// isSellerRole 是否为销售角色
+func isSellerRole(roleType string) (ok bool) {
+	sellerArr := []string{
+		utils.ROLE_TYPE_CODE_FICC_SELLER, utils.ROLE_TYPE_CODE_FICC_GROUP, utils.ROLE_TYPE_CODE_FICC_TEAM,
+		utils.ROLE_TYPE_CODE_FICC_DEPARTMENT, utils.ROLE_TYPE_CODE_FICC_ADMIN,
+		utils.ROLE_TYPE_CODE_RAI_SELLER, utils.ROLE_TYPE_CODE_RAI_GROUP, utils.ROLE_TYPE_CODE_RAI_DEPARTMENT,
+		utils.ROLE_TYPE_CODE_RAI_ADMIN,
+	}
+	if utils.InArrayByStr(sellerArr, roleType) {
+		ok = true
+	}
+	return
+}

+ 25 - 14
models/roadshow/calendar.go

@@ -259,6 +259,8 @@ type RsMatters struct {
 	CreateTime      time.Time `description:"创建时间"`
 	ModifyTime      time.Time `description:"修改时间"`
 	IsSynced        int       `description:"是否与上海同步 0:未同步 1:已同步"`
+	EditReason      string    `description:"修改原因"`
+	IsSeller        int       `description:"是否为销售事项: 0-否; 1-是"`
 }
 
 type UpdateMattersReq struct {
@@ -270,6 +272,7 @@ type UpdateMattersReq struct {
 	StartWeek     string `description:"开始日期周"`
 	EndWeek       string `description:"结束日期周"`
 	MatterContent string `description:"事项内容"`
+	EditReason    string `description:"修改原因"`
 }
 
 type CalendarDetailResp struct {
@@ -284,20 +287,28 @@ type MattersListResp struct {
 }
 
 type RsMattersView struct {
-	RsMattersId     int    `orm:"column(rs_matters_id);pk"`
-	SysUserId       int    `description:"添加事项人id"`
-	SysUserRealName string `description:"创建人姓名"`
-	StartDate       string `description:"开始日期"`
-	EndDate         string `description:"结束日期"`
-	StartTime       string `description:"开始时间"`
-	EndTime         string `description:"结束时间"`
-	StartWeek       string `description:"开始日期周"`
-	EndWeek         string `description:"结束日期周"`
-	MatterContent   string `description:"事项内容"`
-	Status          int8   `description:"状态:1:进行中,6:已结束"`
-	CreateTime      string `description:"创建时间"`
-	ModifyTime      string `description:"修改时间"`
-	IsSynced        int    `description:"是否与上海同步 0:未同步 1:已同步"`
+	RsMattersId     int            `orm:"column(rs_matters_id);pk"`
+	SysUserId       int            `description:"添加事项人id"`
+	SysUserRealName string         `description:"创建人姓名"`
+	StartDate       string         `description:"开始日期"`
+	EndDate         string         `description:"结束日期"`
+	StartTime       string         `description:"开始时间"`
+	EndTime         string         `description:"结束时间"`
+	StartWeek       string         `description:"开始日期周"`
+	EndWeek         string         `description:"结束日期周"`
+	MatterContent   string         `description:"事项内容"`
+	Status          int8           `description:"状态:1:进行中,6:已结束"`
+	CreateTime      string         `description:"创建时间"`
+	ModifyTime      string         `description:"修改时间"`
+	IsSynced        int            `description:"是否与上海同步 0:未同步 1:已同步"`
+	EditReason      string         `description:"修改原因"`
+	ButtonAuth      RsMatterButton `description:"按钮权限"`
+}
+
+// RsMatterButton 事项按钮权限
+type RsMatterButton struct {
+	EditDisabled   bool `description:"禁用编辑"`
+	RemoveDisabled bool `description:"禁用删除"`
 }
 
 func GetMattersListCount(condition string, pars []interface{}) (count int, err error) {

+ 18 - 0
routers/commentsRouter.go

@@ -268,6 +268,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_mobile_admin/controllers/roadshow:CalendarController"] = append(beego.GlobalControllerRouter["hongze/hongze_mobile_admin/controllers/roadshow:CalendarController"],
+        beego.ControllerComments{
+            Method: "SellerCalendarDetail",
+            Router: `/seller/calendar/detail`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_mobile_admin/controllers/yb:CommunityQuestionCommentController"] = append(beego.GlobalControllerRouter["hongze/hongze_mobile_admin/controllers/yb:CommunityQuestionCommentController"],
         beego.ControllerComments{
             Method: "Delete",
@@ -403,6 +412,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_mobile_admin/controllers:ApprovalCommon"] = append(beego.GlobalControllerRouter["hongze/hongze_mobile_admin/controllers:ApprovalCommon"],
+        beego.ControllerComments{
+            Method: "ApplyApproveOld",
+            Router: `/approve_old`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_mobile_admin/controllers:ApprovalCommon"] = append(beego.GlobalControllerRouter["hongze/hongze_mobile_admin/controllers:ApprovalCommon"],
         beego.ControllerComments{
             Method: "CompanyList",

+ 4 - 2
utils/constants.go

@@ -77,14 +77,16 @@ const (
 	ROLE_TYPE_CODE_FICC_SELLER     = "ficc_seller"     //ficc销售
 	ROLE_TYPE_CODE_RAI_ADMIN       = "rai_admin"       //权益管理员
 	ROLE_TYPE_CODE_RAI_SELLER      = "rai_seller"      //权益销售
-	ROLE_TYPE_CODE_FICC_GROUP      = "ficc_group"      //ficc组长
+	ROLE_TYPE_CODE_FICC_GROUP      = "ficc_group"      //ficc销售主管
 	ROLE_TYPE_CODE_RAI_GROUP       = "rai_group"       //ficc组长
 	ROLE_TYPE_CODE_FICC_DEPARTMENT = "ficc_department" //ficc部门经理
 	ROLE_TYPE_CODE_RAI_DEPARTMENT  = "rai_department"  //权益部门经理
 	ROLE_TYPE_CODE_FICC_RESEARCHR  = "ficc_researcher" //ficc研究员
+	ROLE_TYPE_CODE_RESEARCHR       = "researcher"      //ficc研究员(最早定义的)
 	ROLE_TYPE_CODE_RAI_RESEARCHR   = "rai_researcher"  //权益研究员
 	ROLE_TYPE_CODE_COMPLIANCE      = "compliance"      //合规角色
-	ROLE_TYPE_CODE_RESEARCHR       = "researcher"      //ficc研究员(最早定义的)
+	ROLE_TYPE_CODE_FINANCE         = "finance"         //财务角色
+	ROLE_TYPE_CODE_FICC_TEAM       = "ficc_team"       //ficc销售组长
 
 	ROLE_TYPE_SELLERS = "'ficc_admin','ficc_seller','rai_admin','rai_seller','ficc_group','rai_group','ficc_department','rai_department','compliance'"
 )