Commit 7871cdae by 杜文军

历史报价数

parent c591332e
......@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
use App\Model\CommonModel;
use App\Model\InquiryItemsAssignModel;
use App\Model\InquiryItemsReportModel;
use App\Model\InquiryModel;
use App\Model\InquiryItemsModel;
......@@ -99,6 +100,39 @@ class ApiController extends Controller
ExportLayui((new QuoteModel())->ItemsList($input));
}
// 已领取列表
private function GetAssignList($input, $id){
$inquiry_items_id = $input['inquiry_items_id'];
$p = $input['p'] ? $input['p'] : 1;
$limit = $input['limit'] ? $input['limit'] : 10;
$InquiryItemsAssignModel = new InquiryItemsAssignModel;
$list = $InquiryItemsAssignModel->GetAssignList($inquiry_items_id, $p, $limit);
if ($list['data'] && is_array($list['data'])){
$InquiryItemsModel = new InquiryItemsModel();
$inquire_item_info = $InquiryItemsModel->where('id', $inquiry_items_id)->first()->toArray();
if ($inquire_item_info){
// 获取领取了询价单后已报价的uids
$QuoteModel = new QuoteModel();
$assign_uids = array_column($list['data'], 'assign_uid');
$quoted_uids = $QuoteModel->GetQuotedUids($inquiry_items_id, $assign_uids);
foreach ($list['data'] as $k => &$assign_item){
$assign_item['goods_name'] = $inquire_item_info['goods_name'];
$assign_item['brand_name'] = $inquire_item_info['brand_name'];
}
// 判断当前用户是否有对该询价单报价,如果有报价,那么过滤
if (in_array($assign_item['assign_uid'], $quoted_uids)){
unset($list['data'][$k]);
}
}
}
$data = [0, '成功', $list['data'], $list['total']];
ExportLayui($data);
}
//搜索品牌
private function ApiBrandList($input, $id){
(new CommonModel())->BrandList($input['k'],@$input["types"] ? @$input["types"] : 1);
......
......@@ -11,6 +11,12 @@ class InquiryItemsAssignModel extends Model
protected $primaryKey = 'id';
public $timestamps = false;
// 领取类型 1 指定 2 领取
const ASSIGN_TYPE_BIND = 1;
const ASSIGN_TYPE_SELECTED = 2;
// 领取询价
public function assign($inquiry_items_id, $assign_uid, $types=1)
{
......@@ -27,6 +33,16 @@ class InquiryItemsAssignModel extends Model
return $this->insert($data);
}
public function GetAssignList($inquiry_items_id, $p, $limit)
{
return $this
->where("inquiry_items_id", $inquiry_items_id)
->where("assign_type", self::ASSIGN_TYPE_SELECTED)
->orderBy('id','desc')
->paginate($limit ? $limit : 10, ['*'], 'p', $p ? $p : 1)
->toArray();
}
// 删除
public function delAssign($inquiry_items_id, $assign_uid, $types=1)
{
......
......@@ -109,6 +109,11 @@ class InquiryItemsModel extends Model
// 添加操作日志
$inquiry_items = $this->find($id);
// 检查询价单状态,如果状态为默认的 待报价 状态,那么更改为 已领取状态
if ($inquiry_items['status'] == InquiryMap::status_ready){
$this->where('id', $id)->update(['status' => InquiryMap::status_fix]);
}
$data = [];
$data['types'] = 1;
$data['relation_id'] = $id;
......
......@@ -77,7 +77,6 @@ class InquiryModel extends Model
}
}
});
#不同类别查询
switch (@$input["types"]) {
case "1": //我的询价
......@@ -166,6 +165,9 @@ class InquiryModel extends Model
$v['inquiry_sn_origin'] = $v["inquiry_sn"];
// 查询历史报价数
$v['history_inquiry_count'] = $QuoteModel->GetHistoryQuotedCount($v['goods_name']);
// 在Redis集合中检查是否有新的报价
if ($export == 0){
$res = $Redis->SISMEMBER('frq_quote_urge', $v['id']);
......
......@@ -31,28 +31,51 @@ class QuoteModel extends Model
const CREATED_AT = 'create_time';
const UPDATED_AT = 'update_time';
const STATUS_OFFER = 1; // 已报价
const STATUS_SELECTED = 2; // 已选中
const STATUS_SURE = 3; // 已确认
public function fromDateTime($value)
{
return strtotime(parent::fromDateTime($value));
}
public function GetHistoryQuotedCount($goods_name)
{
return $this->whereIn("status", [self::STATUS_OFFER, self::STATUS_SELECTED, self::STATUS_SURE])->where('goods_name', $goods_name)->count();
}
public function GetQuotedUids($inquiry_items_id, $assign_uids)
{
return $this->where("inquiry_items_id", $inquiry_items_id)
->whereIn("create_uid", $assign_uids)
->whereIn("status", [self::STATUS_OFFER, self::STATUS_SELECTED, self::STATUS_SURE])
->lists("create_uid")->toArray();
}
//单个明细分页列表
public function ItemsList($input)
{
$list = $this
->where("inquiry_items_id",$input["inquiry_items_id"])
->orderBy('status','desc')
->orderBy('price_rmb','asc')
->whereNotIn("status",[-1,0])
->where("inquiry_items_id", $input["inquiry_items_id"])
->orderBy('status', 'desc')
->orderBy('price_rmb', 'asc')
->whereNotIn("status", [-1, 0])
->paginate(@$input['limit'] ? $input["limit"] : 10, ['*'], 'p', @$input['p'] ? $input["p"] : 1)
->toArray();
if (!$list) return [20001, '没有数据'];
foreach ($list['data'] as $k=>&$v){
$v["price_origin"] = $v["currency"] >1 ? InquiryMap::$currency_sign[$v["currency"]].$v["price_origin"] : "--";
$v["price_rmb"] = $v["currency"] == 1 ? "¥".$v["price_rmb"]:"--";
if (!$list) {
return [20001, '没有数据'];
}
foreach ($list['data'] as $k => &$v) {
$v["price_origin"] = $v["currency"] > 1 ? InquiryMap::$currency_sign[$v["currency"]] . $v["price_origin"] : "--";
$v["price_rmb"] = $v["currency"] == 1 ? "¥" . $v["price_rmb"] : "--";
$v['status'] = QuoteMap::$status[$v["status"]];
if ($v["raw_goods_packing"] != ""){
$v["create_name"] = $v["create_name"]."(包装:".$v["raw_goods_packing"].")";
if ($v["raw_goods_packing"] != "") {
$v["create_name"] = $v["create_name"] . "(包装:" . $v["raw_goods_packing"] . ")";
}
}
return [0, '成功', $list['data'], $list['total']];
......@@ -62,38 +85,45 @@ class QuoteModel extends Model
public function ItemsListGroup($inquiry_items_id)
{
$list = $this
->where("inquiry_items_id",$inquiry_items_id)
->orderBy('status','desc')
->where("inquiry_items_id", $inquiry_items_id)
->orderBy('status', 'desc')
->get()
->toArray();
if (!$list) return [20001, '没有数据'];
if (!$list) {
return [20001, '没有数据'];
}
// 状态 -1:已撤销 1:已报价 2:已选中 3:已确认
$dataSure = []; //已确认
$dataCheck = []; //已选中
$dataDelete = []; //删除
$dataReady = []; //已报价
foreach ($list as $k=>&$v){
switch ($v["status"]){
foreach ($list as $k => &$v) {
switch ($v["status"]) {
case -1:
array_push($dataDelete,$v);
array_push($dataDelete, $v);
break;
case 1:
array_push($dataReady,$v);
array_push($dataReady, $v);
break;
case 2:
array_push($dataCheck,$v);
array_push($dataCheck, $v);
break;
case 3:
array_push($dataSure,$v);
array_push($dataSure, $v);
break;
}
$v['status'] = QuoteMap::$status[$v["status"]];
}
return ["dataSure"=>$dataSure,"dataCheck"=>$dataCheck,"dataDelete"=>$dataDelete,"dataReady"=>$dataReady];
return [
"dataSure" => $dataSure,
"dataCheck" => $dataCheck,
"dataDelete" => $dataDelete,
"dataReady" => $dataReady
];
}
// 获取报价列表
public function lists($input, $export='')
public function lists($input, $export = '')
{
$page = $input['page'];
$limit = $input['limit'];
......@@ -108,21 +138,46 @@ class QuoteModel extends Model
$map['end_time'] = !empty($input['end_time']) ? strtotime($input['end_time']) + 86399 : '';
$map = array_filter($map) ? $map : [];
$field = ['q.id', 'q.inquiry_id', 'q.inquiry_sn', 'q.inquiry_items_id', 'q.quote_sn', 'q.source', 'q.price_origin', 'q.price_rmb', 'q.price_other', 'q.currency', 'q.goods_name as quote_goods_name', 'q.brand_name as quote_brand_name', 'q.supplier_id', 'q.supplier_name', 'q.quote_number', 'q.status', 'q.create_uid', 'q.create_name', 'q.delivery_time', 'q.batch', 'q.create_time', 'it.goods_name', 'it.brand_name', 'it.inquiry_number'];
if ($map){
$field = [
'q.id',
'q.inquiry_id',
'q.inquiry_sn',
'q.inquiry_items_id',
'q.quote_sn',
'q.source',
'q.price_origin',
'q.price_rmb',
'q.price_other',
'q.currency',
'q.goods_name as quote_goods_name',
'q.brand_name as quote_brand_name',
'q.supplier_id',
'q.supplier_name',
'q.quote_number',
'q.status',
'q.create_uid',
'q.create_name',
'q.delivery_time',
'q.batch',
'q.create_time',
'it.goods_name',
'it.brand_name',
'it.inquiry_number'
];
if ($map) {
$list = $this->from('quote as q')
->join('inquiry_items as it', 'q.inquiry_items_id', '=', 'it.id')
->where(function($query) use ($map) {
->where(function ($query) use ($map) {
if ($map['inquiry_sn']) {
$query->where('q.inquiry_sn', '=', $map['inquiry_sn']);
}
if ($map['goods_name']) {
$query->where('it.goods_name', 'like', $map['goods_name'].'%');
$query->where('it.goods_name', 'like', $map['goods_name'] . '%');
}
if ($map['brand_name']) {
$query->where('it.brand_name', 'like', $map['brand_name'].'%');
$query->where('it.brand_name', 'like', $map['brand_name'] . '%');
}
if ($map['quote_sn']) {
......@@ -134,13 +189,17 @@ class QuoteModel extends Model
}
// 创建时间
if(!empty($map['start_time']) && !empty($map['end_time'])) {
if (!empty($map['start_time']) && !empty($map['end_time'])) {
$query->whereBetween('q.create_time', [$map['start_time'], $map['end_time']]);
} else if(!empty($map['start_time'])) {
} else {
if (!empty($map['start_time'])) {
$query->where('q.create_time', '>=', $map['start_time']);
} else if(!empty($map['end_time'])) {
} else {
if (!empty($map['end_time'])) {
$query->where('q.create_time', '<=', $map['end_time']);
}
}
}
});
} else {
$list = $this->from('quote as q')
......@@ -150,7 +209,8 @@ class QuoteModel extends Model
$map['create_uid'] = isset($input['create_uid']) ? $input['create_uid'] : ''; // 报价制单人
if ($type == 1) {
$list = $list->where('q.create_uid', $input['user_id'])->where('q.status', '<>', 0); // 过滤报价草稿
} else if ($type == 2) {
} else {
if ($type == 2) {
$perm = new PermController;
$role = $perm->getUserRole($input['user_id'], $input['email']); // 用户角色
......@@ -160,9 +220,10 @@ class QuoteModel extends Model
}
$list = $list->where('q.status', '<>', 0); // 过滤报价草稿
} elseif(@$input['inquiry_items_id'] > 0) {
} elseif (@$input['inquiry_items_id'] > 0) {
$list = $list->where('q.status', 0)->where('q.inquiry_items_id', $input['inquiry_items_id']);
}
}
if ($map['create_uid']) { // 制单人
$list = $list->where('q.create_uid', $map['create_uid']);
......@@ -174,7 +235,8 @@ class QuoteModel extends Model
$list = $list->get()->toArray();
if (empty($list)) {
echo '<script>alert("导出数据为空");history.go(-1);</script>';die;
echo '<script>alert("导出数据为空");history.go(-1);</script>';
die;
}
return $list;
......@@ -196,49 +258,51 @@ class QuoteModel extends Model
$list = $this->from('quote as q')
->select("q.*")
->join('inquiry_items as it', 'q.inquiry_items_id', '=', 'it.id')
->where(function($query) use ($input) {
foreach ($input as $k=>$b){
switch ($k){
->where(function ($query) use ($input) {
foreach ($input as $k => $b) {
switch ($k) {
case "goods_name":
$query->where('it.goods_name', 'like', $b.'%');
$query->where('q.goods_name', 'like', $b . '%');
break;
case "brand_name":
$query->where('it.brand_name', 'like',$b.'%');
$query->where('q.brand_name', 'like', $b . '%');
break;
case "inquiry_items_id":
$query->where('it.id', '<>',$b);
$query->where('q.inquiry_items_id', '<>', $b);
break;
}
}
$query->whereIn('q.status', [1,2,3]);
$query->whereIn('q.status', [1, 2, 3]);
});
$list = $list->orderBy('id', 'desc')->paginate($limit, ['*'], 'page', $page)->toArray();
foreach ($list['data'] as $b=>&$v) {
if ($v['currency'] == 1){
foreach ($list['data'] as $b => &$v) {
if ($v['currency'] == 1) {
$v["price_origin"] = "--";
}else{
} else {
$v["price_rmb"] = "--";
}
$v["currency"] = InquiryMap::$currency[$v["currency"]];
if ($v['delivery_time'] > 6) {
$v['delivery_time'] = intval($v['delivery_time'] / 7).'周';
$v['delivery_time'] = intval($v['delivery_time'] / 7) . '周';
} else {
$v['delivery_time'] = $v['delivery_time'].'天';
$v['delivery_time'] = $v['delivery_time'] . '天';
}
$v["effect_days"] = $v["effect_days"]."天";
$v["effect_days"] = $v["effect_days"] . "天";
$v['price_rmb'] = $v['currency'] == 1 ? $v['price_rmb'] : '';
$v["digikey"] = "包装:".$v["raw_goods_packing"];
$v["digikey"] = "包装:" . $v["raw_goods_packing"];
}
return [0, '获取成功', $list['data'], $list['total']];
}
// 处理数据
public function handleData($data, $type)
{
if (empty($data)) return $data;
if (empty($data)) {
return $data;
}
foreach ($data as &$v) {
$v["inquiry_sn_origin"] = $v["inquiry_sn"];
......@@ -246,20 +310,20 @@ class QuoteModel extends Model
$currency_sign = array_get(Config('quote.currency_sign'), $v['currency'], '¥');
$v['currency_val'] = array_get(Config('quote.currency'), $v['currency'], '人民币');
$v['price'] = $v['currency'] == 1 ? $currency_sign.$v['price_rmb'] : $currency_sign.$v['price_origin'];
$v['price'] = $v['currency'] == 1 ? $currency_sign . $v['price_rmb'] : $currency_sign . $v['price_origin'];
$v['status_val'] = array_get(Config('quote.quote_status'), $v['status'], '');
if ($type == 3) { // 报价草稿
if ($v['delivery_time'] > 6) {
$v['delivery_time'] = intval($v['delivery_time'] / 7).'周';
$v['delivery_time'] = intval($v['delivery_time'] / 7) . '周';
} else {
$v['delivery_time'] = $v['delivery_time'].'天';
$v['delivery_time'] = $v['delivery_time'] . '天';
}
$v['price_rmb'] = $v['currency'] == 1 ? $v['price_rmb'] : '';
}
$v["digikey"] = "包装".@$v["raw_goods_packing"];
$v["digikey"] = "包装" . @$v["raw_goods_packing"];
}
return $data;
......@@ -271,27 +335,35 @@ class QuoteModel extends Model
$id = $input['id'];
$cancel_reason = $input['cancel_reason'];
if (!$id) return [-1, '参数缺失'];
if (!$id) {
return [-1, '参数缺失'];
}
try {
$quote_info = $this->find($id);
if ($quote_info['status'] == -1) return [1, '撤销失败,该报价已撤销,请刷新页面查看'];
if ($quote_info['status'] == 3) return [1, '撤销失败,该报价已确认,请刷新页面查看'];
if ($quote_info['status'] == -1) {
return [1, '撤销失败,该报价已撤销,请刷新页面查看'];
}
if ($quote_info['status'] == 3) {
return [1, '撤销失败,该报价已确认,请刷新页面查看'];
}
$res = $this->where('id', $id)->update(['status' => -1, 'cancel_reason'=>$cancel_reason]);
$res = $this->where('id', $id)->update(['status' => -1, 'cancel_reason' => $cancel_reason]);
// 需要删除当前用户的领取记录
$InquiryItemsAssignModel = new InquiryItemsAssignModel;
$InquiryItemsAssignModel->delAssign($quote_info['inquiry_items_id'], $quote_info['create_uid']);
// 查看当前询价明细的报价数量,若为0,则更新询价明细状态为待报价
$count = $this->where('inquiry_items_id', $quote_info['inquiry_items_id'])->where('status', '<>', -1)->count();
$count = $this->where('inquiry_items_id', $quote_info['inquiry_items_id'])->where('status', '<>',
-1)->count();
$InquiryItemsModel = new InquiryItemsModel;
if (!$count) {
$InquiryItemsModel->where('id', $quote_info['inquiry_items_id'])->update(['status' => 1]);
} else { // 若不为0,且该询价明细状态为‘已选中’,则更新为已报价
$status = $InquiryItemsModel->where('inquiry_items_id', $quote_info['inquiry_items_id'])->value('status');
$status = $InquiryItemsModel->where('inquiry_items_id',
$quote_info['inquiry_items_id'])->value('status');
if ($status == 3) {
$InquiryItemsModel->where('id', $quote_info['inquiry_items_id'])->update(['status' => 2]);
......@@ -302,7 +374,7 @@ class QuoteModel extends Model
$data['types'] = 2;
$data['relation_id'] = $id;
$data['relation_sn'] = $quote_info['quote_sn'];
$data['content'] = '撤销报价,撤销原因:'.$cancel_reason.',报价单号:'.$quote_info['quote_sn'];
$data['content'] = '撤销报价,撤销原因:' . $cancel_reason . ',报价单号:' . $quote_info['quote_sn'];
$data['create_uid'] = $input['user_id'];
$data['create_name'] = $input['user_name'];
......@@ -312,7 +384,7 @@ class QuoteModel extends Model
$InquiryModel = new InquiryModel;
$inquiry_uid = $InquiryModel->where('id', $quote_info['inquiry_id'])->value('create_uid'); // 询价人
$contents = $input['user_name'].'已撤销报价,请及时查看!报价单号:'.$quote_info['quote_sn'].',型号:'.$quote_info['goods_name'];
$contents = $input['user_name'] . '已撤销报价,请及时查看!报价单号:' . $quote_info['quote_sn'] . ',型号:' . $quote_info['goods_name'];
$CommonModel = new CommonModel;
$CommonModel->send_msg($inquiry_uid, $contents);
......@@ -322,39 +394,45 @@ class QuoteModel extends Model
return [0, '撤销成功'];
}
/*
* 批量新增报价
*
*/
public function addBatch($indata)
{
$input = json_decode($indata,true);
if (!$input || count($input) == 0 ) return [1, '数据不得为空'];
$input = json_decode($indata, true);
if (!$input || count($input) == 0) {
return [1, '数据不得为空'];
}
// 询价明细单状态
$inquiry_items_id = current($input)['inquiry_items_id'];
$inquiry_items_status = InquiryItemsModel::where('id', $inquiry_items_id)->value('status');
if ($inquiry_items_status == -1) return [1, '新增报价失败,该询价明细已关闭'];
if ($inquiry_items_status == -1) {
return [1, '新增报价失败,该询价明细已关闭'];
}
try{
try {
$con = DB::connection('rfq');
$con->beginTransaction();
$QuoteModel = new QuoteModel();
#批量获取品牌
$param = [];
foreach ($input as $a=>$b){
array_push($param,["spu_name"=>strtoupper($b["goods_name"]),"brand_name"=>strtoupper($b["brand_name"])]);
foreach ($input as $a => $b) {
array_push($param,
["spu_name" => strtoupper($b["goods_name"]), "brand_name" => strtoupper($b["brand_name"])]);
}
$classArr = (new SearchModel())->getClassName(\GuzzleHttp\json_encode($param));
$CommonModel = new CommonModel;
#拼接批量插入明细
foreach ($input as $k=>&$v){
if ($classArr !== false){
$classInfo = @$classArr[strtoupper($v["goods_name"])."#".strtoupper($v["brand_name"])];
foreach ($input as $k => &$v) {
if ($classArr !== false) {
$classInfo = @$classArr[strtoupper($v["goods_name"]) . "#" . strtoupper($v["brand_name"])];
if (count($classInfo) > 0){
if (count($classInfo) > 0) {
$v["class_id2"] = $classInfo["class_id2"];
$v["class_id2_name"] = $classInfo["class_id2_name"];
}
......@@ -365,32 +443,38 @@ class QuoteModel extends Model
$v['price_rmb'] = $rate ? number_format($v['price_origin'] * $rate, 6) : 0; // 需计算汇率(排序用)
}
$quote_sn = $this->where(["inquiry_items_id"=>$inquiry_items_id,"raw_goods_sn"=>$v["raw_goods_sn"]])->value("quote_sn");
if ($quote_sn){ #存在更新
$quote_sn = $this->where([
"inquiry_items_id" => $inquiry_items_id,
"raw_goods_sn" => $v["raw_goods_sn"]
])->value("quote_sn");
if ($quote_sn) { #存在更新
$v["create_time"] = time();
$this->where(["inquiry_items_id"=>$inquiry_items_id,"raw_goods_sn"=>$v["raw_goods_sn"]])->update($v) ;
$this->where([
"inquiry_items_id" => $inquiry_items_id,
"raw_goods_sn" => $v["raw_goods_sn"]
])->update($v);
$currency_sign = array_get(Config('quote.currency_sign'), $v['currency'], '¥');
OpLogModel::log([
'types'=>2,
'relation_id'=>$inquiry_items_id,
'relation_sn'=>$quote_sn,
'content'=>'自动报价-更新,价格:'+($v["currency"] == "1" ? "¥".$v["price_rmb"] : $currency_sign.$v["price_origin"]),
'create_name'=>"系统",
'types' => 2,
'relation_id' => $inquiry_items_id,
'relation_sn' => $quote_sn,
'content' => '自动报价-更新,价格:' + ($v["currency"] == "1" ? "¥" . $v["price_rmb"] : $currency_sign . $v["price_origin"]),
'create_name' => "系统",
]);
}else{
} else {
$v["quote_sn"] = createSn($QuoteModel, 'quote_sn', 'B');
$v["create_time"] = time();
$v["update_time"] = time();
$this->insert($v);
OpLogModel::log([
'types'=>2,
'relation_id'=>$inquiry_items_id,
'relation_sn'=>$v["quote_sn"],
'content'=>'自动报价-插入',
'create_name'=>"系统",
'types' => 2,
'relation_id' => $inquiry_items_id,
'relation_sn' => $v["quote_sn"],
'content' => '自动报价-插入',
'create_name' => "系统",
]);
}
}
......@@ -412,10 +496,10 @@ class QuoteModel extends Model
$contents = '您有新报价,请及时查看!';
$CommonModel->send_msg($inquiry_uid, $contents);
return [0,"新增成功"];
}catch (\Exception $e) {
return [0, "新增成功"];
} catch (\Exception $e) {
$con->rollBack();
return [1001,"新增失败".$e->getMessage()];
return [1001, "新增失败" . $e->getMessage()];
}
}
......@@ -424,12 +508,16 @@ class QuoteModel extends Model
{
$quote_info = $input['quote_info'];
if (!$quote_info) return [1, '报价数据不存在'];
if (!$quote_info) {
return [1, '报价数据不存在'];
}
try {
// 询价明细单状态
$inquiry_items_status = InquiryItemsModel::where('id', $quote_info['inquiry_items_id'])->value('status');
if ($inquiry_items_status == -1) return [1, '新增报价失败,该询价明细已关闭'];
if ($inquiry_items_status == -1) {
return [1, '新增报价失败,该询价明细已关闭'];
}
$brand = json_decode($quote_info['brand_s'], true);
......@@ -453,8 +541,8 @@ class QuoteModel extends Model
$SearchModel = new SearchModel;
$res = $SearchModel->getClassName(json_encode([$params])); // 获取型号分类
if (isset($res[$params['spu_name']."#".strtoupper($params["brand_name"])])) {
$classInfo = $res[$params['spu_name']."#".strtoupper($params["brand_name"])];
if (isset($res[$params['spu_name'] . "#" . strtoupper($params["brand_name"])])) {
$classInfo = $res[$params['spu_name'] . "#" . strtoupper($params["brand_name"])];
$quote_info['class_id2'] = $classInfo['class_id2'];
$quote_info['class_id2_name'] = $classInfo['class_id2_name'];
......@@ -467,7 +555,9 @@ class QuoteModel extends Model
unset($quote_info['delivery_time_unit']);
$res = $this->create($quote_info);
if ($res === false) return [2, '新增报价失败'];
if ($res === false) {
return [2, '新增报价失败'];
}
if ($inquiry_items_status == 1) { // 询价明细为待报价时,更新为已报价
InquiryItemsModel::where('id', $quote_info['inquiry_items_id'])->update(['status' => 2]);
......@@ -491,7 +581,7 @@ class QuoteModel extends Model
$data['types'] = 2;
$data['relation_id'] = $res->id;
$data['relation_sn'] = $quote_info['quote_sn'];
$data['content'] = '新增报价,报价单号:'.$quote_info['quote_sn'];
$data['content'] = '新增报价,报价单号:' . $quote_info['quote_sn'];
$data['create_uid'] = $input['user_id'];
$data['create_name'] = $input['user_name'];
......@@ -501,9 +591,10 @@ class QuoteModel extends Model
$InquiryModel = new InquiryModel;
$inquiry_uid = $InquiryModel->where('id', $quote_info['inquiry_id'])->value('create_uid'); // 询价人
$price = array_get(Config('quote.currency_sign'), $quote_info['currency'], '¥').$quote_info['price_origin'];
$price = array_get(Config('quote.currency_sign'), $quote_info['currency'],
'¥') . $quote_info['price_origin'];
$contents = $input['user_name'].'已报价,请及时查看!报价单号:'.$quote_info['quote_sn'].',型号:'.$quote_info['goods_name'].',单价:'.$price;
$contents = $input['user_name'] . '已报价,请及时查看!报价单号:' . $quote_info['quote_sn'] . ',型号:' . $quote_info['goods_name'] . ',单价:' . $price;
$CommonModel->send_msg($inquiry_uid, $contents);
} catch (Exception $e) {
return [1, $e->getMessage()];
......@@ -516,27 +607,35 @@ class QuoteModel extends Model
{
// 询价明细单状态
$inquiry_items_status = InquiryItemsModel::where('id', $input['inquiry_items_id'])->value('status');
if ($inquiry_items_status == -1) return [1, '导入报价失败,该询价明细已关闭'];
if ($inquiry_items_status == -1) {
return [1, '导入报价失败,该询价明细已关闭'];
}
$file = $_FILES['file']; // $request->file('file')
$filePath = $file['tmp_name']; // 临时路径
// 获取导入内容
$excel = [];
Excel::load($filePath, function($reader) use(&$excel){
Excel::load($filePath, function ($reader) use (&$excel) {
$data = $reader->getSheet(0);
$excel = $data->toArray();
}, 'GBK');
if (empty($excel)) return [1, '未获取到模板内容,请检查模板内容数据格式'];
if (empty($excel)) {
return [1, '未获取到模板内容,请检查模板内容数据格式'];
}
$map = Config('quote.import_quote_map');
if (count($map) != count($excel[0])) return [2, '导入模板错误'];
if (count($map) != count($excel[0])) {
return [2, '导入模板错误'];
}
$excel = $this->handleExcelData($excel, $map); // 处理数据
$valid = $this->excelValid($excel); // 验证excel内容
if ($valid[0] != 0) return $valid;
if ($valid[0] != 0) {
return $valid;
}
array_shift($excel); // 删除第一行
......@@ -574,7 +673,9 @@ class QuoteModel extends Model
}
$res = $this->insert($excel); // 批量插入
if ($res === false) return [1, '添加报价草稿失败'];
if ($res === false) {
return [1, '添加报价草稿失败'];
}
$data = [];
$data['types'] = 2;
......@@ -595,8 +696,8 @@ class QuoteModel extends Model
// 处理导入内容---赋上字段
public function handleExcelData($excel, $map)
{
$goods_info = array_map(function($val) use($map) {
foreach ($val as $k=>$v) {
$goods_info = array_map(function ($val) use ($map) {
foreach ($val as $k => $v) {
$tmp[$map[$k]] = trim($v);
}
......@@ -611,10 +712,12 @@ class QuoteModel extends Model
{
$count = count($excel);
if ($count == 1) return [3, '未填写报价信息'];
if ($count == 1) {
return [3, '未填写报价信息'];
}
// 获取excel菜单栏必填项
$required = array_filter($excel[0], function($v) {
$required = array_filter($excel[0], function ($v) {
return strpos($v, '*') === false ? false : true;
});
......@@ -622,14 +725,14 @@ class QuoteModel extends Model
$CommonModel = new CommonModel();
$err = []; // 提示信息
array_walk($excel, function($val, $key) use($CommonModel, $required, $required_keys, &$err) {
array_walk($excel, function ($val, $key) use ($CommonModel, $required, $required_keys, &$err) {
// 跳过第一条
if ($key != 0) {
if ($val['goods_name']) { // 判断型号是否存在
$res = $CommonModel->isGoodsNameExists($val['goods_name']);
if (!$res) {
$err[] = '第'.($key+1).'行,型号'.$val['goods_name'].'不存在于系统';
$err[] = '第' . ($key + 1) . '行,型号' . $val['goods_name'] . '不存在于系统';
return;
}
}
......@@ -638,7 +741,7 @@ class QuoteModel extends Model
$res = $CommonModel->isBrandNameExists($val['brand_name']);
if (!$res) {
$err[] = '第'.($key+1).'行,品牌'.$val['brand_name'].'不存在于系统';
$err[] = '第' . ($key + 1) . '行,品牌' . $val['brand_name'] . '不存在于系统';
return;
}
}
......@@ -647,62 +750,62 @@ class QuoteModel extends Model
$res = $CommonModel->isSupplierNameExists($val['supplier_name']);
if (!$res) {
$err[] = '第'.($key+1).'行,供应商'.$val['supplier_name'].'不存在于系统';
$err[] = '第' . ($key + 1) . '行,供应商' . $val['supplier_name'] . '不存在于系统';
return;
}
}
if ($val['currency'] != '人民币' && $val['price_origin'] <= 0) {
$err[] = '第'.($key+1).'行,单价等于或小于0';
$err[] = '第' . ($key + 1) . '行,单价等于或小于0';
return;
}
if ($val['currency'] != '人民币' && !preg_match('/^\d{0,9}(\.\d{0,6})?$/', $val['price_origin'])) {
$err[] = '第'.($key+1).'行,单价格式错误';
$err[] = '第' . ($key + 1) . '行,单价格式错误';
return;
}
if ($val['currency'] == '人民币' && $val['price_rmb'] <= 0) {
$err[] = '第'.($key+1).'行,含税价格等于或小于0';
$err[] = '第' . ($key + 1) . '行,含税价格等于或小于0';
return;
}
if ($val['currency'] == '人民币' && !preg_match('/^\d{0,9}(\.\d{0,6})?$/', $val['price_rmb'])) {
$err[] = '第'.($key+1).'行,含税价格格式错误';
$err[] = '第' . ($key + 1) . '行,含税价格格式错误';
return;
}
if (!preg_match('/^\d{1,9}$/', intval($val['quote_number']))) {
$err[] = '第'.($key+1).'行,报价数量格式错误,请填写整数';
$err[] = '第' . ($key + 1) . '行,报价数量格式错误,请填写整数';
return;
}
if (intval($val['quote_number']) <= 0) {
$err[] = '第'.($key+1).'行,报价数量等于或小于0';
$err[] = '第' . ($key + 1) . '行,报价数量等于或小于0';
return;
}
if (strpos($val['delivery_time'], "天") === false && strpos($val['delivery_time'], "周") === false) {
$err[] = '第'.($key+1).'行,交期输入有误,请以天或周结尾';
$err[] = '第' . ($key + 1) . '行,交期输入有误,请以天或周结尾';
return;
}
$delivery_time_day = intval(str_replace("天", "", $val['delivery_time']));
if ($delivery_time_day > 6) {
$err[] = '第'.($key+1).'行,交期输入有误,单位为天时,不能大于6,请按周计数';
$err[] = '第' . ($key + 1) . '行,交期输入有误,单位为天时,不能大于6,请按周计数';
return;
}
$delivery_time_week = intval(str_replace("周", "", $val['delivery_time']));
if ($delivery_time_week > 108) {
$err[] = '第'.($key+1).'行,交期输入有误,单位为周时,不能大于108周';
$err[] = '第' . ($key + 1) . '行,交期输入有误,单位为周时,不能大于108周';
return;
}
foreach ($val as $k=>$v) {
foreach ($val as $k => $v) {
if (in_array($k, $required_keys)) {
if (empty($v)) { // 若必填项值为空,返回提示信息
$err[] = $required[$k].'列,第'.($key+1).'行不能为空';
$err[] = $required[$k] . '列,第' . ($key + 1) . '行不能为空';
break;
}
}
......@@ -710,7 +813,9 @@ class QuoteModel extends Model
}
});
if (!empty($err)) return [1, implode('; ', $err)];
if (!empty($err)) {
return [1, implode('; ', $err)];
}
return [0, '验证成功'];
}
......@@ -720,20 +825,22 @@ class QuoteModel extends Model
{
$id = $input['id'];
if (!$id) return [-1, '参数缺失'];
if (!$id) {
return [-1, '参数缺失'];
}
try {
$draft_info = $this->find($id);
if ($draft_info['currency'] == 1) {
$currency_val = 'RMB';
$price = ',单价:'.$draft_info['price_origin'].',含税单价:'.$draft_info['price_rmb'];
$price = ',单价:' . $draft_info['price_origin'] . ',含税单价:' . $draft_info['price_rmb'];
} else {
$currency_val = 'USD';
$price = ',单价:'.$draft_info['price_origin'];
$price = ',单价:' . $draft_info['price_origin'];
}
$content = '删除报价草稿,草稿报价型号:'.$draft_info['goods_name'].',品牌:'.$draft_info['brand_name'].',供应商:'.$draft_info['supplier_name'].',币种:'.$currency_val.$price;
$content = '删除报价草稿,草稿报价型号:' . $draft_info['goods_name'] . ',品牌:' . $draft_info['brand_name'] . ',供应商:' . $draft_info['supplier_name'] . ',币种:' . $currency_val . $price;
$res = $this->where('id', $id)->delete();
......@@ -756,11 +863,15 @@ class QuoteModel extends Model
// 批量提交报价
public function batchQuote($input)
{
if (!$input['inquiry_items_id']) return [-1, '参数缺失'];
if (!$input['inquiry_items_id']) {
return [-1, '参数缺失'];
}
// 询价明细单状态
$inquiry_items_status = InquiryItemsModel::where('id', $input['inquiry_items_id'])->value('status');
if ($inquiry_items_status == -1) return [1, '批量提交报价失败,该询价明细已关闭'];
if ($inquiry_items_status == -1) {
return [1, '批量提交报价失败,该询价明细已关闭'];
}
try {
$map = [];
......@@ -769,7 +880,9 @@ class QuoteModel extends Model
$count = $this->where($map)->count();
if (!$count) return [1, '当前没有导入报价单'];
if (!$count) {
return [1, '当前没有导入报价单'];
}
$quote_info = $this->where($map)->get()->toArray(); // 获取草稿信息
......@@ -797,26 +910,26 @@ class QuoteModel extends Model
$InquiryModel = new InquiryModel;
$inquiry_uid = $InquiryModel->where('id', $quote_info[0]['inquiry_id'])->value('create_uid'); // 询价人
$contents = $input['user_name'].'已报价,请及时查看!';
$contents = $input['user_name'] . '已报价,请及时查看!';
foreach ($quote_info as $v) {
$data = [];
$data['types'] = 2;
$data['relation_id'] = $v['id'];
$data['relation_sn'] = '';
$data['content'] = '批量提交报价,报价单号:'.$v['quote_sn'];
$data['content'] = '批量提交报价,报价单号:' . $v['quote_sn'];
$data['create_uid'] = $input['user_id'];
$data['create_name'] = $input['user_name'];
OpLogModel::log($data);
if ($v['currency'] == 1) {
$price = '¥'.$v['price_rmb'];
$price = '¥' . $v['price_rmb'];
} else {
$price = '$'.$v['price_origin'];
$price = '$' . $v['price_origin'];
}
$contents .= '报价单号:'.$v['quote_sn'].',单价:'.$price.';';
$contents .= '报价单号:' . $v['quote_sn'] . ',单价:' . $price . ';';
}
$CommonModel = new CommonModel;
......@@ -831,13 +944,19 @@ class QuoteModel extends Model
// 修改报价
public function edit($input)
{
if (!$input['quote_id']) return [-1, '参数缺失'];
if (!$input['quote_id']) {
return [-1, '参数缺失'];
}
try {
$info = $this->find($input['quote_id']);
if ($info['status'] == -1) return [1, '修改失败,报价已撤销,请刷新查看'];
if ($info['status'] == 3) return [1, '修改失败,报价已确认,请刷新查看'];
if ($info['status'] == -1) {
return [1, '修改失败,报价已撤销,请刷新查看'];
}
if ($info['status'] == 3) {
return [1, '修改失败,报价已确认,请刷新查看'];
}
$quote_info = $input['quote_info'];
......@@ -863,14 +982,14 @@ class QuoteModel extends Model
$SearchModel = new SearchModel;
$res = $SearchModel->getClassName(json_encode([$params])); // 获取型号分类
if (isset($res[$params['spu_name']."#".strtoupper($params["brand_name"])])) {
$classInfo = $res[$params['spu_name']."#".strtoupper($params["brand_name"])];
if (isset($res[$params['spu_name'] . "#" . strtoupper($params["brand_name"])])) {
$classInfo = $res[$params['spu_name'] . "#" . strtoupper($params["brand_name"])];
$quote_info['class_id2'] = $classInfo['class_id2'];
$quote_info['class_id2_name'] = $classInfo['class_id2_name'];
}
$delivery_time = $quote_info['delivery_time'].$quote_info['delivery_time_unit'];
$delivery_time = $quote_info['delivery_time'] . $quote_info['delivery_time_unit'];
$quote_info['delivery_time'] = $quote_info['delivery_time_unit'] == '天' ? $quote_info['delivery_time'] : $quote_info['delivery_time'] * 7;
unset($quote_info['delivery_time_unit']);
......@@ -878,12 +997,13 @@ class QuoteModel extends Model
$this->where('id', $input['quote_id'])->update($quote_info);
if ($quote_info['currency'] == 1) {
$price_log = '含税单价:¥'.$quote_info['price_rmb'];
$price_log = '含税单价:¥' . $quote_info['price_rmb'];
} else {
$price_log = '单价:'.array_get(Config('quote.currency_sign'), $quote_info['currency'], '¥').$quote_info['price_origin'];
$price_log = '单价:' . array_get(Config('quote.currency_sign'), $quote_info['currency'],
'¥') . $quote_info['price_origin'];
}
$content = '修改报价,报价单号:'.$input['quote_sn'].',型号:'.$quote_info['goods_name'].','.$price_log.',批次:'.$quote_info['batch'].',货期:'.$delivery_time;
$content = '修改报价,报价单号:' . $input['quote_sn'] . ',型号:' . $quote_info['goods_name'] . ',' . $price_log . ',批次:' . $quote_info['batch'] . ',货期:' . $delivery_time;
$data = [];
$data['types'] = 2;
......@@ -899,7 +1019,7 @@ class QuoteModel extends Model
$InquiryModel = new InquiryModel;
$inquiry_uid = $InquiryModel->where('id', $input['inquiry_id'])->value('create_uid'); // 询价人
$contents = $input['user_name'].$content;
$contents = $input['user_name'] . $content;
$CommonModel->send_msg($inquiry_uid, $contents);
} catch (Exception $e) {
......@@ -923,7 +1043,7 @@ class QuoteModel extends Model
$data['today_quote'][] = $this->getTodayQoutCount($input, $start_time, $end_time);
$data['today_no_quote'][] = $this->getTodayNoQoutCount($input, $start_time, $end_time);
$data['x_axis_data'][] = $i.'点';
$data['x_axis_data'][] = $i . '点';
}
break;
......@@ -957,7 +1077,8 @@ class QuoteModel extends Model
// 当日报价数
public function getTodayQoutCount($input, $start_time, $end_time)
{
return $this->where('create_uid', $input['user_id'])->whereBetween('create_time', [$start_time, $end_time])->count();
return $this->where('create_uid', $input['user_id'])->whereBetween('create_time',
[$start_time, $end_time])->count();
}
// 当日未报价数
......@@ -966,10 +1087,10 @@ class QuoteModel extends Model
return $this->from('inquiry_items as it')
->join('inquiry_items_assign as ia', 'it.id', '=', 'ia.inquiry_items_id')
->leftJoin('quote as q', 'it.id', '=', 'q.inquiry_items_id')
->where('ia.assign_uid', $input['user_id']) // 指定或领取给当前用户
->where('ia.assign_uid', $input['user_id'])// 指定或领取给当前用户
->whereBetween('ia.create_time', [$start_time, $end_time])
->where('it.status', 1) // 未报价
->orWhereRaw("(lie_it.status in (2, 3, 4) and lie_q.create_uid != {$input['user_id']})") // 已报价且非当前用户
->where('it.status', 1)// 未报价
->orWhereRaw("(lie_it.status in (2, 3, 4) and lie_q.create_uid != {$input['user_id']})")// 已报价且非当前用户
->count();
}
......@@ -978,30 +1099,35 @@ class QuoteModel extends Model
{
$quote_id = $input['id'];
$status = $input['status'];
if (!$quote_id) return [-1, '参数缺失'];
if (!$quote_id) {
return [-1, '参数缺失'];
}
try {
$QuoteModel = new QuoteModel();
$InquiryItemsModel = new InquiryItemsModel();
$info = $QuoteModel->select("status","inquiry_items_id")->where("id",$quote_id)->first()->toArray();
$info = $QuoteModel->select("status", "inquiry_items_id")->where("id", $quote_id)->first()->toArray();
$inquiry_items_id = $info["inquiry_items_id"];
#更新询价明细表状态
$InquiryItemsModel->where("id",$inquiry_items_id)->update(["status"=>2, 'update_time'=>time()]); #更新报价待报价
$InquiryItemsModel->where("id", $inquiry_items_id)->update([
"status" => 2,
'update_time' => time()
]); #更新报价待报价
#更新
if ($info["status"] == 2){ #撤销选中
$QuoteModel->where("inquiry_items_id",$inquiry_items_id)->whereNotIn("status",[-1,0,3])
->update(["status"=>1, 'update_time'=>time()]); #重启其他所有状态为 已报价
if ($info["status"] == 2) { #撤销选中
$QuoteModel->where("inquiry_items_id", $inquiry_items_id)->whereNotIn("status", [-1, 0, 3])
->update(["status" => 1, 'update_time' => time()]); #重启其他所有状态为 已报价
}
if ($info["status"] == 3){ #撤销确认
$QuoteModel->where("inquiry_items_id",$inquiry_items_id)->whereNotIn("status",[-1,0,2])
->update(["status"=>1, 'update_time'=>time()]); #重启其他所有状态为 已报价
if ($info["status"] == 3) { #撤销确认
$QuoteModel->where("inquiry_items_id", $inquiry_items_id)->whereNotIn("status", [-1, 0, 2])
->update(["status" => 1, 'update_time' => time()]); #重启其他所有状态为 已报价
}
$data = [];
$data['types'] = 1;
$data['relation_id'] = $inquiry_items_id;
$data['content'] = '撤销报价:'.QuoteMap::$status[$status];
$data['content'] = '撤销报价:' . QuoteMap::$status[$status];
$data['create_uid'] = $input['user_id'];
$data['create_name'] = $input["user_name"];
......
......@@ -3,7 +3,7 @@ namespace App\map;
//询价枚举
class InquiryMap{
//状态 -1:已关闭 1:待报价 2:已报价 3:已选中 4:已固定 5:已确认
//状态 -1:已关闭 1:待报价 2:已报价 3:已选中 4:已领取 5:已确认
const status_close = -1;
const status_ready = 1;
const status_replay = 2;
......@@ -15,7 +15,7 @@ class InquiryMap{
self::status_ready => "待报价",
self::status_replay => "已报价",
self::status_check => "已选中",
self::status_fix => "已固定",
self::status_fix => "已领取",
self::status_sure => "已确认",
];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment