Browse Source

添加验证项目,提成审核

zoie 1 year ago
parent
commit
56444c8962
7 changed files with 401 additions and 74 deletions
  1. 124 1
      controllers/Basic.go
  2. 92 19
      controllers/Percentage.go
  3. 0 1
      main.go
  4. 61 1
      models/Basic/VerifyItem.go
  5. 110 42
      models/Percentage/Percentage.go
  6. 4 1
      routers/Basic.go
  7. 10 9
      routers/Percentage.go

+ 124 - 1
controllers/Basic.go

@@ -5,7 +5,9 @@ import (
 	"ERP_storage/conf"
 	"ERP_storage/models/Account"
 	"ERP_storage/models/Basic"
+	"ERP_storage/models/Percentage"
 	"ERP_storage/models/Stock"
+	"fmt"
 	userlibs "git.baozhida.cn/ERP_libs/User"
 	"git.baozhida.cn/ERP_libs/lib"
 	"github.com/beego/beego/v2/adapter/orm"
@@ -433,8 +435,9 @@ func (c *BasicController) VerifyItem_List() {
 
 	// 查询
 	T_type, _ := c.GetInt("T_type")
+	T_name := c.GetString("T_name")
 
-	R_List, R_cnt := Basic.Read_VerifyItem_List(T_type, page, page_z)
+	R_List, R_cnt := Basic.Read_VerifyItem_List(T_type, T_name, page, page_z)
 
 	var r_jsons lib.R_JSONS
 	r_jsons.Num = R_cnt
@@ -446,3 +449,123 @@ func (c *BasicController) VerifyItem_List() {
 	c.ServeJSON()
 	return
 }
+
+func (c *BasicController) VerifyItem_Add() {
+
+	T_name := c.GetString("T_name")
+	T_type, _ := c.GetInt("T_type")
+	T_price, _ := c.GetFloat("T_price")
+
+	var_ := Basic.VerifyItem{
+		T_name:  T_name,
+		T_type:  T_type,
+		T_price: float32(T_price),
+		T_State: 1,
+	}
+	VerifyItem_r, err := Basic.Read_VerifyItem_ByT_nameT_type(T_name, T_type)
+	if err != nil && err.Error() != orm.ErrNoRows.Error() {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "添加失败"}
+		c.ServeJSON()
+		return
+	}
+
+	if VerifyItem_r.Id > 0 {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: fmt.Sprintf("【%s】项目已存在", T_name)}
+		c.ServeJSON()
+		return
+	}
+
+	Id, err := Basic.Add_VerifyItem(var_)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "添加失败"}
+		c.ServeJSON()
+		return
+	}
+
+	NatsServer.AddUserLogs(c.User.T_uuid, "提成验证项目", "添加", var_)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Id}
+	c.ServeJSON()
+	return
+}
+func (c *BasicController) VerifyItem_Edit() {
+	T_id, _ := c.GetInt("T_id")
+	T_name := c.GetString("T_name")
+	T_type, _ := c.GetInt("T_type")
+	T_price, _ := c.GetFloat("T_price")
+
+	VerifyItem_r, err := Basic.Read_VerifyItem_ById(T_id)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	VerifyItem_r2, err := Basic.Read_VerifyItem_ByT_nameT_type(T_name, T_type)
+	if err != nil && err.Error() != orm.ErrNoRows.Error() {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "修改失败"}
+		c.ServeJSON()
+		return
+	}
+	if VerifyItem_r2.Id != VerifyItem_r.Id && VerifyItem_r2.Id > 0 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("【%s】项目已存在", T_name)}
+		c.ServeJSON()
+		return
+	}
+
+	cnt, err := Percentage.Get_Percentage_Count_ByVerifyItemId(VerifyItem_r.Id)
+	if VerifyItem_r2.Id != VerifyItem_r.Id && VerifyItem_r2.Id > 0 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "查询提成项目统计失败"}
+		c.ServeJSON()
+		return
+	}
+	if VerifyItem_r.T_price != float32(T_price) && cnt > 0 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "有未处理的提成项目,无法修改"}
+		c.ServeJSON()
+		return
+	}
+
+	if len(T_name) > 0 {
+		VerifyItem_r.T_name = T_name
+	}
+	if T_type > 0 {
+		VerifyItem_r.T_type = T_type
+	}
+	if T_price > 0 {
+		VerifyItem_r.T_price = float32(T_price)
+	}
+
+	if err = Basic.Update_VerifyItem(VerifyItem_r, "T_name", "T_type", "T_price"); err != nil {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "修改失败"}
+		c.ServeJSON()
+		return
+	}
+
+	NatsServer.AddUserLogs(c.User.T_uuid, "提成验证项目", "修改", VerifyItem_r)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}
+func (c *BasicController) VerifyItem_Del() {
+
+	T_id, _ := c.GetInt("T_id")
+	VerifyItem_r, err := Basic.Read_VerifyItem_ById(T_id)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "T_id Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	if err = Basic.Delete_VerifyItem(VerifyItem_r); err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
+		c.ServeJSON()
+		return
+	}
+
+	NatsServer.AddUserLogs(c.User.T_uuid, "提成验证项目", "删除", strconv.Itoa(T_id))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}

