| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525 | 
							- package dal
 
- import (
 
- 	"database/sql"
 
- 	"errors"
 
- 	"fmt"
 
- 	"gopkg.in/guregu/null.v3"
 
- 	"log"
 
- 	"regexp"
 
- 	"strings"
 
- 	"time"
 
- 	"xiaoniaokuaiyan.com/xiaoniao/entity"
 
- 	"xiaoniaokuaiyan.com/xiaoniao/util"
 
- )
 
- type Order struct {
 
- }
 
- func (odal *Order) Update(oitem *entity.Order) (interface{}, error) {
 
- 	db := util.GetWriteSqlDB()
 
- 	sqlStr, kvm := util.GenerateUpdateSqlFromStruct("t_order", oitem, " where id='"+oitem.Id+"'")
 
- 	result, err := db.NamedExec(sqlStr, kvm)
 
- 	if err != nil {
 
- 		return nil, err
 
- 	}
 
- 	ra, err := result.RowsAffected()
 
- 	if err != nil {
 
- 		return nil, err
 
- 	}
 
- 	if ra <= 0 {
 
- 		return nil, errors.New("update failed(can not found order record)")
 
- 	}
 
- 	return oitem, nil
 
- }
 
- func (odal *Order) Get(id string) (*entity.OrderDB, error) {
 
- 	db := util.GetSqlDB()
 
- 	oitem := entity.OrderDB{}
 
- 	err := db.Get(&oitem, "select * FROM t_order WHERE id = ?", id)
 
- 	if err != nil {
 
- 		if err == sql.ErrNoRows {
 
- 			return nil, nil
 
- 		}
 
- 		return nil, err
 
- 	}
 
- 	return &oitem, nil
 
- }
 
- func (odal *Order) GetByCode(bcode string) (interface{}, error) {
 
- 	db := util.GetSqlDB()
 
- 	oitem := struct {
 
- 		entity.OrderDB
 
- 		SendbackTpl string `db:"sendback_tpl"`
 
- 		ProductName string `db:"product_name"`
 
- 	}{}
 
- 	err := db.Get(&oitem, "select t1.*, bloodtest_id, need_emptiness,report_period,pressure_pipe,blood_address,notice FROM t_order t1 left join t_order_extra t2 on t1.id = t2.order_id WHERE blood_codes like ? limit 1", "%"+bcode+"%")
 
- 	if err != nil {
 
- 		if err == sql.ErrNoRows {
 
- 			return nil, nil
 
- 		}
 
- 		return nil, err
 
- 	}
 
- 	db.Get(&oitem, "select sendback_tpl, product_name from t_product tp right join (select product_id, product_name from t_order t1 left join t_order_product t2 on t1.id = t2.order_id where id = ?) t3 on tp.id = t3.product_id limit 1;", oitem.Id)
 
- 	return &oitem, nil
 
- }
 
- func (odal *Order) List(customId, pageIndex, pageSize, status int, mobile string, isZFB, isHis bool) (interface{}, error) {
 
- 	var result = OrderListResult{}
 
- 	strSql := "select t2.* from (select id, mobile from t_custom where id = ?) t1, t_order t2 "
 
- 	whereStr := " where (t1.id = t2.custom_id or t1.mobile = t2.mobile) "
 
- 	whereValue := []interface{}{
 
- 		customId,
 
- 	}
 
- 	pinfo := Pager{
 
- 		PageIndex: pageIndex,
 
- 		PageSize:  pageSize,
 
- 	}
 
- 	// 20230629 增加支付宝特殊处理
 
- 	if isZFB {
 
- 		whereStr += " and t2.source='sp_zfb' "
 
- 	}
 
- 	if status > 0 {
 
- 		whereStr += " and status = ? "
 
- 		whereValue = append(whereValue, status)
 
- 	} else if status == -1 {
 
- 		whereStr += " and status in(6,11) "
 
- 	} else {
 
- 		//whereStr += " and status <> 8 "
 
- 		whereStr += " and is_delete='N'"
 
- 	}
 
- 	if mobile != "" {
 
- 		whereStr += " and t2.mobile = '" + mobile + "' "
 
- 	}
 
- 	whereStr += " and t2.retype in ('100','110')"
 
- 	//20230830 拆分历史表
 
- 	if isHis {
 
- 		strSql = util.ChangeOrderTableName(strSql)
 
- 	}
 
- 	rel, err := List(&result, "("+strSql+whereStr+") t3", strSql+whereStr, " order by created_at desc ", "", whereValue, pinfo)
 
- 	if err != nil {
 
- 		return nil, err
 
- 	}
 
- 	err = result.FetchProduct()
 
- 	if err != nil {
 
- 		return nil, err
 
- 	}
 
- 	return rel, nil
 
- }
 
- func (odal *Order) Detail(oid string) (interface{}, error) {
 
- 	var result = &OrderResult{}
 
- 	//strSql := "select * from t_order t1 left join t_order_extra t2 on t1.id = t2.order_id where t1.id = ?"
 
- 	strSql := ` select t1.id,t1.name,t1.gender,t1.age,t1.birthday,t1.address,t1.detail_address,t1.visit_date,t1.visit_time_range,t1.status,t1.work_fee,t1.free_fee,t1.repeat_item_fee,t1.payment,t1.actual_payment,t1.payment_time,t1.pay_type,t1.pay_no,t1.custom_mobile,t1.mobile,t1.created_at,t1.is_view_report,t1.report_picture,t2.is_notice,t2.express,t2.expressnumber,t1.delay_deadtime,t1.linker_id,t1.source,t2.report_period,t2.pressure_pipe,t2.blood_address,t2.notice,t1.remark,t1.id_num,t2.e_visit_date,t2.e_visit_time_range,t1.zone,t1.vcode,t1.jd_order_id,t1.complete_time,t1.share_source from t_order t1 left join t_order_extra t2 on t1.id = t2.order_id where t1.id = ?
 
- 				union 
 
- 				select t3.id,t3.name,t3.gender,t3.age,t3.birthday,t3.address,t3.detail_address,t3.visit_date,t3.visit_time_range,t3.status,t3.work_fee,t3.free_fee,t3.repeat_item_fee,t3.payment,t3.actual_payment,t3.payment_time,t3.pay_type,t3.pay_no,t3.custom_mobile,t3.mobile,t3.created_at,t3.is_view_report,t3.report_picture,t4.is_notice,t4.express,t4.expressnumber,t3.delay_deadtime,t3.linker_id,t3.source,t4.report_period,t4.pressure_pipe,t4.blood_address,t4.notice,t3.remark,t3.id_num,t4.e_visit_date,t4.e_visit_time_range,t3.zone,t3.vcode,t3.jd_order_id,t3.complete_time,t3.share_source from t_order_history t3 left join t_order_extra_history t4 on t3.id = t4.order_id where t3.id = ? limit 1`
 
- 	db := util.GetSqlDB()
 
- 	err := db.Get(result, strSql, oid, oid)
 
- 	if err != nil {
 
- 		return nil, err
 
- 	}
 
- 	err = result.FetchProduct()
 
- 	if err != nil {
 
- 		return nil, err
 
- 	}
 
- 	return result, nil
 
- }
 
- type tempPitem struct {
 
- 	ProductId   int            `db:"product_id"`
 
- 	ProductName string         `db:"product_name"`
 
- 	Price       int            `db:"price"`
 
- 	Quantity    int            `db:"quantity"`
 
- 	SaleMode    int            `db:"sale_mode"`
 
- 	Picture     string         `db:"picture"`
 
- 	SubIds      sql.NullString `db:"sub_ids"`
 
- 	Tube        sql.NullString `db:"tube"`
 
- }
 
- func (odal *Order) CheckAndSplitOrder(oid string) (bool, error) {
 
- 	//是否拆单了
 
- 	var isSplited bool = false
 
- 	//是否全部邮寄 状态200
 
- 	var isAllyouji200 = true //for 循环中,有一个100 就为false
 
- 	//是否包含抗原
 
- 	var isExistKangyuan = false //for 循环中, 有一个抗原 就为true
 
- 	//抗原产品名
 
- 	var kangyuanProductName string
 
- 	db := util.GetWriteSqlDB()
 
- 	strSql := "select t1.product_id, t1.product_name, t1.price, t1.picture,t1.quantity, t2.sale_mode, t2.sub_ids, t2.tube from t_order_product t1 left join t_product t2 on t1.product_id = t2.id where t1.order_id=? order by quantity desc;"
 
- 	plist := []tempPitem{}
 
- 	err := db.Select(&plist, strSql, oid)
 
- 	if err != nil {
 
- 		return isSplited, err
 
- 	}
 
- 	strSql = "select * from t_order t1 left join t_order_extra t2 on t1.id = t2.order_id where t1.id = ?"
 
- 	oitem := entity.OrderDB{}
 
- 	err = db.Get(&oitem, strSql, oid)
 
- 	if err != nil {
 
- 		return isSplited, err
 
- 	}
 
- 	//20221229如果每样下了一单,暂不拆单
 
- 	//20221229拆单逻辑调整 如果只有邮寄产品且包括抗原 发送短信27; 如果只有邮寄产品且不包括抗原,不发送短信;包含上门产品,发送短信16
 
- 	if len(plist) > 0 && plist[0].Quantity <= 1 {
 
- 		for idx := range plist {
 
- 			//20221229 判断全邮寄产品逻辑
 
- 			if isAllyouji200 { //如果目前全都是邮寄
 
- 				//如果有一个不是 200 isAllyouji200 就为false
 
- 				isAllyouji200 = plist[idx].SaleMode == 200
 
- 			}
 
- 			//20221229 判断是否有抗原逻辑
 
- 			if util.ProductIsKangYuan(plist[idx].ProductId) {
 
- 				isExistKangyuan = true
 
- 				kangyuanProductName += plist[idx].ProductName + ","
 
- 			}
 
- 			//20220427 邮寄产品直接准备耗材
 
- 			if len(plist) == 1 && util.ProductStatusJumpTo10(plist[idx].ProductId) {
 
- 				db.MustExec("update t_order set status = 10 where id = ?", oid)
 
- 			} else if len(plist) == 1 && util.ProductWenZhen(plist[idx].ProductId) {
 
- 				db.MustExec("update t_order set status = 6 where id = ?", oid)
 
- 			}
 
- 			//20210225 1149 拆单修改,防止用户只下一单不走下面的流程
 
- 			//odal.SplitOrderV2(oid, plist[idx].ProductId)
 
- 			//20220620 拆单改良版
 
- 			odal.SplitOrderV3(oid, plist[idx].ProductId)
 
- 		}
 
- 		if isAllyouji200 && isExistKangyuan {
 
- 			SendKangYuanSms(oitem.Mobile, kangyuanProductName[0:len(kangyuanProductName)-1])
 
- 		}
 
- 		/* 20221229 修改逻辑
 
- 		//20220427 邮寄产品直接准备耗材
 
- 		if len(plist) == 1 && util.ProductStatusJumpTo10(plist[0].ProductId) {
 
- 			db.MustExec("update t_order set status = 10 where id = ?", oid)
 
- 		}
 
- 		//20210225 1149 拆单修改,防止用户只下一单不走下面的流程
 
- 		odal.SplitOrderV2(oid, plist[0].ProductId)
 
- 		//20220620 拆单改良版
 
- 		odal.SplitOrderV3(oid, plist[0].ProductId)
 
- 		*/
 
- 		return isSplited, nil
 
- 	}
 
- 	tx := db.MustBegin()
 
- 	isSplited = true
 
- 	prefixReg := regexp.MustCompile(`\d`)
 
- 	prefix := prefixReg.ReplaceAllString(oitem.Id, "")
 
- 	var (
 
- 		leftPayment        int = oitem.Payment
 
- 		leftVActualPayment int = int(oitem.ActualPayment.Int64)
 
- 		leftFreeFee        int = oitem.FreeFee
 
- 	)
 
- 	//20210129 拆单后的oid 于产品的 map
 
- 	oidList := map[string]int{}
 
- 	for idx, pitem := range plist {
 
- 		//20221229 判断全邮寄产品逻辑
 
- 		if isAllyouji200 { //如果目前全都是邮寄
 
- 			//如果有一个不是 200 isAllyouji200 就为false
 
- 			isAllyouji200 = plist[idx].SaleMode == 200
 
- 		}
 
- 		//20221229 判断是否有抗原逻辑
 
- 		if util.ProductIsKangYuan(plist[idx].ProductId) {
 
- 			isExistKangyuan = true
 
- 			kangyuanProductName += plist[idx].ProductName + ","
 
- 		}
 
- 		//20220427 邮寄产品直接准备耗材
 
- 		status := oitem.Status
 
- 		if util.ProductStatusJumpTo10(pitem.ProductId) {
 
- 			status = 10
 
- 		} else if util.ProductWenZhen(pitem.ProductId) {
 
- 			status = 6
 
- 		}
 
- 		for i := 0; i < pitem.Quantity; i++ {
 
- 			if idx == len(plist)-1 && i == pitem.Quantity-1 {
 
- 				break
 
- 			}
 
- 			newOItem := &entity.Order{
 
- 				Id:             util.GenerateOrderNo(prefix),
 
- 				CreatedAt:      time.Now().Format("2006-01-02 15:04:05"),
 
- 				Name:           oitem.Name,
 
- 				Gender:         oitem.Gender,
 
- 				Birthday:       oitem.Birthday,
 
- 				Address:        oitem.Address,
 
- 				DetailAddress:  oitem.DetailAddress,
 
- 				VisitDate:      oitem.VisitDate.String,
 
- 				VisitTimeRange: oitem.VisitTimeRange.String,
 
- 				Source:         oitem.Source,
 
- 				Status:         status, //oitem.Status,
 
- 				CustomId:       int(oitem.CustomId.Int64),
 
- 				WorkFee:        0,
 
- 				Mobile:         oitem.Mobile,
 
- 				CustomMobile:   oitem.CustomMobile,
 
- 				Payment:        pitem.Price,
 
- 				FreeFee:        int(oitem.FreeFee * pitem.Price / oitem.Payment),
 
- 				VActualPayment: int(int(oitem.ActualPayment.Int64) * pitem.Price / oitem.Payment),
 
- 				ServiceRemark:  fmt.Sprintf("由订单%s自动拆单生成", oitem.Id),
 
- 				JdOrderId:      oitem.JdOrderId.String,
 
- 				Coordinates:    oitem.Coordinates.String,
 
- 			}
 
- 			leftFreeFee -= newOItem.FreeFee
 
- 			leftPayment -= newOItem.Payment
 
- 			leftVActualPayment -= newOItem.VActualPayment
 
- 			//20210129 添加 拆单后的oid,以便1149 拆单
 
- 			oidList[newOItem.Id] = pitem.ProductId
 
- 			strSql, mkv := util.GenerateInsertSqlFromStruct("t_order", newOItem)
 
- 			_, err = tx.NamedExec(strSql, mkv)
 
- 			if err != nil {
 
- 				fmt.Println("split order ", oitem.Id, err)
 
- 				tx.Tx.Rollback()
 
- 				return isSplited, err
 
- 			}
 
- 			strSql = "insert into t_order_product(order_id, product_id, product_name, price, picture) values (?,?,?,?,?)"
 
- 			sqlResult := tx.MustExec(strSql, newOItem.Id, pitem.ProductId, pitem.ProductName, pitem.Price, pitem.Picture)
 
- 			if ra, _ := sqlResult.RowsAffected(); ra <= 0 {
 
- 				tx.Tx.Rollback()
 
- 				return isSplited, err
 
- 			}
 
- 			tx.MustExec("insert into t_order_extra(order_id, pressure_pipe, relationship, is_yunxue, is_dfguomin) values (?,?,?,?,?)", newOItem.Id, pitem.Tube.String, oitem.Relationship.String, oitem.IsYunxue.Int64, oitem.IsDfguomin.Int64)
 
- 		}
 
- 		strSql = "delete from t_order_product where order_id = ? and product_id = ?"
 
- 		sqlResult := tx.MustExec(strSql, oitem.Id, pitem.ProductId)
 
- 		if ra, _ := sqlResult.RowsAffected(); ra <= 0 {
 
- 			tx.Tx.Rollback()
 
- 			break
 
- 		}
 
- 		if idx == len(plist)-1 {
 
- 			strSql = "insert into t_order_product(order_id, product_id, product_name, price, picture) values (?,?,?,?,?)"
 
- 			sqlResult = tx.MustExec(strSql, oitem.Id, pitem.ProductId, pitem.ProductName, pitem.Price, pitem.Picture)
 
- 			if ra, _ := sqlResult.RowsAffected(); ra <= 0 {
 
- 				tx.Tx.Rollback()
 
- 				return isSplited, err
 
- 			}
 
- 			tx.MustExec("update t_order_extra set pressure_pipe = ? where order_id = ?", pitem.Tube.String, oitem.Id)
 
- 			//tx.MustExec("update t_order set payment = ?, v_actual_payment = ?, free_fee =? where id = ?;", leftPayment, leftVActualPayment, leftFreeFee, oitem.Id)
 
- 			tx.MustExec("update t_order set payment = ?, v_actual_payment = ?, free_fee =?,status = ? where id = ?;", leftPayment, leftVActualPayment, leftFreeFee, status, oitem.Id)
 
- 			//添加最开始的单据
 
- 			oidList[oitem.Id] = pitem.ProductId
 
- 		}
 
- 	}
 
- 	if isSplited {
 
- 		tx.Tx.Commit()
 
- 		//todo 发送短信 提示添加信息 20210105
 
- 		strSql = "select content from t_sms_tpl where id = 16;"
 
- 		Content := ""
 
- 		db.Get(&Content, strSql)
 
- 		if len(Content) > 0 && !isAllyouji200 {
 
- 			util.SendSMS(oitem.Mobile, Content)
 
- 		}
 
- 		//拆单后2次拆单
 
- 		for k, v := range oidList {
 
- 			//odal.SplitOrderV2(k, v)
 
- 			odal.SplitOrderV3(k, v)
 
- 		}
 
- 	}
 
- 	if isAllyouji200 && isExistKangyuan {
 
- 		go SendKangYuanSms(oitem.Mobile, kangyuanProductName[0:len(kangyuanProductName)-1])
 
- 	}
 
- 	return isSplited, nil
 
- }
 
