123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763 |
- package final
- import (
- "errors"
- "fmt"
- "github.com/gogf/gf/v2/os/gtime"
- "github.com/gogf/gf/v2/util/gconv"
- _ "image/gif"
- _ "image/jpeg"
- _ "image/png"
- "strings"
- "time"
- "zhiyuan/pkg/db"
- "zhiyuan/pkg/logger"
- "zhiyuan/pkg/utils"
- "zhiyuan/pkg/weixin/mp"
- "zhiyuan/services/admin"
- "github.com/gin-gonic/gin"
- )
- type FinalMaterialOrder struct {
- ID int64 `json:"id" prop:"add:false"`
- OrderNo string `json:"order_no" label:"订单号" type:"string" prop:"add:false" search:"like"`
- SiteId int64 `json:"site_id" label:"工地" type:"int" prop:"add:false" search:"="`
- Type int64 `json:"type" label:"类型" type:"int" prop:"add:false" search:"="`
- IsCustom int64 `json:"is_custom" label:"是否定制" type:"int" prop:"add:false" search:"="`
- TypeId int64 `json:"type_id" label:"类型ID" type:"int" prop:"add:false" search:"="`
- SupplierId int64 `json:"supplier_id" label:"材料商ID" type:"int" prop:"add:false" search:"="`
- Total float64 `json:"total" label:"金额" type:"float" prop:"add:false" default:"0"`
- ReceiptDate int64 `json:"receipt_date" label:"配送日期" type:"int" prop:"add:false" default:"0"`
- InstallDate int64 `json:"install_date" label:"安装日期" type:"int" prop:"add:false" default:"0"`
- State int64 `json:"state" label:"状态" type:"int" prop:"add:false" default:"0" search:"="`
- ProcessId int64 `json:"process_id" label:"待完成审核流程" type:"int" prop:"add:false" default:"0" search:"="`
- SettleId int64 `json:"settle_id" label:"结算流程" type:"int" prop:"add:false" default:"0" search:"="`
- TakeTime int64 `json:"take_time" label:"下单时间" type:"int" prop:"add:false" default:"0" search:"="`
- StockTime int64 `json:"stock_time" label:"备货时间" type:"int" prop:"add:false" default:"0" search:"="`
- NoticeTime int64 `json:"notice_time" label:"通知配送时间" type:"int" prop:"add:false" default:"0" search:"="`
- DeliverTime int64 `json:"deliver_time" label:"送达时间" type:"int" prop:"add:false" default:"0" search:"="`
- AcceptTime int64 `json:"accept_time" label:"收货时间" type:"int" prop:"add:false" default:"0" search:"="`
- InstallTime int64 `json:"install_time" label:"安装时间" type:"int" prop:"add:false" default:"0" search:"="`
- OverTime int64 `json:"over_time" label:"完成时间" type:"int" prop:"add:false" default:"0" search:"="`
- NoticeMeasureTime int64 `json:"notice_measure_time" label:"通知测量时间" type:"int" prop:"add:false" default:"0" search:"="`
- MeasureTime int64 `json:"measure_time" label:"测量时间" type:"int" prop:"add:false" default:"0" search:"="`
- ReportTimeout int64 `json:"report_timeout" label:"报备超时计数" type:"int" prop:"add:false" default:"0" search:"="`
- Attachment string `json:"attachment" label:"附件" type:"string" prop:"add:false"`
- CreatedId int64 `json:"created_id" type:"int" prop:"add:false"`
- DeletedAt int64 `json:"deleted_at" prop:"add:false select:false"`
- CreatedAt int64 `json:"created_at" prop:"add:false"`
- UpdatedAt int64 `json:"updated_at" prop:"add:false"`
- db.BaseModel
- }
- func (FinalMaterialOrder) TableName() string {
- return "zy_final_material_order"
- }
- func (model FinalMaterialOrder) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool {
- return true
- }
- func (FinalMaterialOrder) OnePrivilege(c *gin.Context, id int64) bool {
- return true
- }
- func (FinalMaterialOrder) AddPrivilege(c *gin.Context, data map[string]interface{}, post map[string]interface{}) error {
- return errors.New("没有权限")
- }
- func (FinalMaterialOrder) EditPrivilege(c *gin.Context, id int64, data map[string]interface{}, post map[string]interface{}) error {
- return errors.New("没有权限")
- }
- func (FinalMaterialOrder) DelPrivilege(c *gin.Context, id int64) error {
- return errors.New("没有权限")
- }
- func (FinalMaterialOrder) Page() bool {
- return false
- }
- func (FinalMaterialOrder) Count() bool {
- return true
- }
- type FinalMaterialOrderMobile struct {
- Supplier string `json:"supplier" label:"材料商" prop:"select:supplier.name" search:"like"`
- SupplierName string `json:"supplier_name" type:"string" prop:"select:supplier.name" search:"like"`
- SupplierAdminId int64 `json:"supplier_admin_id" type:"int" prop:"select:supplier.adminId"`
- Install int64 `json:"install" label:"安装" type:"int" prop:"select:supplier.install"`
- ReceiptHour int64 `json:"receipt_hour" type:"int" prop:"select:supplier.receipt_hour"`
- InstallHour int64 `json:"install_hour" type:"int" prop:"select:supplier.install_hour"`
- StockHour int64 `json:"stock_hour" label:"备货小时" type:"int" prop:"select:if(zy_final_material_order.is_custom=1,supplier.custom_stock_hour,supplier.stock_hour)"`
- Username string `json:"username" label:"业主姓名" prop:"select:finalsite.username" search:"like"`
- Phone string `json:"phone" label:"手机号码" prop:"select:finalsite.phone" search:"like"`
- Village string `json:"village" label:"小区名称" prop:"select:finalsite.village" search:"like"`
- Address string `json:"address" label:"房屋地址" prop:"select:finalsite.address" search:"like"`
- RoomNo string `json:"room_no" label:"楼栋房号" prop:"select:finalsite.room_no" search:"like"`
- Area float64 `json:"area" label:"面积" type:"float" prop:"select:finalsite.area"`
- ShopId int64 `json:"shop_id" label:"门店" type:"int" prop:"select:finalsite.shop_id" search:"="`
- ShopName int64 `json:"shop_name" label:"门店" prop:"select:shop.shop_name"`
- CollectInfo string `json:"collect_info" label:"门店" prop:"select:shop.collect_info"`
- PkgId int64 `json:"pkg_id" label:"套餐" type:"int" prop:"select:finalsite.pkg_id" search:"="`
- TypeId int64 `json:"type_id" label:"开工类型" type:"int" prop:"select:finalsite.type_id" search:"="`
- ManagerId int64 `json:"manager_id" label:"项目经理" type:"int" prop:"select:finalsite.manager_id" search:"="`
- ProjectLeaderId int64 `json:"project_leader_id" label:"工程队长" type:"int" prop:"select:finalsite.project_leader_id" search:"="`
- DesignerId int64 `json:"designer_id" label:"设计师" type:"int" prop:"select:finalsite.designer_id" search:"="`
- Names string `json:"names" label:"名称" type:"string" prop:"add:false select:concat(finalsite.village,finalsite.address,finalsite.room_no)" search:"like"`
- StartTime int64 `json:"starttime" label:"开工日期" type:"int" prop:"select:finalsite.starttime"`
- ProcessType int64 `json:"process_type" type:"int" prop:"select:process.type" search:"="`
- ManagerName string `json:"manager_name" type:"string" prop:"select:manager.username"`
- ManagerPhone string `json:"manager_phone" type:"string" prop:"select:manager.phone"`
- ManagerHeadImgUrl string `json:"manager_headimgurl" type:"string" prop:"select:manager.headimgurl"`
- DesignerName string `json:"designer_name" type:"string" prop:"select:designer.username"`
- DesignerPhone string `json:"designer_phone" type:"string" prop:"select:designer.phone"`
- DesignerHeadImgUrl string `json:"designer_headimgurl" type:"string" prop:"select:designer.headimgurl"`
- ProjectLeaderName string `json:"project_leader_name" type:"string" prop:"select:project_leader.username"`
- ProjectLeaderPhone string `json:"project_leader_phone" type:"string" prop:"select:project_leader.phone"`
- ProjectLeaderHeadImgUrl string `json:"project_leader_headimgurl" type:"string" prop:"select:project_leader.headimgurl"`
- SettleState int64 `json:"settle_state" label:"结算状态" type:"int" prop:"select:settle.state" search:"="`
- SettleCreatedAt int64 `json:"settle_created_at" type:"int" prop:"select:settle.created_at"`
- PkgName int64 `json:"pkg_name" label:"套餐" prop:"select:finalpkg.name"`
- MeasureTimeout int64 `json:"measure_timeout" label:"量尺超时" prop:"select:if(zy_final_material_order.measure_time-notice_measure_time>7*24*60*60,1,0)" search:"="`
- StockTimeout int64 `json:"stock_timeout" label:"备货超时" prop:"select:if(zy_final_material_order.take_time+if(zy_final_material_order.is_custom=1,supplier.custom_stock_hour,supplier.stock_hour)*3600<zy_final_material_order.stock_time,1,0)" search:"="`
- ReceiptTimeout int64 `json:"receipt_timeout" label:"配送超时" prop:"select:if(zy_final_material_order.deliver_time>zy_final_material_order.receipt_date,1,0)" search:"="`
- InstallTimeout int64 `json:"install_timeout" label:"安装超时" prop:"select:if(zy_final_material_order.install_time>zy_final_material_order.install_date,1,0)" search:"="`
- FinalMaterialOrder
- }
- func (model FinalMaterialOrderMobile) GroupBy() string {
- return fmt.Sprintf("`%s`.`id`", model.TableName())
- }
- func (model FinalMaterialOrderMobile) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool {
- if search, ok := data["search"]; ok {
- search = s.Param(fmt.Sprintf("%%%s%%", search))
- s.Where = append(s.Where, fmt.Sprintf("`%s`.`order_no` LIKE %s OR `finalsite`.`username` LIKE %s OR `finalsite`.`phone` LIKE %s OR `finalsite`.`village` LIKE %s OR `finalsite`.`address` LIKE %s OR `manager`.`username` LIKE %s OR `manager`.`phone` LIKE %s OR `supplier`.`name` LIKE %s OR concat(`finalsite`.`village`,`finalsite`.`address`,`finalsite`.`room_no`) LIKE %s", model.TableName(), search, search, search, search, search, search, search, search, search))
- }
- if settle, ok := data["settle"]; ok {
- if settleId, ok := db.ToInt64(settle); ok {
- var settle FinalMaterialSettle
- db.GetModel(map[string]interface{}{
- "id": settleId,
- "deleted_at": 0,
- }, &settle)
- if settle.ID != 0 {
- ids := strings.Split(settle.Orders, ",")
- s.Where = append(s.Where, fmt.Sprintf("`%s`.`id` in %s", model.TableName(), s.Param(ids)))
- }
- }
- }
- if _, ok := data["process"]; ok {
- s.Where = append(s.Where, fmt.Sprintf("`%s`.`process_id` != %s", model.TableName(), s.Param(0)))
- adminID := c.GetInt("adminID")
- adminIDs := s.Param(adminID)
- where := fmt.Sprintf("(`finalsite`.`manager_id` = %s AND `process`.`type` = 6 AND `process`.`check_at2` = 0) OR (`supplier`.`adminId` = %s AND `process`.`type` = 6 AND `process`.`check_at3` = 0) OR (`%s`.`created_id` = %s AND `process`.`type` = 7 AND `process`.`check_at2` = 0)", adminIDs, adminIDs, model.TableName(), adminIDs)
- if admin.CheckAuth([]string{"final:verify:audit"}, adminID) {
- where += " OR (`process`.`type` = 7 AND `process`.`check_at` = 0) OR (`process`.`type` = 12 AND `process`.`check_at` = 0)"
- }
- s.Where = append(s.Where, "("+where+")")
- }
- if _, ok := data["dcl"]; ok {
- adminID := c.GetInt("adminID")
- adminIDs := s.Param(adminID)
- dclWhere := fmt.Sprintf("(`finalsite`.`manager_id` = %s AND ((`%s`.`state` in (8,1,3,4,6) AND `%s`.`process_id` = 0) OR (`process`.`type` = 6 AND `process`.`check_at2` = 0) OR (`process`.`type` = 14 AND `process`.`check_at` = 0)))", adminIDs, model.TableName(), model.TableName())
- dclWhere += fmt.Sprintf(" OR (`supplier`.`adminId` = %s AND ((`%s`.`state` in (9,0,2,5,11) AND `%s`.`process_id` = 0) OR (`process`.`type` = 6 AND `process`.`check_at3` = 0)))", adminIDs, model.TableName(), model.TableName())
- dclWhere += fmt.Sprintf(" OR (`finalsite`.`project_leader_id` = %s AND `%s`.`state` = 7 AND `%s`.`process_id` = 0)", adminIDs, model.TableName(), model.TableName())
- dclWhere += fmt.Sprintf(" OR (`%s`.`created_id` = %s AND `process`.`type` = 7 AND `process`.`check_at2` = 0)", model.TableName(), adminIDs)
- if admin.CheckAuth([]string{"final:verify:audit"}, adminID) {
- dclWhere += " OR (`process`.`type` = 7 AND `process`.`check_at` = 0) OR (`process`.`type` = 12 AND `process`.`check_at` = 0)"
- }
- s.Where = append(s.Where, fmt.Sprintf("(%s)", dclWhere))
- }
- if starttime1s, ok := data["starttime1"]; ok {
- if starttime1, ok := db.ToInt64(starttime1s); ok {
- s.Where = append(s.Where, fmt.Sprintf("`finalsite`.`starttime` >= %s", s.Param(starttime1)))
- }
- }
- if starttime2s, ok := data["starttime2"]; ok {
- if starttime2, ok := db.ToInt64(starttime2s); ok {
- s.Where = append(s.Where, fmt.Sprintf("`finalsite`.`starttime` < %s", s.Param(starttime2+60*60*24)))
- }
- }
- if taketime1s, ok := data["taketime1"]; ok {
- if taketime1, ok := db.ToInt64(taketime1s); ok {
- s.Where = append(s.Where, fmt.Sprintf("`%s`.`take_time` >= %s", model.TableName(), s.Param(taketime1)))
- }
- }
- if taketime2s, ok := data["taketime2"]; ok {
- if taketime2, ok := db.ToInt64(taketime2s); ok {
- s.Where = append(s.Where, fmt.Sprintf("`%s`.`take_time` < %s", model.TableName(), s.Param(taketime2+60*60*24)))
- }
- }
- if state, _ := db.ToInt64(data["state"]); state != -1 {
- s.Where = append(s.Where, fmt.Sprintf("`%s`.`state` != %s", model.TableName(), s.Param(-1)))
- }
- if timeout, ok := db.ToInt64(data["timeout"]); ok {
- switch timeout {
- case 0:
- s.Where = append(s.Where, "(if(zy_final_material_order.measure_time-notice_measure_time>7*24*60*60,1,0) = 0 AND if(zy_final_material_order.take_time+if(zy_final_material_order.is_custom=1,supplier.custom_stock_hour,supplier.stock_hour)*3600<zy_final_material_order.stock_time,1,0) = 0 AND if(zy_final_material_order.deliver_time>zy_final_material_order.receipt_date,1,0) = 0 AND if(zy_final_material_order.install_time>zy_final_material_order.install_date,1,0) = 0)")
- case 1:
- s.Where = append(s.Where, "(if(zy_final_material_order.measure_time-notice_measure_time>7*24*60*60,1,0) = 1 OR if(zy_final_material_order.take_time+if(zy_final_material_order.is_custom=1,supplier.custom_stock_hour,supplier.stock_hour)*3600<zy_final_material_order.stock_time,1,0) = 1 OR if(zy_final_material_order.deliver_time>zy_final_material_order.receipt_date,1,0) = 1 OR if(zy_final_material_order.install_time>zy_final_material_order.install_date,1,0) = 1)")
- case 2:
- s.Where = append(s.Where, "(if(zy_final_material_order.measure_time-notice_measure_time>7*24*60*60,1,0) = 1)")
- case 3:
- s.Where = append(s.Where, "(if(zy_final_material_order.take_time+if(zy_final_material_order.is_custom=1,supplier.custom_stock_hour,supplier.stock_hour)*3600<zy_final_material_order.stock_time,1,0) = 1)")
- case 4:
- s.Where = append(s.Where, "(if(zy_final_material_order.deliver_time>zy_final_material_order.receipt_date,1,0) = 1)")
- case 5:
- s.Where = append(s.Where, "(if(zy_final_material_order.install_time>zy_final_material_order.install_date,1,0) = 1)")
- case 6:
- s.Where = append(s.Where, "(zy_final_material_order.report_timeout>0)")
- }
- }
- return model.FinalMaterialOrder.ListPrivilege(c, data, s)
- }
- func (model FinalMaterialOrderMobile) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel {
- return append(model.FinalMaterialOrder.LeftJoin(data, s), db.JoinModel{
- Model: FinalSite{},
- As: "finalsite",
- On: []string{"`finalsite`.`id` = " + model.TableName() + ".`site_id`"},
- }, db.JoinModel{
- Model: FinalSupplier{},
- As: "supplier",
- On: []string{"`supplier`.`id` = " + model.TableName() + ".`supplier_id`"},
- }, db.JoinModel{
- Model: JoinShop{},
- As: "shop",
- On: []string{"`shop`.`id` = `finalsite`.`shop_id`"},
- }, db.JoinModel{
- Model: FinalMaterialOrderProcess{},
- As: "process",
- On: []string{"`process`.`id` = " + model.TableName() + ".`process_id`"},
- }, db.JoinModel{
- Model: FinalMaterialSettle{},
- As: "settle",
- On: []string{"`settle`.`id` = " + model.TableName() + ".`settle_id`"},
- }, db.JoinModel{
- Model: JoinAdmin{},
- As: "manager",
- On: []string{"`manager`.`id` = `finalsite`.`manager_id`"},
- }, db.JoinModel{
- Model: JoinAdmin{},
- As: "designer",
- On: []string{"`designer`.`id` = `finalsite`.`designer_id`"},
- }, db.JoinModel{
- Model: JoinAdmin{},
- As: "project_leader",
- On: []string{"`project_leader`.`id` = `finalsite`.`project_leader_id`"},
- }, db.JoinModel{
- Model: FinalPkg{},
- As: "finalpkg",
- On: []string{"`finalpkg`.`id` = `finalsite`.`pkg_id`"},
- })
- }
- func (model FinalMaterialOrderMobile) ListAfter(c *gin.Context, data map[string]interface{}, list []map[string]interface{}) []map[string]interface{} {
- ids := make([]int64, 0)
- idmap := make(map[int64]int)
- for i, v := range list {
- id, _ := db.ToInt64(v["id"])
- ids = append(ids, id)
- idmap[id] = i
- }
- if len(ids) == 0 {
- return list
- }
- datas, _ := db.GetModelMap(db.Type(FinalMaterialOrderItemMobile{}), map[string]interface{}{
- fmt.Sprintf("`%s`.`order_id` in", FinalMaterialOrderItemMobile{}.TableName()): ids,
- fmt.Sprintf("`%s`.`deleted_at`", FinalMaterialOrderItemMobile{}.TableName()): 0,
- }, nil)
- for _, v := range datas {
- id, _ := db.ToInt64(v["order_id"])
- if n, ok := idmap[id]; ok {
- items := make([]map[string]interface{}, 0)
- if is, ok := list[n]["items"].([]map[string]interface{}); ok {
- items = is
- }
- items = append(items, v)
- list[n]["items"] = items
- }
- }
- return list
- }
- func (model FinalMaterialOrderMobile) ExportSpan() []string {
- return []string{"items"}
- }
- func (model FinalMaterialOrderMobile) ExportFields() []db.ExportField {
- return []db.ExportField{
- {
- Label: "ID",
- Name: "id",
- },
- {
- Label: "订单号",
- Name: "order_no",
- Width: 30,
- },
- {
- Label: "门店",
- Name: "shop_name",
- Width: 20,
- },
- {
- Label: "工地",
- Name: "address",
- Width: 30,
- },
- {
- Label: "套餐",
- Name: "pkg_name",
- Width: 10,
- },
- {
- Label: "开工日期",
- Name: "starttime",
- Width: 15,
- },
- {
- Label: "业主",
- Name: "username",
- Width: 25,
- },
- {
- Label: "设计师",
- Name: "designer_name",
- Width: 25,
- },
- {
- Label: "项目经理",
- Name: "manager_name",
- Width: 25,
- },
- {
- Label: "工程队长",
- Name: "project_leader_name",
- Width: 25,
- },
- {
- Label: "材料商",
- Name: "supplier",
- Width: 15,
- },
- {
- Label: "材料名称",
- Name: "items.mat_name",
- Width: 50,
- },
- {
- Label: "单价",
- Name: "items.price",
- },
- {
- Label: "数量",
- Name: "items.num",
- },
- {
- Label: "总价",
- Name: "items.total",
- },
- {
- Label: "备注",
- Name: "items.remark",
- },
- {
- Label: "金额",
- Name: "total",
- },
- {
- Label: "下单时间",
- Name: "take_time",
- Width: 20,
- },
- {
- Label: "备货时间",
- Name: "stock_time",
- Width: 20,
- },
- {
- Label: "通知配送时间",
- Name: "notice_time",
- Width: 20,
- },
- {
- Label: "送达时间",
- Name: "deliver_time",
- Width: 20,
- },
- {
- Label: "完成时间",
- Name: "over_time",
- Width: 20,
- },
- {
- Label: "状态",
- Name: "state",
- },
- {
- Label: "结算状态",
- Name: "settle_state",
- },
- {
- Label: "超时状态",
- Name: "timeout_state",
- },
- }
- }
- func (FinalMaterialOrderMobile) ExportValue(row map[string]interface{}, rowIndex int, field db.ExportField, data []map[string]interface{}) string {
- states := []string{"已取消", "待备货", "已备货", "待配送", "待收货", "已收货", "待安装", "待验收", "已完成", "已下单", "待测量", "待审核", "待结算", "已结算"}
- switch field.Name {
- case "address":
- worksite := db.ToString(row["address"]) + " " + db.ToString(row["village"]) + "" + db.ToString(row["room_no"])
- area, _ := db.ToFloat64(row["area"])
- if area != 0 {
- worksite += " " + db.ToString(area) + "㎡"
- }
- return worksite
- case "starttime":
- starttime, _ := db.ToInt64(row["starttime"])
- if starttime == 0 {
- return ""
- }
- t := time.Unix(starttime, 0).Local()
- return t.Format("2006-01-02")
- case "username":
- return db.ToString(row["username"]) + " " + db.ToString(row["phone"])
- case "designer_name":
- return db.ToString(row["designer_name"]) + " " + db.ToString(row["designer_phone"])
- case "manager_name":
- return db.ToString(row["manager_name"]) + " " + db.ToString(row["manager_phone"])
- case "project_leader_name":
- return db.ToString(row["project_leader_name"]) + " " + db.ToString(row["project_leader_phone"])
- case "items.num":
- return db.ToString(row["items.num"]) + " " + db.ToString(row["items.unit"])
- case "take_time":
- take_time, _ := db.ToInt64(row["take_time"])
- if take_time == 0 {
- return ""
- }
- t := time.Unix(take_time, 0).Local()
- return t.Format("2006-01-02 15:04")
- case "stock_time":
- stock_time, _ := db.ToInt64(row["stock_time"])
- if stock_time == 0 {
- return ""
- }
- t := time.Unix(stock_time, 0).Local()
- return t.Format("2006-01-02 15:04")
- case "notice_time":
- notice_time, _ := db.ToInt64(row["notice_time"])
- if notice_time == 0 {
- return ""
- }
- t := time.Unix(notice_time, 0).Local()
- return t.Format("2006-01-02 15:04")
- case "deliver_time":
- deliver_time, _ := db.ToInt64(row["deliver_time"])
- if deliver_time == 0 {
- return ""
- }
- t := time.Unix(deliver_time, 0).Local()
- return t.Format("2006-01-02 15:04")
- case "over_time":
- over_time, _ := db.ToInt64(row["over_time"])
- if over_time == 0 {
- return ""
- }
- t := time.Unix(over_time, 0).Local()
- return t.Format("2006-01-02 15:04")
- case "state":
- if state, ok := db.ToInt64(row["state"]); ok {
- return states[state+1]
- }
- return ""
- case "settle_state":
- sstates := []string{"已驳回", "", "", "待财务审核", "待店长审核", "待财务付款", "已完成"}
- if settle_state, ok := db.ToInt64(row["settle_state"]); ok {
- return sstates[settle_state+1]
- }
- return ""
- case "timeout_state":
- measure_timeout, _ := db.ToInt64(row["measure_timeout"])
- stock_timeout, _ := db.ToInt64(row["stock_timeout"])
- receipt_timeout, _ := db.ToInt64(row["receipt_timeout"])
- install_timeout, _ := db.ToInt64(row["install_timeout"])
- report_timeout, _ := db.ToInt64(row["report_timeout"])
- states := []string{}
- if report_timeout > 0 {
- states = append(states, "报备超时"+db.ToString(report_timeout)+"次")
- }
- if measure_timeout == 1 {
- states = append(states, "量尺超时")
- }
- if stock_timeout == 1 {
- states = append(states, "备货超时")
- }
- if receipt_timeout == 1 {
- states = append(states, "配送超时")
- }
- if install_timeout == 1 {
- states = append(states, "安装超时")
- }
- return strings.Join(states, ",")
- }
- return db.ToString(row[field.Name])
- }
- type FinalMaterialOrderSupplier struct {
- FinalMaterialOrderMobile
- }
- func (model FinalMaterialOrderSupplier) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool {
- if !admin.IsSuperAdmin(c.GetInt("adminID")) {
- adminID := s.Param(c.GetInt("adminID"))
- where := fmt.Sprintf("`supplier`.`adminId` = %s OR `%s`.`created_id` = %s OR `finalsite`.`manager_id` = %s OR `finalsite`.`project_leader_id` = %s OR `finalsite`.`created_id` = %s", adminID, model.TableName(), adminID, adminID, adminID, adminID)
- if admin.CheckAuth([]string{"final:verify"}, c.GetInt("adminID")) {
- if admin.CheckAuth([]string{"final:verify:manager"}, c.GetInt("adminID")) || admin.CheckAuth([]string{"final:verify:finance"}, c.GetInt("adminID")) || admin.CheckAuth([]string{"final:verify:customer"}, c.GetInt("adminID")) || admin.CheckAuth([]string{"final:verify:assistant"}, c.GetInt("adminID")) {
- info, _ := admin.GetInfoByID(c.GetInt("adminID"), nil, nil)
- if info == nil {
- return false
- }
- where = where + fmt.Sprintf(" OR FIND_IN_SET(`finalsite`.`shop_id`, %s)", s.Param(info.ShopIds))
- }
- if admin.CheckAuth([]string{"final:verify:audit"}, c.GetInt("adminID")) {
- where = fmt.Sprintf("%s OR `manager`.`audit_id` = %s OR `manager`.`audit_id` = %s OR ISNULL(`manager`.`audit_id`)", where, s.Param(c.GetInt("adminID")), s.Param(0))
- }
- }
- s.Where = append(s.Where, fmt.Sprintf("(%s)", where))
- }
- return model.FinalMaterialOrderMobile.ListPrivilege(c, data, s)
- }
- func (FinalMaterialOrderSupplier) Count() bool {
- return true
- }
- func SendMaterialMessage(adminID int, orderNo string, orderId int64, address string, text string) error {
- logger.Sugar.Infof("SendMaterialMessage, send: %v %v %v %v %v", adminID, orderNo, orderId, address, text)
- client, err := mp.NewClient(1)
- if err != nil {
- return err
- }
- adminInfo, err := admin.GetInfoByID(adminID, nil, nil)
- if err != nil {
- return err
- }
- if adminInfo == nil || adminInfo.OpenId == "" {
- return nil
- }
- url := ""
- if orderId != 0 {
- url = "https://jz.nczyzs.com/final/#/order/" + db.ToString(orderId)
- }
- ret, err := client.SendTemplateMessage(adminInfo.OpenId, "0tdzToVtXoCUrafmN-ub9J69HKKCfUWEsCan-WkuPKk", url, map[string]interface{}{
- "character_string1": map[string]interface{}{
- "value": utils.SubStr(orderNo, 0, 32),
- },
- "thing2": map[string]interface{}{
- "value": utils.SubStr(address, 0, 20),
- },
- "thing5": map[string]interface{}{
- "value": utils.SubStr(text, 0, 20),
- },
- })
- logger.Sugar.Infof("SendMaterialMessage, ret: %v %v", ret, err)
- return err
- }
- type FinalMaterialOrderRemindModel struct {
- ID int64 `json:"id" prop:"add:false"`
- OrderNo string `json:"order_no" label:"订单号" type:"string"`
- SupplierId int64 `json:"supplier_id" label:"材料商ID" type:"int"`
- ReceiptDate int64 `json:"receipt_date" label:"配送日期" type:"int"`
- StockHour int64 `json:"stock_hour" label:"备货小时" type:"int" prop:"select:if(zy_final_material_order.is_custom=1,supplier.custom_stock_hour,supplier.stock_hour)"`
- SupplierAdminId int64 `json:"supplier_admin_id" type:"int" prop:"select:supplier.adminId"`
- Village string `json:"village" label:"小区名称" prop:"select:finalsite.village"`
- Address string `json:"address" label:"房屋地址" prop:"select:finalsite.address"`
- RoomNo string `json:"room_no" label:"楼栋房号" prop:"select:finalsite.room_no"`
- ManagerId int64 `json:"manager_id" label:"项目经理" prop:"select:finalsite.manager_id"`
- FinalMaterialOrderMobile
- }
- func FinalMaterialOrderRemind() {
- t := time.Now().Unix()
- orders := make([]FinalMaterialOrderRemindModel, 0)
- s := db.ModelQuery(db.Type(&orders), map[string]interface{}{}, true)
- db.WhereParse(&s, map[string]interface{}{
- "state": 2,
- "process_id": 0,
- "deleted_at": 0,
- })
- s.Where = append(s.Where, fmt.Sprintf("(`%s`.`type` = 0 and `%s`.`receipt_date` < %s) or (`%s`.`type` = 1 and `%s`.`receipt_date` < %s)", FinalMaterialOrderRemindModel{}.TableName(), FinalMaterialOrderRemindModel{}.TableName(), s.Param(t+2*3600), FinalMaterialOrderRemindModel{}.TableName(), FinalMaterialOrderRemindModel{}.TableName(), s.Param(t+6*3600)))
- query, params := s.Query()
- db.Query(query, params, &orders, FinalMaterialOrderRemindModel{}.DB())
- for _, order := range orders {
- address := order.Address
- if order.Village != " " {
- address += " " + order.Village
- }
- if order.RoomNo != " " {
- address += " " + order.RoomNo
- }
- msg := "您的待配送订单即将超时,请及时配送"
- if t >= order.ReceiptDate {
- msg = "您的待配送订单已超时,请及时配送"
- }
- SendMaterialMessage(int(order.SupplierAdminId), order.OrderNo, order.ID, address, msg)
- }
- }
- // 超时提醒
- func FinalSiteWorkCheckExtensionAndSenWxMsg() {
- var matPickWork []MatPickWork
- db.GetModel(map[string]interface{}{
- "deleted_at": 0,
- "example_at <": gtime.Now().Format("Y-m-d"),
- "item_status IN ": []int{0, 4}, //节点状态:0:未确认 1:已完成 2超时完成 3 超时未完成 4:验收未通过'
- }, &matPickWork)
- for _, work := range matPickWork {
- //修改成超时未完成
- err := db.UpdateModel(db.Type(MatPickWork{}), work.ID, map[string]interface{}{
- "item_status": 3, //超时未完成
- })
- if err != nil {
- continue
- }
- msg := fmt.Sprintf("工地:%s | 项目:%s 工作已超时,请及时处理,", work.Village, work.PickName)
- var toUser int
- if work.WorkerId != 0 {
- toUser = gconv.Int(work.WorkerId)
- SendSiteWorkMessage(toUser, work.SiteId, msg)
- }
- }
- fmt.Println("End final.FinalSiteWorkCheckExtensionAndSenWxMsg...")
- }
- // 快超时提醒 提前2天
- func FinalSiteWorkCheckAboutToExtensionAndSenWxMsg() {
- var matPickWork []MatPickWork
- db.GetModel(map[string]interface{}{
- "example_at > ": gtime.Now().Format("Y-m-d"),
- "example_at <= ": gtime.Now().AddDate(0, 0, 2).Format("Y-m-d"),
- "deleted_at": 0,
- "item_status IN ": []int{0, 4}, //节点状态:0:未确认 1:已完成 2超时完成 3 超时未完成 4:验收未通过'
- }, &matPickWork)
- fmt.Println(len(matPickWork))
- for _, work := range matPickWork {
- msg := fmt.Sprintf("工地:%s | 项目:%s 工作即将超时,请及时处理,", work.Village, work.PickName)
- var toUser int
- if work.WorkerId != 0 {
- toUser = gconv.Int(work.WorkerId)
- SendSiteWorkMessage(toUser, work.SiteId, msg)
- }
- }
- fmt.Println("End final.FinalSiteWorkCheckAboutToExtensionAndSenWxMsg...")
- }
- type FinalMaterialOrderExport struct {
- SettleId int64 `json:"settle_id" label:"结算流程" type:"int" prop:"add:false" default:"0" search:"="`
- Total float64 `json:"total" label:"金额" type:"float" prop:"add:false select:sum(zy_final_material_order.total)" default:"0"`
- Village string `json:"village" label:"小区名称" prop:"select:finalsite.village" search:"like"`
- Address string `json:"address" label:"房屋地址" prop:"select:finalsite.address" search:"like"`
- RoomNo string `json:"room_no" label:"楼栋房号" prop:"select:finalsite.room_no" search:"like"`
- AccountName string `json:"account_name" prop:"select:account.account_name"`
- AccountBank string `json:"account_bank" prop:"select:account.account_bank"`
- AccountNo string `json:"account_no" prop:"select:account.account_no"`
- db.BaseModel
- }
- func (FinalMaterialOrderExport) TableName() string {
- return "zy_final_material_order"
- }
- func (model FinalMaterialOrderExport) GroupBy() string {
- return fmt.Sprintf("`%s`.`id`", model.TableName())
- }
- func (model FinalMaterialOrderExport) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool {
- return true
- }
- func (model FinalMaterialOrderExport) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel {
- return []db.JoinModel{{
- Model: FinalSite{},
- As: "finalsite",
- On: []string{"`finalsite`.`id` = " + model.TableName() + ".`site_id`"},
- }, {
- Model: FinalMaterialSettle{},
- As: "settle",
- On: []string{"`settle`.`id` = " + model.TableName() + ".`settle_id`"},
- }, {
- Model: FinalSupplierAccount{},
- As: "account",
- On: []string{"`account`.`id` = `settle`.`account_id`"},
- }}
- }
- func (model FinalMaterialOrderExport) ExportFields() []db.ExportField {
- return []db.ExportField{
- {
- Label: "项目名称",
- Name: "address",
- Width: 30,
- },
- {
- Label: "金额",
- Name: "total",
- Width: 20,
- },
- {
- Label: "支付对象",
- Name: "account_name",
- Width: 30,
- },
- {
- Label: "开户行",
- Name: "account_bank",
- Width: 20,
- },
- {
- Label: "账号",
- Name: "account_no",
- Width: 30,
- },
- }
- }
- func (FinalMaterialOrderExport) ExportValue(row map[string]interface{}, rowIndex int, field db.ExportField, data []map[string]interface{}) string {
- switch field.Name {
- case "address":
- worksite := db.ToString(row["address"]) + " " + db.ToString(row["village"]) + "" + db.ToString(row["room_no"])
- return worksite
- }
- return db.ToString(row[field.Name])
- }
|