+ 92 - 19
controllers/Percentage.go

@@ -4,6 +4,7 @@ import (
 	"ERP_storage/Nats/NatsServer"
 	"ERP_storage/conf"
 	"ERP_storage/models/Account"
+	"ERP_storage/models/Basic"
 	"ERP_storage/models/Contract"
 	"ERP_storage/models/Percentage"
 	"ERP_storage/models/Stock"
@@ -100,7 +101,6 @@ func (c *PercentageController) Percentage_Get() {
 
 	// 查询
 	T_id, _ := c.GetInt("T_id")
-
 	o := orm.NewOrm()
 	PercentageDao := Percentage.NewPercentage(o)
 	ContractDao := Contract.NewContract(o)
@@ -114,7 +114,7 @@ func (c *PercentageController) Percentage_Get() {
 	}
 	contract, err := ContractDao.Read_Contract_ByT_number(percentage.T_number)
 	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: "查询失败!"}
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "合同不存在!"}
 		c.ServeJSON()
 		return
 	}
@@ -130,6 +130,7 @@ func (c *PercentageController) Percentage_Get() {
 	userList, _ := NatsServer.Read_User_List_All()
 	Account.Read_User_All_Map(userList)
 	Contract.Read_VerifyContract_All_Map()
+	Basic.Read_VerifyItem_All_Map()
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Percentage.PercentageToPercentage_Detail(percentage, contract, pList)}
 	c.ServeJSON()
@@ -155,12 +156,21 @@ func (c *PercentageController) Percentage_Add() {
 		T_uuid:   T_uuid,
 		T_money:  float32(T_money),
 		T_type:   T_type, //类型 1-验证实施 2-报告编写
-		T_State:  1,
+		T_State:  6,      // 6-未提交审核
 		T_submit: c.User.T_uuid,
 		T_item:   T_item,
 	}
 
 	o := orm.NewOrm()
+	ContractDao := Contract.NewContract(o)
+	_, err := ContractDao.Read_Contract_ByT_number(T_number)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "合同不存在!"}
+		c.ServeJSON()
+		return
+	}
+	Basic.Read_VerifyItem_All_Map()
+
 	o.Begin()
 	PercentageDao := Percentage.NewPercentage(o)
 
@@ -171,13 +181,14 @@ func (c *PercentageController) Percentage_Add() {
 	if T_type == 2 {
 		T_type_str = "报告编写"
 	}
-	_, err := PercentageDao.Read_Percentage_ByT_number_T_type(T_number, T_type)
+	_, err = PercentageDao.Read_Percentage_ByT_number_T_type(T_number, T_type)
 	if err == nil {
 		o.Rollback()
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("该合同已提交过%s提成申请", T_type_str)}
 		c.ServeJSON()
 		return
 	}