- // 20220620 拆单改良版 结合拆出不同产品,以及拆出多个数量
 
- func (dal *Order) SplitOrderV3(orderId string, productId int) {
 
- 	db := util.GetWriteSqlDB()
 
- 	//查询拆单关系
 
- 	tpsInfoList := []struct {
 
- 		ProductId int    `db:"product_id" `
 
- 		ChildId   int    `db:"child_id"`
 
- 		Num       int    `db:"num"`
 
- 		Name      string `db:"name"`
 
- 		Price     int    `db:"price"`
 
- 	}{}
 
- 	//sqlSearch := "select t1.*,t2.name as name,t2.price as price from t_product_split t1 left join t_product t2 on t1.child_id = t2.id where t1.product_id =? order by t1.is_main desc"
 
- 	sqlSearch := "select t1.product_id,t1.child_id,t1.num,if (t2.name is null,'',t2.name) as name,if (t2.price is null ,0,t2.price) as price from t_product_split t1 left join t_product t2 on t1.child_id = t2.id where t1.product_id =? order by t1.is_main desc"
 
- 	err := db.Select(&tpsInfoList, sqlSearch, productId)
 
- 	if err != nil || len(tpsInfoList) <= 0 {
 
- 		log.Println(fmt.Sprintf("订单%s,产品编号为%d 不需要拆单", orderId, productId))
 
- 		return
 
- 	}
 
- 	//查询订单,
 
- 	orderDb, err := dal.Get(orderId)
 
- 	fmt.Println(orderDb)
 
- 	//查询订单 产品关联
 
- 	plist := struct {
 
- 		OrderId     string `db:"order_id"`
 
- 		ProductId   string `db:"product_id"`
 
- 		ProductName string `db:"product_name"`
 
- 		Price       int    `db:"price"`
 
- 		Picture     string `db:"picture"`
 
- 		Quantity    int    `db:"quantity"`
 
- 		IsPersonal  int    `db:"is_personal"`
 
- 	}{}
 
- 	strSql := "select * from t_order_product where order_id = ? and product_id = ?"
 
- 	err = db.Get(&plist, strSql, orderId, productId)
 
- 	tx := db.MustBegin()
 
- 	prefixReg := regexp.MustCompile(`\d`)
 
- 	prefix := prefixReg.ReplaceAllString(orderId, "")
 
- 	firstEver := true
 
- 	for i := 0; i < len(tpsInfoList); i++ {
 
- 		//todo sth
 
- 		for j := 0; j < tpsInfoList[i].Num; j++ {
 
- 			if firstEver {
 
- 				//order 不用更新
 
- 				//更新order_product
 
- 				result := tx.MustExec("update t_order_product set product_id = ?,product_name = ?,price=? where order_id = ? and product_id = ?", tpsInfoList[i].ChildId, tpsInfoList[i].Name, tpsInfoList[i].Price, orderId, productId)
 
- 				if ra, _ := result.RowsAffected(); ra <= 0 {
 
- 					tx.Tx.Rollback()
 
- 					log.Println(fmt.Sprintf("订单%s,产品编号为%d 拆单失败 更新 t_order_product ", orderId, productId))
 
- 					return
 
- 				}
 
- 				tx.MustExec("update t_order set payment = ? where id = ?", tpsInfoList[i].Price, orderId)
 
- 			} else {
 
- 				//生成订单号
 
- 				orderNewId := util.GenerateOrderNo(prefix)
 
- 				//fmt.Println(orderNewId)
 
- 				//插入 t_order
 
- 				orderDb.Id = orderNewId
 
- 				orderDb.Payment = tpsInfoList[i].Price
 
- 				orderDb.ServiceRemark = null.StringFrom(fmt.Sprintf("由%s拆单", orderId))
 
- 				orderDb.ActualPayment = null.IntFrom(0)
 
- 				strSql, mkv := util.GenerateInsertSqlFromStruct("t_order", orderDb)
 
- 				osqlResult, err := tx.NamedExec(strSql, mkv)
 
- 				if err != nil {
 
- 					tx.Tx.Rollback()
 
- 					log.Println(fmt.Sprintf("订单%s,产品编号为%d 拆单失败 插入 t_order %s", orderId, productId, orderNewId))
 
- 					return
 
- 				}
 
- 				if ra, _ := osqlResult.RowsAffected(); ra <= 0 {
 
- 					tx.Tx.Rollback()
 
- 					log.Println(fmt.Sprintf("订单%s,产品编号为%d 拆单失败 插入 t_order %s", orderId, productId, orderNewId))
 
- 					return
 
- 				}
 
- 				//todo 查询product
 
- 				//插入 t_order_product 注意 金额
 
- 				var fields = map[string]interface{}{
 
- 					"order_id":     orderNewId,
 
- 					"product_id":   tpsInfoList[i].ChildId,
 
- 					"product_name": tpsInfoList[i].Name,
 
- 					"price":        tpsInfoList[i].Price,
 
- 					"picture":      plist.Picture,
 
- 					"quantity":     plist.Quantity,
 
- 					"is_personal":  plist.IsPersonal,
 
- 				}
 
- 				strSql = util.GenerateInsertSql("t_order_product", fields)
 
- 				_, err = tx.NamedExec(strSql, fields)
 
- 				if err != nil {
 
- 					tx.Tx.Rollback()
 
- 					log.Println(fmt.Sprintf("订单%s,产品编号为%d 拆单失败,新建 t_order_product %s", orderId, productId, orderNewId))
 
- 					return
 
- 				}
 
- 				//复制 t_order_extra
 
- 				result := tx.MustExec(fmt.Sprintf("insert into t_order_extra(`order_id`, `need_emptiness`, `report_period`, `pressure_pipe`, `blood_address`, `notice`, `updated_at`, `remark1`, `cancel_reason`, `is_notice`, `relationship`, `is_yunxue`, `is_dfguomin`, `bloodtest_id`, `reportresult`, `paynurse`, `isaddpro`, `sample`, `jicai_name`, `express`, `expressnumber`, `expressstatus`, `expressinfo`, `express_user`, `expressnumber_user`) select '%s',`need_emptiness`, `report_period`, `pressure_pipe`, `blood_address`, `notice`, `updated_at`, `remark1`, `cancel_reason`, `is_notice`, `relationship`, `is_yunxue`, `is_dfguomin`, `bloodtest_id`, `reportresult`, `paynurse`, `isaddpro`, `sample`, `jicai_name`, `express`, `expressnumber`, `expressstatus`, `expressinfo`, `express_user`, `expressnumber_user`  from t_order_extra where order_id =?", orderNewId), orderId)
 
- 				if ra, _ := result.RowsAffected(); ra <= 0 {
 
- 					tx.Tx.Rollback()
 
- 					log.Println(fmt.Sprintf("订单%s,产品编号为%d 拆单失败,新建 t_order_extra %s", orderId, productId, orderNewId))
 
- 					return
 
- 				}
 
- 			}
 
- 		}
 
- 		firstEver = false
 
- 	}
 
- 	tx.Commit()
 
- }
 
