|
@@ -3,11 +3,13 @@ package Stock
|
|
|
import (
|
|
|
"ERP_storage/logs"
|
|
|
"ERP_storage/models/Basic"
|
|
|
+ "errors"
|
|
|
"fmt"
|
|
|
"git.baozhida.cn/ERP_libs/lib"
|
|
|
_ "github.com/astaxie/beego/cache/redis"
|
|
|
"github.com/beego/beego/v2/adapter/orm"
|
|
|
orm2 "github.com/beego/beego/v2/client/orm"
|
|
|
+ "strconv"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
@@ -103,6 +105,15 @@ func (dao *DeviceDaoImpl) Add_Device(r Device) (id int64, err error) {
|
|
|
// T_type 1-出库 2-入库
|
|
|
func (dao *DeviceDaoImpl) AddOrUpdate_Device(r Device, T_type int) (id int64, err error) {
|
|
|
|
|
|
+ id, err = dao.orm.Insert(&r)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(lib.FuncName(), err)
|
|
|
+ }
|
|
|
+ return
|
|
|
+
|
|
|
+}
|
|
|
+func (dao *DeviceDaoImpl) AddOrUpdate_Device1(r Device, T_type int) (id int64, err error) {
|
|
|
+
|
|
|
qs := dao.orm.QueryTable(new(Device))
|
|
|
var device Device
|
|
|
|
|
@@ -159,10 +170,17 @@ func (dao *DeviceDaoImpl) AddOrUpdate_Device(r Device, T_type int) (id int64, er
|
|
|
|
|
|
func (dao *DeviceDaoImpl) Read_Device_ByT_sn(T_sn string) (r Device, err error) {
|
|
|
qs := dao.orm.QueryTable(new(Device))
|
|
|
- err = qs.Filter("T_sn", T_sn).One(&r)
|
|
|
+ var list []Device
|
|
|
+ _, err = qs.Limit(1, 0).Filter("T_sn", T_sn).OrderBy("-CreateTime").All(&list)
|
|
|
if err != nil {
|
|
|
logs.Error(lib.FuncName(), err)
|
|
|
}
|
|
|
+ if len(list) == 0 {
|
|
|
+ return r, orm.ErrNoRows
|
|
|
+ }
|
|
|
+ if len(list) > 0 {
|
|
|
+ r = list[0]
|
|
|
+ }
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -195,7 +213,7 @@ func (dao *DeviceDaoImpl) Read_DeviceSn_List(T_contract_number string, T_product
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-func (dao *DeviceDaoImpl) Read_Device_List(T_name string, T_State, page, page_z int) (r []Device_R, cnt int64) {
|
|
|
+func (dao *DeviceDaoImpl) Read_Device_List1(T_name string, T_State, page, page_z int) (r []Device_R, cnt int64) {
|
|
|
qs := dao.orm.QueryTable(new(Device))
|
|
|
var offset int64
|
|
|
if page <= 1 {
|
|
@@ -237,3 +255,195 @@ func (dao *DeviceDaoImpl) Read_Device_List(T_name string, T_State, page, page_z
|
|
|
|
|
|
return
|
|
|
}
|
|
|
+func (dao *DeviceDaoImpl) Read_Device_List(T_name string, T_State, page, page_z int) (r []Device_R, cnt int64) {
|
|
|
+ var offset int
|
|
|
+ if page <= 1 {
|
|
|
+ offset = 0
|
|
|
+ } else {
|
|
|
+ offset = (page - 1) * page_z
|
|
|
+ }
|
|
|
+ // 过滤
|
|
|
+
|
|
|
+ sqlWhere := " WHERE d.t__state > 0"
|
|
|
+ if len(T_name) > 0 {
|
|
|
+ sqlWhere += " AND (d.t_contract_number like \"%" + T_name + "%\" or d.t_out_number like \"%" + T_name +
|
|
|
+ "%\" or d.t_sn like \"%" + T_name + "%\" or d.t_iccid like \"%" + T_name + "%\" or d.t_project like \"%" + T_name + "%\")"
|
|
|
+ }
|
|
|
+ if T_State > 0 {
|
|
|
+ sqlWhere += fmt.Sprintf(" AND d.t__state = %d", T_State)
|
|
|
+ }
|
|
|
+ var maps_z []orm2.ParamsList
|
|
|
+ // 获取总条数
|
|
|
+ sql := "SELECT COUNT(*) FROM device d JOIN (SELECT t_sn, MAX(create_time) AS max_create_time FROM device GROUP BY t_sn) latest " +
|
|
|
+ "ON d.t_sn = latest.t_sn AND d.create_time = latest.max_create_time"
|
|
|
+ sql = sql + sqlWhere
|
|
|
+ fmt.Println(sql)
|
|
|
+ _, err := dao.orm.Raw(sql).ValuesList(&maps_z)
|
|
|
+ if err != nil {
|
|
|
+ return r, 0
|
|
|
+ }
|
|
|
+ if len(maps_z) == 0 {
|
|
|
+ return r, 0
|
|
|
+ }
|
|
|
+ sql = "SELECT * FROM device d JOIN (SELECT t_sn, MAX(create_time) AS max_create_time FROM device GROUP BY t_sn) latest " +
|
|
|
+ "ON d.t_sn = latest.t_sn AND d.create_time = latest.max_create_time"
|
|
|
+
|
|
|
+ sql = sql + sqlWhere
|
|
|
+
|
|
|
+ sql += " ORDER BY d.create_time DESC"
|
|
|
+
|
|
|
+ sql += " LIMIT " + strconv.Itoa(offset) + "," + strconv.Itoa(page_z)
|
|
|
+
|
|
|
+ fmt.Println(sql)
|
|
|
+ var maps []Device
|
|
|
+ _, err = dao.orm.Raw(sql).QueryRows(&maps)
|
|
|
+ if err != nil {
|
|
|
+ return r, 0
|
|
|
+ }
|
|
|
+ for _, v := range maps {
|
|
|
+ v.T_remark, v.T_project_log = dao.Read_Device_History(v.T_sn)
|
|
|
+ r = append(r, DeviceToDevice_R(v))
|
|
|
+
|
|
|
+ }
|
|
|
+ count, _ := strconv.Atoi(maps_z[0][0].(string))
|
|
|
+ return r, int64(count)
|
|
|
+}
|
|
|
+func (dao *DeviceDaoImpl) Read_Device_History(T_sn string) (T_remark string, T_project string) {
|
|
|
+ qs := dao.orm.QueryTable(new(Device))
|
|
|
+ var maps []Device
|
|
|
+ _, err := qs.Filter("T_sn", T_sn).OrderBy("CreateTime").All(&maps)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(lib.FuncName(), err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range maps {
|
|
|
+ if v.T_State == 1 {
|
|
|
+ T_remark += fmt.Sprintf("%s:%s(%s)|", v.CreateTime.Format("2006-01-02"), "出库", v.T_out_number)
|
|
|
+ if len(v.T_project) > 0 {
|
|
|
+ T_project += fmt.Sprintf("%s:%s(%s):%s|", v.CreateTime.Format("2006-01-02"), "出库", v.T_out_number, v.T_project)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if v.T_State == 2 {
|
|
|
+ T_remark += fmt.Sprintf("%s:%s(%s)|", v.CreateTime.Format("2006-01-02"), "入库", v.T_in_number)
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func (dao *DeviceDaoImpl) Delete_Device_ByT_in_number(T_number, T_sn string) (err error) {
|
|
|
+ qs := dao.orm.QueryTable(new(Device))
|
|
|
+ var device Device
|
|
|
+ err = qs.Filter("T_sn", T_sn).Filter("T_in_number", T_number).One(&device)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var count int64
|
|
|
+ count, err = qs.Filter("T_sn", T_sn).Filter("CreateTime__gt", device.CreateTime).Count()
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(lib.FuncName(), err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if count > 1 {
|
|
|
+ return errors.New("设备已出库,无法删除")
|
|
|
+ }
|
|
|
+ _, err = dao.orm.Delete(&device)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(lib.FuncName(), err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return err
|
|
|
+}
|
|
|
+func (dao *DeviceDaoImpl) Delete_Device_ByT_out_number(T_number, T_sn string) (err error) {
|
|
|
+ qs := dao.orm.QueryTable(new(Device))
|
|
|
+ var device Device
|
|
|
+ err = qs.Filter("T_sn", T_sn).Filter("T_out_number", T_number).One(&device)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var count int64
|
|
|
+ count, err = qs.Filter("T_sn", T_sn).Filter("CreateTime__gt", device.CreateTime).Count()
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(lib.FuncName(), err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if count > 1 {
|
|
|
+ return errors.New("设备已入库,无法删除")
|
|
|
+ }
|
|
|
+ _, err = dao.orm.Delete(&device)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(lib.FuncName(), err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return err
|
|
|
+}
|
|
|
+
|
|
|
+func (dao *DeviceDaoImpl) Update_Device_ByT_out_number_T_project(T_number, T_project string) error {
|
|
|
+ qs := dao.orm.QueryTable(new(Device))
|
|
|
+ var list []Device
|
|
|
+ _, err := qs.Filter("T_out_number", T_number).All(&list)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(lib.FuncName(), err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ for _, deivce := range list {
|
|
|
+ deivce.T_project = T_project
|
|
|
+ _, err = dao.orm.Update(&deivce, "T_project")
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(lib.FuncName(), err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func (dao *DeviceDaoImpl) Update_Device_CreateTimeByT_out_number(T_number, T_date string) error {
|
|
|
+ now := time.Now().Format("15:04:05")
|
|
|
+ date, _ := lib.TimeStrToTime(T_date + " " + now)
|
|
|
+ qs := dao.orm.QueryTable(new(Device))
|
|
|
+ var list []Device
|
|
|
+ _, err := qs.Filter("T_out_number", T_number).All(&list)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(lib.FuncName(), err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ for _, device := range list {
|
|
|
+ //device.CreateTime = date
|
|
|
+ //_, err = dao.orm.Update(&device, "CreateTime")
|
|
|
+ _, err = dao.orm.Raw("UPDATE device SET create_time = ? WHERE id = ?", date, device.Id).Exec()
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(lib.FuncName(), err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+func (dao *DeviceDaoImpl) Update_Device_CreateTimeByT_in_number(T_number, T_date string) error {
|
|
|
+ now := time.Now().Format("15:04:05")
|
|
|
+ date, _ := lib.TimeStrToTime(T_date + " " + now)
|
|
|
+
|
|
|
+ qs := dao.orm.QueryTable(new(Device))
|
|
|
+ var list []Device
|
|
|
+ _, err := qs.Filter("T_in_number", T_number).All(&list)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(lib.FuncName(), err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ for _, device := range list {
|
|
|
+ //device.CreateTime = date
|
|
|
+ //_, err = dao.orm.Update(&device, "CreateTime")
|
|
|
+ _, err = dao.orm.Raw("UPDATE device SET create_time = ? WHERE id = ?", date, device.Id).Exec()
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(lib.FuncName(), err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|