+	var_.T_item_price = Percentage.Generate_VerifyItem_Price(var_.T_item)
 
 	_, err = PercentageDao.Add_Percentage(var_)
 	if err != nil {
@@ -189,8 +200,6 @@ func (c *PercentageController) Percentage_Add() {
 
 	o.Commit()
 
-	NatsServer.AddNews(conf.FinanceUuid, fmt.Sprintf("【提成申请】您有一条提成申请(%s)待审核", var_.T_number), conf.PercentageApprovalUrl)
-
 	NatsServer.AddUserLogs(c.User.T_uuid, "提成", "添加", var_)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: T_number}
@@ -201,12 +210,10 @@ func (c *PercentageController) Percentage_Add() {
 func (c *PercentageController) Percentage_Approval() {
 
 	T_id, _ := c.GetInt("T_id")
+	T_item := c.GetString("T_item")
 	T_state, _ := c.GetInt("T_state")
-	if T_state != Percentage.AuditPass && T_state != Percentage.AuditUnPass {
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_state Err!"}
-		c.ServeJSON()
-		return
-	}
+	T_approval_money, _ := c.GetFloat("T_approval_money")
+	T_approval_opinion := c.GetString("T_approval_opinion")
 
 	o := orm.NewOrm()
 	PercentageDao := Percentage.NewPercentage(o)
@@ -217,9 +224,34 @@ func (c *PercentageController) Percentage_Approval() {
 		c.ServeJSON()
 		return
 	}
+
+	// 未提交审核 不能修改
+	if percentage.T_State == Percentage.NotSubmit ||
+		percentage.T_State == Percentage.AuditPass ||
+		percentage.T_State == Percentage.RemitPart ||
+		percentage.T_State == Percentage.RemitAll {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("状态为%s,禁止提交!", Percentage.Read_Audit_Get(percentage.T_State))}
+		c.ServeJSON()
+		return
+	}
+	Basic.Read_VerifyItem_All_Map()
+
+	if len(T_approval_opinion) > 0 {
+		percentage.T_approval_opinion = T_approval_opinion
+	}
+	if T_approval_money > 0 {
+		percentage.T_approval_money = float32(T_approval_money)
+	}
 	// 2-已通过 3-未通过
-	percentage.T_State = T_state
-	err = PercentageDao.Update_Percentage(percentage, "T_State")
+	if T_state == 2 || T_state == 3 {
+		percentage.T_State = T_state
+	}
+	if len(T_item) > 0 {
+		percentage.T_item = T_item
+		percentage.T_item_price = Percentage.Generate_VerifyItem_Price(percentage.T_item)
+	}
+
+	err = PercentageDao.Update_Percentage(percentage, "T_State", "T_approval_opinion", "T_approval_money", "T_item", "T_item_price")
 	if err != nil {
 		o.Rollback()
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "修改失败"}
@@ -262,6 +294,13 @@ func (c *PercentageController) Percentage_Edit() {
 	}
 
 	o := orm.NewOrm()
+	ContractDao := Contract.NewContract(o)
+	_, err := ContractDao.Read_Contract_ByT_number(T_number)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "合同不存在!"}
+		c.ServeJSON()
+		return
+	}
 	PercentageDao := Percentage.NewPercentage(o)
 
 	percentage, err := PercentageDao.Read_Percentage_ById(T_id)
@@ -283,7 +322,7 @@ func (c *PercentageController) Percentage_Edit() {
 		return
 	}
 
-	// 1-待审核 2-审核通过 3-审核不通过 4-部分打款 5-全部打款  合同状态为未通过,修改之后将状态更改为待审核
+	// 1-待审核 2-审核通过 3-审核不通过 4-部分打款 5-全部打款 6-未提交审核 合同状态为未通过,修改之后将状态更改为待审核
 	if percentage.T_State == Percentage.AuditPass || percentage.T_State == Percentage.RemitPart || percentage.T_State == Percentage.RemitAll {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("状态为%s,禁止修改!", Percentage.Read_Audit_Get(percentage.T_State))}
 		c.ServeJSON()
@@ -304,17 +343,16 @@ func (c *PercentageController) Percentage_Edit() {
 	}
 	if len(T_item) > 0 {
 		percentage.T_item = T_item
+		percentage.T_item_price = Percentage.Generate_VerifyItem_Price(percentage.T_item)
 	}
-	percentage.T_State = 1
 
-	err = PercentageDao.Update_Percentage(percentage, "T_number", "T_uuid", "T_money", "T_type", "T_item", "T_State")
+	err = PercentageDao.Update_Percentage(percentage, "T_number", "T_uuid", "T_money", "T_type", "T_item", "T_item_price")
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "修改失败"}
 		c.ServeJSON()
 		return
 	}
 