- func SendKangYuanSms(mobile, productNames string) {
 
- 	strSql := "select content from t_sms_tpl where id = 27;"
 
- 	Content := ""
 
- 	db := util.GetSqlDB()
 
- 	db.Get(&Content, strSql)
 
- 	if len(Content) > 0 {
 
- 		Content = strings.Replace(Content, "{product}", productNames, 1)
 
- 		util.SendSMS(mobile, Content)
 
- 	}
 
- }
 
- func (odal *Order) CommitSurvey(osItem *entity.OrderSurvey) (bool, error) {
 
- 	db := util.GetWriteSqlDB()
 
- 	if osItem.ServiceScore == "200" {
 
- 		strSql := "select count(order_id) as ex from t_order_sat_survey where order_id = ?"
 
- 		var count uint8
 
- 		err := db.Get(&count, strSql, osItem.OrderId)
 
- 		if err != nil {
 
- 			return false, err
 
- 		}
 
- 		if count > 0 {
 
- 			return true, nil
 
- 		}
 
- 		return false, nil
 
- 	}
 
- 	strSql, mkv := util.GenerateInsertSqlFromStruct("t_order_sat_survey", osItem)
 
- 	_, err := db.NamedExec(strSql, mkv)
 
- 	if err != nil {
 
- 		return false, err
 
- 	}
 
- 	return true, nil
 
- }
 
- func (odal *Order) IsFirst(mobile string) (bool, error) {
 
- 	db := util.GetSqlDB()
 
- 	var count int
 
- 	err := db.Get(&count, "select count(id) from t_order where custom_mobile =? and status not in(1,9) and retype in ('100','110');", mobile)
 
- 	if err != nil {
 
- 		return false, err
 
- 	}
 
- 	if count > 1 {
 
- 		return false, nil
 
- 	}
 
- 	return true, nil
 
- }
 
- var DefaultOrderDal = &Order{}
 
- func (odal *Order) ListCustomFile(customFileId, pageIndex, pageSize, status int, mobile string, isZFB, isHis bool) (interface{}, error) {
 
- 	var result = OrderListResult{}
 
- 	strSql := "select t2.* from (select id, mobile from t_custom_file where id = ?) t1, t_order t2 "
 
- 	whereStr := " where (t1.id = t2.custom_file_id or t1.mobile = t2.mobile) "
 
- 	whereValue := []interface{}{}
 
- 	if customFileId == 0 { //传0 代表是查看自己的报告
 
- 		strSql = "select t2.* from t_order t2 "
 
- 		whereStr = " where 1=1 "
 
- 	} else {
 
- 		whereValue = append(whereValue, customFileId)
 
- 	}
 
- 	pinfo := Pager{
 
- 		PageIndex: pageIndex,
 
- 		PageSize:  pageSize,
 
- 	}
 
- 	// 20230629 增加支付宝特殊处理
 
- 	if isZFB {
 
- 		whereStr += " and t2.source='sp_zfb' "
 
- 	}
 
- 	if status > 0 {
 
- 		whereStr += " and status = ? "
 
- 		whereValue = append(whereValue, status)
 
- 	} else if status == -1 {
 
- 		whereStr += " and status in(6,11) "
 
- 	} else {
 
- 		//whereStr += " and status <> 8 "
 
- 		whereStr += " and is_delete='N'"
 
- 	}
 
- 	if mobile != "" {
 
- 		whereStr += " and t2.mobile = '" + mobile + "' "
 
- 	}
 
- 	whereStr += " and t2.retype in ('100','110')"
 
- 	if isHis {
 
- 		strSql = util.ChangeOrderTableName(strSql)
 
- 	}
 
- 	rel, err := List(&result, "("+strSql+whereStr+") t3", strSql+whereStr, " order by complete_time desc ", "", whereValue, pinfo)
 
- 	if err != nil {
 
- 		return nil, err
 
- 	}
 
- 	err = result.FetchProduct()
 
- 	if err != nil {
 
- 		return nil, err
 
- 	}
 
- 	return rel, nil
 
- }
 
 
  |