-	NatsServer.AddNews(conf.FinanceUuid, fmt.Sprintf("【提成申请】您有一条提成申请(%s)待审核", percentage.T_number), conf.PercentageApprovalUrl)
 	NatsServer.AddUserLogs(c.User.T_uuid, "提成", "修改", percentage)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: percentage.Id}
@@ -389,11 +427,11 @@ func (c *PercentageController) Percentage_Remit() {
 	}
 	_, money := Percentage.PercentageToPercentageRemit_R(T_remit)
 	// 部分打款
-	if percentage.T_money > money && money > 0 {
+	if percentage.T_approval_money > money && money > 0 {
 		percentage.T_State = 4
 	}
 	// 全部打款
-	if percentage.T_money == money {
+	if percentage.T_approval_money == money && money > 0 {
 		percentage.T_State = 5
 	}
 
@@ -491,3 +529,38 @@ func (c *PercentageController) Contract_List() {
 	c.ServeJSON()
 	return
 }
+
+// 提交审核
+func (c *PercentageController) Percentage_Submit_Audit() {
+
+	T_id, _ := c.GetInt("T_id")
+
+	o := orm.NewOrm()
+	PercentageDao := Percentage.NewPercentage(o)
+
+	percentage, err := PercentageDao.Read_Percentage_ById(T_id)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "提交失败!"}
+		c.ServeJSON()
+		return
+	}
+	if percentage.T_State != 6 && percentage.T_State != 3 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("状态为%s,禁止提交!", Percentage.Read_Audit_Get(percentage.T_State))}
+		c.ServeJSON()
+		return
+	}
+	// 1-待审核 2-审核通过 3-审核不通过 4-部分打款 5-全部打款 6-待审核 审核状态
+	percentage.T_State = 1
+	err = PercentageDao.Update_Percentage(percentage, "T_State")
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "修改失败"}
+		c.ServeJSON()
+		return
+	}
+	NatsServer.AddNews(conf.FinanceUuid, fmt.Sprintf("【提成申请】您有一条提成申请(%s)待审核", percentage.T_number), conf.PercentageApprovalUrl)
+	NatsServer.AddUserLogs(c.User.T_uuid, "提成", "审核", percentage)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: T_id}
+	c.ServeJSON()
+	return
+}

+ 0 - 1
main.go

@@ -70,7 +70,6 @@ func main() {
 	beego.BConfig.RecoverFunc = RecoverPanic
 
 	go Basic.Read_ProductClass_All_Map()  // 初始化产品类型
-	go Basic.Read_VerifyItem_All_Map()    // 初始化验证项目
 	go controllers.Cron_StockMonth()      // 库存明细详情定时任务
 	go controllers.Cron_VerifyContract()  // 验证合同状态修改定时任务
 	go controllers.CheckPowerUniformity() // 检查角色是否与用户系统一致,不存在则添加

+ 61 - 1
models/Basic/VerifyItem.go

@@ -16,6 +16,7 @@ type VerifyItem struct {
 	T_name  string  `orm:"size(256);null"`         // 名称
 	T_type  int     `orm:"size(2);default(1)"`     // 类型 1-验证实施 2-报告编写
 	T_price float32 `orm:"digits(12);decimals(2)"` // 单价
+	T_State int     `orm:"size(2);default(1)"`     // 0 删除(伪删除)   1 正常
 }
 
 func (t *VerifyItem) TableName() string {
@@ -31,8 +32,30 @@ func init() {
 
 }
 
+// 获取 ById
+func Read_VerifyItem_ById(Id int) (r VerifyItem, err error) {
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(VerifyItem))
+	err = qs.Filter("Id", Id).Filter("T_State", 1).One(&r)
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+	}
+	return
+}
+
+// 获取 ById
+func Read_VerifyItem_ByT_nameT_type(T_name string, T_type int) (r VerifyItem, err error) {
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(VerifyItem))
+	err = qs.Filter("T_name", T_name).Filter("T_type", T_type).Filter("T_State", 1).One(&r)
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+	}
+	return
+}
+
 // 获取列表
-func Read_VerifyItem_List(T_type int, page, page_z int) (r_ []VerifyItem, cnt int64) {
+func Read_VerifyItem_List(T_type int, T_name string, page, page_z int) (r_ []VerifyItem, cnt int64) {
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 	qs := o.QueryTable(new(VerifyItem))
@@ -45,11 +68,16 @@ func Read_VerifyItem_List(T_type int, page, page_z int) (r_ []VerifyItem, cnt in
 
 	// 过滤
 	cond := orm.NewCondition()
+	cond = cond.And("T_State", 1)
 
 	if T_type > 0 {
 		cond = cond.And("T_type", T_type)
 	}
 
+	if len(T_name) > 0 {
+		cond = cond.And("T_name__icontains", T_name)
+	}
+
 	// 查询
 	var r []VerifyItem
 	_, err := qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond)).OrderBy("Id").All(&r)
@@ -91,3 +119,35 @@ func Read_VerifyItem_Get(T_id int) VerifyItem {
 	}
 	return VerifyItem{}
 }
+
+// 修改
+func Update_VerifyItem(m VerifyItem, cols ...string) error {
+	o := orm.NewOrm()
+	_, err := o.Update(&m, cols...)
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+		return err
+	}
+	return nil
+}
+
+// 删除
+func Delete_VerifyItem(v VerifyItem) error {
+	o := orm.NewOrm()
+	v.T_State = 0
+	_, err := o.Update(&v, "T_State")
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+	}
+	return err
+}
+
+// 添加
+func Add_VerifyItem(r VerifyItem) (id int64, err error) {
+	o := orm.NewOrm()
+	id, err = o.Insert(&r)
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+	}
+	return id, err
+}

+ 110 - 42
models/Percentage/Percentage.go

@@ -5,6 +5,8 @@ import (
 	"ERP_storage/models/Account"
 	"ERP_storage/models/Basic"
 	"ERP_storage/models/Contract"
+	"encoding/json"
+	"fmt"
 	"git.baozhida.cn/ERP_libs/lib"
 	orm2 "github.com/beego/beego/v2/client/orm"
 	"strings"
@@ -22,6 +24,7 @@ const (
 	AuditUnPass     // 审核不通过
 	RemitPart       // 部分打款
 	RemitAll        // 全部打款
+	NotSubmit       // 未提交审核
 
 )
 
@@ -32,6 +35,7 @@ var (
 		AuditUnPass: "审核不通过",
 		RemitPart:   "部分打款",
 		RemitAll:    "全部打款",
+		NotSubmit:   "未提交审核",
 	}
 )
 
@@ -46,15 +50,18 @@ func Read_Audit_Get(Id int) string {
 
 // 提成
 type Percentage struct {
-	Id       int     `orm:"column(ID);size(11);auto;pk"`
-	T_number string  `orm:"size(256);null"`         // 合同编号
-	T_uuid   string  `orm:"size(256);null"`         // 提成人员uuid
-	T_money  float32 `orm:"digits(12);decimals(2)"` // 提成金额
-	T_type   int     `orm:"size(2);default(1)"`     // 类型 1-验证实施 2-报告编写
-	T_State  int     `orm:"size(2);default(1)"`     // 0 删除(伪删除)  1-待审核 2-审核通过 3-审核不通过 4-部分打款 5-全部打款 审核状态
-	T_submit string  `orm:"size(256);null"`         // 提成提交人员
-	T_remit  string  `orm:"type(text);null"`        // 打款信息 打款时间,打款金额|打款时间,打款金额|
-	T_item   string  `orm:"type(text);null"`        // 提成明细 验证项目id,数量|验证项目id,数量|
+	Id                 int     `orm:"column(ID);size(11);auto;pk"`
+	T_number           string  `orm:"size(256);null"`         // 合同编号
+	T_uuid             string  `orm:"size(256);null"`         // 提成人员uuid
+	T_money            float32 `orm:"digits(12);decimals(2)"` // 提成金额
+	T_type             int     `orm:"size(2);default(1)"`     // 类型 1-验证实施 2-报告编写
+	T_State            int     `orm:"size(2);default(1)"`     // 0 删除(伪删除)  1-待审核 2-审核通过 3-审核不通过 4-部分打款 5-全部打款 6-未提交审核 审核状态
+	T_submit           string  `orm:"size(256);null"`         // 提成提交人员
+	T_remit            string  `orm:"type(text);null"`        // 打款信息 打款时间,打款金额|打款时间,打款金额|
+	T_item             string  `orm:"type(text);null"`        // 提成明细 验证项目id,数量|验证项目id,数量|
+	T_item_price       string  `orm:"type(text);null"`        // 提成明细 {验证项目id:金额,验证项目id:金额,验证项目id:金额}
+	T_approval_money   float32 `orm:"digits(12);decimals(2)"` // 审批金额
+	T_approval_opinion string  `orm:"type(text);null"`        // 审批意见
 
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
@@ -78,39 +85,42 @@ func init() {
 }
 
 type Percentage_R struct {
-	Id                 int
-	T_number           string  // 合同编号
-	T_customer         string  // 客户名称
-	T_contract_money   float32 // 合同金额
-	T_discount         float32 // 合同优惠价
-	T_recoveries_money float32 // 回款总金额
-
-	T_uuid       string  // 提成人员uuid
-	T_uuid_name  string  // 提成人员uuid
-	T_money      float32 // 提成金额
-	T_send_money float32 // 提成已打款金额
-	T_type       int     // 类型 1-验证实施 2-报告编写
-	T_State      int     // 0 删除(伪删除)  1-待审核 2-审核通过 3-审核不通过 4-部分打款 5-全部打款 审核状态
+	Id               int
+	T_number         string  // 合同编号
+	T_customer       string  // 客户名称
+	T_contract_money float32 // 合同金额
+	T_approval_money float32 // 合同金额
+	T_discount       float32 // 合同优惠价
+	T_uuid           string  // 提成人员uuid
+
+	T_uuid_name        string  // 提成人员uuid
+	T_money            float32 // 提成金额
+	T_recoveries_money float32 // 审批金额
+	T_send_money       float32 // 提成已打款金额
+	T_type             int     // 类型 1-验证实施 2-报告编写
+	T_State            int     // 0 删除(伪删除)  1-待审核 2-审核通过 3-审核不通过 4-部分打款 5-全部打款 6-未提交审核 审核状态
 }
 
 type Percentage_Detail struct {
-	Id                 int
-	T_number           string  // 合同编号
-	T_customer         string  // 客户名称
-	T_contract_money   float32 // 合同金额
-	T_discount         float32 // 合同优惠价
-	T_recoveries_money float32 // 回款总金额
-
-	T_Product []Contract.ContractProduct_R // 合同产品信息
-
-	T_uuid       string              // 提成人员uuid
-	T_uuid_name  string              // 提成人员uuid
-	T_money      float32             // 提成金额
-	T_type       int                 // 类型 1-验证实施 2-报告编写
-	T_State      int                 // 0 删除(伪删除)  1-待审核 2-审核通过 3-审核不通过 4-部分打款 5-全部打款 审核状态
-	T_remit      []PercentageRemit_R // 提成打款明细 打款时间,打款金额|打款时间,打款金额|
-	T_send_money float32             // 提成已打款金额
-	T_item       []PercentageItem_R  // 提成明细 验证项目id,数量|验证项目id,数量|
+	Id               int
+	T_number         string                       // 合同编号
+	T_customer       string                       // 客户名称
+	T_contract_money float32                      // 合同金额
+	T_discount       float32                      // 合同优惠价
+	T_Product        []Contract.ContractProduct_R // 合同产品信息
+	T_uuid           string                       // 提成人员uuid
+
+	T_uuid_name string // 提成人员uuid
+
+	T_money            float32             // 提成金额
+	T_recoveries_money float32             // 审批金额
+	T_approval_money   float32             // 审批金额
+	T_approval_opinion string              // 审批意见
+	T_State            int                 // 0 删除(伪删除)  1-待审核 2-审核通过 3-审核不通过 4-部分打款 5-全部打款 6-未提交审核 审核状态
+	T_type             int                 // 类型 1-验证实施 2-报告编写
+	T_remit            []PercentageRemit_R // 提成打款明细 打款时间,打款金额|打款时间,打款金额|
+	T_send_money       float32             // 提成已打款金额
+	T_item             []PercentageItem_R  // 提成明细 验证项目id,数量|验证项目id,数量|
 }
 
 // 提成打款明细
@@ -146,7 +156,7 @@ func PercentageToPercentageRemit_R(T_detail string) (r []PercentageRemit_R, mone
 	}
 	return r, money
 }
-func PercentageToPercentageItem_R(T_item string) (r []PercentageItem_R) {
+func PercentageToPercentageItem_R(T_item string, priceMap map[int]float32, T_State int) (r []PercentageItem_R) {
 
 	if len(T_item) == 0 {
 		return
@@ -156,10 +166,17 @@ func PercentageToPercentageItem_R(T_item string) (r []PercentageItem_R) {
 		T_id := lib.To_int(strings.Split(detail, ",")[0])
 		T_num := lib.To_int(strings.Split(detail, ",")[1])
 		verifyItem := Basic.Read_VerifyItem_Get(T_id)
+		// 1-待审核 2-审核通过 3-审核不通过 4-部分打款 5-全部打款 6-未提交审核 审核状态
+		var price float32
+		if T_State == 6 {
+			price = verifyItem.T_price
+		} else {
+			price, _ = priceMap[T_id]
+		}
 		r = append(r, PercentageItem_R{
 			T_id:    T_id,
 			T_num:   T_num,
-			T_price: verifyItem.T_price,
+			T_price: price,
 			T_name:  verifyItem.T_name,
 		})
 
@@ -185,6 +202,7 @@ func PercentageToPercentage_R(t Percentage) (r Percentage_R) {
 	r.T_uuid = t.T_uuid
 	r.T_uuid_name = Account.Read_User_T_name_Get(t.T_uuid)
 	r.T_money = t.T_money
+	r.T_approval_money = t.T_approval_money
 	_, r.T_send_money = PercentageToPercentageRemit_R(t.T_remit)
 	r.T_type = t.T_type
 	r.T_State = t.T_State
@@ -209,10 +227,13 @@ func PercentageToPercentage_Detail(t Percentage, contract Contract.Contract, pro
 	r.T_uuid = t.T_uuid
 	r.T_uuid_name = Account.Read_User_T_name_Get(t.T_uuid)
 	r.T_money = t.T_money
+	r.T_approval_money = t.T_approval_money
+	r.T_approval_opinion = t.T_approval_opinion
 	r.T_remit, r.T_send_money = PercentageToPercentageRemit_R(t.T_remit)
 	r.T_type = t.T_type
 	r.T_State = t.T_State
-	r.T_item = PercentageToPercentageItem_R(t.T_item)
+	price := Get_VerifyItem_Price(t.T_item_price)
+	r.T_item = PercentageToPercentageItem_R(t.T_item, price, t.T_State)
 
 	return r
 }
@@ -282,6 +303,8 @@ func (dao *PercentageDaoImpl) Read_Percentage_List(T_name, T_uuid string, T_stat
 	cond1 := cond.And("T_State__gt", 0)
 	if T_state > 0 {
 		cond1 = cond1.And("T_State", T_state)
+	} else {
+		cond1 = cond.AndNot("T_State", 6)
 	}
 
 	if len(T_name) > 0 {
@@ -369,3 +392,48 @@ func (dao *PercentageDaoImpl) Read_T_uuid_List() (lists []string) {
 	}
 	return lists
 }
+
+func Generate_VerifyItem_Price(T_item string) string {
+	if len(T_item) == 0 {
+		return ""
+	}
+	price := make(map[int]float32)
+	detailList := strings.Split(strings.Trim(T_item, "|"), "|")
+	for _, detail := range detailList {
+		T_id := lib.To_int(strings.Split(detail, ",")[0])
+		verifyItem := Basic.Read_VerifyItem_Get(T_id)
+		price[T_id] = verifyItem.T_price
+	}
+
+	b, _ := json.Marshal(price)
+	return string(b)
+}
+
+func Get_VerifyItem_Price(T_item_price string) map[int]float32 {
+	price := make(map[int]float32)
+	if len(T_item_price) == 0 {
+		return price
+	}
+	_ = json.Unmarshal([]byte(T_item_price), &price)
+	return price
+}
+
+// 统计待审核、审核不通过、未提交审核包含该验证项目id的总数
+func Get_Percentage_Count_ByVerifyItemId(verifyItemId int) (cnt int64, err error) {
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(Percentage))
+
+	// 过滤
+	cond := orm.NewCondition()
+	// 1-待审核 2-审核通过 3-审核不通过 4-部分打款 5-全部打款 6-未提交审核 审核状态
+	T_State := []int{1, 3, 6}
+	cond1 := cond.And("T_State__in", T_State).And("T_item_price__contains", fmt.Sprintf(`"%d":`, verifyItemId))
+
+	cnt, err = qs.SetCond((*orm2.Condition)(cond1)).Count()
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+		return
+	}
+
+	return
+}

+ 4 - 1
routers/Basic.go

@@ -32,7 +32,10 @@ func init() {
 		beego.NSRouter("/Del", &controllers.BasicController{}, "*:ProductClass_Del"),   // 删除产品分类
 	)
 	verifyItem := beego.NewNamespace("/VerifyItem",
-		beego.NSRouter("/List", &controllers.BasicController{}, "*:VerifyItem_List"), // 产品分类列表
+		beego.NSRouter("/List", &controllers.BasicController{}, "*:VerifyItem_List"), // 验证项目列表
+		beego.NSRouter("/Add", &controllers.BasicController{}, "*:VerifyItem_Add"),   // 获取验证项目
+		beego.NSRouter("/Edit", &controllers.BasicController{}, "*:VerifyItem_Edit"), // 添加验证项目
+		beego.NSRouter("/Del", &controllers.BasicController{}, "*:VerifyItem_Del"),   // 删除验证项目
 	)
 
 	beego.AddNamespace(depot, product, productClass, verifyItem)

+ 10 - 9
routers/Percentage.go

@@ -8,15 +8,16 @@ import (
 func init() {
 
 	percentage := beego.NewNamespace("/Percentage",
-		beego.NSRouter("/List", &controllers.PercentageController{}, "*:Percentage_List"),           // 提成列表
-		beego.NSRouter("/User_List", &controllers.PercentageController{}, "*:Percentage_User_List"), // 提成列表 - 员工
-		beego.NSRouter("/Get", &controllers.PercentageController{}, "*:Percentage_Get"),             // 提成详情
-		beego.NSRouter("/Add", &controllers.PercentageController{}, "*:Percentage_Add"),             // 添加提成
-		beego.NSRouter("/Edit", &controllers.PercentageController{}, "*:Percentage_Edit"),           // 编辑提成
-		beego.NSRouter("/Del", &controllers.PercentageController{}, "*:Percentage_Del"),             // 删除提成
-		beego.NSRouter("/Approval", &controllers.PercentageController{}, "*:Percentage_Approval"),   // 提成审核
-		beego.NSRouter("/Remit", &controllers.PercentageController{}, "*:Percentage_Remit"),         // 打款明细
-		beego.NSRouter("/User/List", &controllers.PercentageController{}, "*:User_List"),            // 提成审核
+		beego.NSRouter("/List", &controllers.PercentageController{}, "*:Percentage_List"),                 // 提成列表
+		beego.NSRouter("/User_List", &controllers.PercentageController{}, "*:Percentage_User_List"),       // 提成列表 - 员工
+		beego.NSRouter("/Get", &controllers.PercentageController{}, "*:Percentage_Get"),                   // 提成详情
+		beego.NSRouter("/Add", &controllers.PercentageController{}, "*:Percentage_Add"),                   // 添加提成
+		beego.NSRouter("/Edit", &controllers.PercentageController{}, "*:Percentage_Edit"),                 // 编辑提成
+		beego.NSRouter("/Del", &controllers.PercentageController{}, "*:Percentage_Del"),                   // 删除提成
+		beego.NSRouter("/Approval", &controllers.PercentageController{}, "*:Percentage_Approval"),         // 提成审核
+		beego.NSRouter("/Remit", &controllers.PercentageController{}, "*:Percentage_Remit"),               // 打款明细
+		beego.NSRouter("/User/List", &controllers.PercentageController{}, "*:User_List"),                  // 提成审核
+		beego.NSRouter("/Submit_Audit", &controllers.PercentageController{}, "*:Percentage_Submit_Audit"), // 提交审核
 	)
 
 	beego.AddNamespace(percentage)