调整商品溯源

This commit is contained in:
lewis 2025-03-12 17:54:08 +08:00
parent 8c4128ccd4
commit ad25d6c599
10 changed files with 109 additions and 49 deletions

View File

@ -40,7 +40,7 @@ class ProductSourceLinkInfoController extends BaseAdminController
{ {
$params = (new ProductSourceLinkInfoValidate())->post()->goCheck('add'); $params = (new ProductSourceLinkInfoValidate())->post()->goCheck('add');
$result = ProductSourceLinkInfoLogic::add($params); $result = ProductSourceLinkInfoLogic::add($params);
if (true === $result) { if ($result) {
return $this->success('添加成功', [], 1, 1); return $this->success('添加成功', [], 1, 1);
} }
return $this->fail(ProductSourceLinkInfoLogic::getError()); return $this->fail(ProductSourceLinkInfoLogic::getError());

View File

@ -51,7 +51,7 @@ class ProductSourceLinkLists extends BaseAdminDataLists implements ListsSearchIn
->select() ->select()
->each(function ($item) { ->each(function ($item) {
$item->total_nums = ProductSourceLinkInfo::where('product_id', $item->product_id)->where('oid',$item->id)->where('types',1)->sum('nums'); $item->total_nums = ProductSourceLinkInfo::where('product_id', $item->product_id)->where('oid',$item->id)->where('types',1)->sum('nums');
$item->warehouse_nums = ProductSourceLinkInfo::where('product_id', $item->product_id)->where('oid',$item->id)->where('types',2)->sum('nums'); $item->warehouse_outbound_nums = ProductSourceLinkInfo::where('product_id', $item->product_id)->where('oid',$item->id)->where('types',2)->sum('nums');
}) })
->toArray(); ->toArray();
} }

View File

@ -43,10 +43,13 @@ class ProductSourceLinkInfoLists extends BaseAdminDataLists implements ListsSear
public function lists(): array public function lists(): array
{ {
return ProductSourceLinkInfo::where($this->searchWhere) return ProductSourceLinkInfo::where($this->searchWhere)
->field(['id', 'oid', 'product_id', 'nums', 'types', 'link_id', 'total_price']) ->with(['product'])
->limit($this->limitOffset, $this->limitLength) ->limit($this->limitOffset, $this->limitLength)
->order(['id' => 'desc']) ->order(['id' => 'desc'])
->select() ->select()
->each(function ($item) {
$item['type_name'] = $item->getTypeName();
})
->toArray(); ->toArray();
} }

View File

@ -2,11 +2,14 @@
namespace app\admin\logic\beforehand_order_cart_info; namespace app\admin\logic\beforehand_order_cart_info;
use app\admin\logic\product_source_link\ProductSourceLinkLogic;
use app\admin\logic\purchase_product_offer\PurchaseProductOfferLogic; use app\admin\logic\purchase_product_offer\PurchaseProductOfferLogic;
use app\admin\logic\warehouse_product\WarehouseProductLogic; use app\admin\logic\warehouse_product\WarehouseProductLogic;
use app\common\model\beforehand_order_cart_info\BeforehandOrderCartInfo; use app\common\model\beforehand_order_cart_info\BeforehandOrderCartInfo;
use app\common\logic\BaseLogic; use app\common\logic\BaseLogic;
use app\common\model\beforehand_order\BeforehandOrder; use app\common\model\beforehand_order\BeforehandOrder;
use app\common\model\product_source_link\ProductSourceLink;
use app\common\model\product_source_link_info\ProductSourceLinkInfo;
use app\common\model\purchase_product_offer\PurchaseProductOffer; use app\common\model\purchase_product_offer\PurchaseProductOffer;
use app\common\model\store_product\StoreProduct; use app\common\model\store_product\StoreProduct;
use app\common\model\warehouse_order\WarehouseOrder; use app\common\model\warehouse_order\WarehouseOrder;
@ -290,6 +293,12 @@ class BeforehandOrderCartInfoLogic extends BaseLogic
if (!$result) { if (!$result) {
throw new BusinessException('出库失败,预订单更新出错'); throw new BusinessException('出库失败,预订单更新出错');
} }
ProductSourceLink::add([
'purchase_product_offer' => $offer_list,
'types' => ProductSourceLinkInfo::TypeIn,
'buyer_id' => $res['buyer_id'],
'warehouse_id' => $params['warehouse_id'],
]);
Db::commit(); Db::commit();
return true; return true;
} catch (\Throwable $e) { } catch (\Throwable $e) {
@ -389,7 +398,7 @@ class BeforehandOrderCartInfoLogic extends BaseLogic
if ($purchaseProductOffer['is_storage'] == 1) { if ($purchaseProductOffer['is_storage'] == 1) {
throw new BusinessException('商品已入库'); throw new BusinessException('商品已入库');
} }
$beforehandOrder = BeforehandOrder::where('id', $params['bhoid'])->field('id,order_type,warehousing_id,is_warehousing')->find(); $beforehandOrder = BeforehandOrder::where('id', $params['bhoid'])->field('id,buyer_id,order_type,warehousing_id,is_warehousing')->find();
$completed_amount = PurchaseProductOffer::where(['order_id' => $params['bhoid'], 'pay_type' => 1, 'is_storage' => 1])->sum('total_price'); $completed_amount = PurchaseProductOffer::where(['order_id' => $params['bhoid'], 'pay_type' => 1, 'is_storage' => 1])->sum('total_price');
$outstanding_amount = PurchaseProductOffer::where(['order_id' => $params['bhoid'], 'pay_type' => 2, 'is_storage' => 1])->sum('total_price'); $outstanding_amount = PurchaseProductOffer::where(['order_id' => $params['bhoid'], 'pay_type' => 2, 'is_storage' => 1])->sum('total_price');
@ -435,6 +444,9 @@ class BeforehandOrderCartInfoLogic extends BaseLogic
$data['purchase'] = $purchaseProductOffer['price']; $data['purchase'] = $purchaseProductOffer['price'];
$data['total_price'] = $purchaseProductOffer['total_price']; $data['total_price'] = $purchaseProductOffer['total_price'];
$data['financial_pm'] = 1; $data['financial_pm'] = 1;
$data['buyer_id'] = $beforehandOrder['buyer_id'];
$data['buyer_nums'] = $data['nums'];
$data['price'] = $data['purchase'];
$data['manufacture'] = $purchaseProductOffer['manufacture'] > 0 ? date('Y-m-d H:i:s', $purchaseProductOffer['manufacture']) : ''; $data['manufacture'] = $purchaseProductOffer['manufacture'] > 0 ? date('Y-m-d H:i:s', $purchaseProductOffer['manufacture']) : '';
$data['expiration_date'] = $purchaseProductOffer['expiration_date'] > 0 ? date('Y-m-d H:i:s', $purchaseProductOffer['expiration_date']) : ''; $data['expiration_date'] = $purchaseProductOffer['expiration_date'] > 0 ? date('Y-m-d H:i:s', $purchaseProductOffer['expiration_date']) : '';
if ($data['nums'] > 0) { if ($data['nums'] > 0) {
@ -461,7 +473,6 @@ class BeforehandOrderCartInfoLogic extends BaseLogic
if (!in_array($beforehandOrder['order_type'], [6, 9])) { if (!in_array($beforehandOrder['order_type'], [6, 9])) {
PurchaseProductOfferLogic::setProductGroupPrice($purchaseProductOffer, $product, $params['warehouse_id']); PurchaseProductOfferLogic::setProductGroupPrice($purchaseProductOffer, $product, $params['warehouse_id']);
} }
Db::commit(); Db::commit();
return true; return true;
} catch (\Throwable $e) { } catch (\Throwable $e) {

View File

@ -3,8 +3,10 @@
namespace app\admin\logic\product_source_link; namespace app\admin\logic\product_source_link;
use app\admin\logic\product_source_link_info\ProductSourceLinkInfoLogic;
use app\common\model\product_source_link\ProductSourceLink; use app\common\model\product_source_link\ProductSourceLink;
use app\common\logic\BaseLogic; use app\common\logic\BaseLogic;
use app\common\model\product_source_link_info\ProductSourceLinkInfo;
use support\exception\BusinessException; use support\exception\BusinessException;
use think\facade\Db; use think\facade\Db;
@ -20,31 +22,33 @@ class ProductSourceLinkLogic extends BaseLogic
/** /**
* @notes 添加商品溯源管理 * @notes 添加商品溯源管理
* @param array $params * @param array $info
* @return bool * @return bool
* @author admin * @author admin
* @date 2025/03/12 10:03 * @date 2025/03/12 10:03
*/ */
public static function add(array $params): bool public static function add(array $info): bool
{ {
Db::startTrans(); foreach ($info['purchase_product_offer'] as $offer) {
try { $model = ProductSourceLink::where('product_id', $offer['product_id'])->where('purchase_uid', $info['buyer_id'])->where('warehouse_id', $info['warehouse_id'])->find();
ProductSourceLink::create([ if (empty($model)) {
'purchase_uid' => $params['purchase_uid'], $model = new ProductSourceLink();
'product_id' => $params['product_id'], $model->product_id = $offer['product_id'];
'total_nums' => $params['total_nums'], $model->purchase_uid = $info['buyer_id'];
'nums' => $params['nums'], $model->warehouse_id = $info['warehouse_id'];
'warehouse_id' => $params['warehouse_id'], $model->save();
'warehouse_total_nums' => $params['warehouse_total_nums'], }
'warehouse_nums' => $params['warehouse_nums'] ProductSourceLinkInfoLogic::add([
'oid' => $model['id'],
'product_id' => $offer['product_id'],
'nums' => $offer['buyer_nums'],
'types' => $info['types'],
'link_id' => $info['link_id'],
'price' => $offer['price'],
'total_price' => $offer['total_price'],
]); ]);
Db::commit();
return true;
} catch (\Throwable $e) {
Db::rollback();
throw new BusinessException($e->getMessage());
} }
return true;
} }
@ -62,11 +66,7 @@ class ProductSourceLinkLogic extends BaseLogic
ProductSourceLink::where('id', $params['id'])->update([ ProductSourceLink::where('id', $params['id'])->update([
'purchase_uid' => $params['purchase_uid'], 'purchase_uid' => $params['purchase_uid'],
'product_id' => $params['product_id'], 'product_id' => $params['product_id'],
'total_nums' => $params['total_nums'],
'nums' => $params['nums'],
'warehouse_id' => $params['warehouse_id'], 'warehouse_id' => $params['warehouse_id'],
'warehouse_total_nums' => $params['warehouse_total_nums'],
'warehouse_nums' => $params['warehouse_nums']
]); ]);
Db::commit(); Db::commit();

View File

@ -21,29 +21,15 @@ class ProductSourceLinkInfoLogic extends BaseLogic
/** /**
* @notes 添加商品溯源详细 * @notes 添加商品溯源详细
* @param array $params * @param array $params
* @return bool
* @author admin * @author admin
* @date 2025/03/12 10:08 * @date 2025/03/12 10:08
*/ */
public static function add(array $params): bool public static function add(array $params)
{ {
Db::startTrans(); $model = new ProductSourceLinkInfo();
try { $model->setAttrs($params);
ProductSourceLinkInfo::create([ $model->save();
'oid' => $params['oid'], return $model;
'product_id' => $params['product_id'],
'nums' => $params['nums'],
'types' => $params['types'],
'link_id' => $params['link_id'],
'total_price' => $params['total_price']
]);
Db::commit();
return true;
} catch (\Throwable $e) {
Db::rollback();
throw new BusinessException($e->getMessage());
}
} }
@ -100,4 +86,18 @@ class ProductSourceLinkInfoLogic extends BaseLogic
{ {
return ProductSourceLinkInfo::findOrEmpty($params['id'])->toArray(); return ProductSourceLinkInfo::findOrEmpty($params['id'])->toArray();
} }
public static function updateByLinkId($linkId, $types, array $params)
{
ProductSourceLinkInfo::where('link_id', $linkId)->where('types', $types)->update($params);
}
public static function deleteByLinkId($linkId, $types)
{
$data = ProductSourceLinkInfo::where('link_id', $linkId)->where('types', $types)->find();
if (!empty($data)) {
$data->delete();
}
}
} }

View File

@ -195,7 +195,8 @@ class SystemStoreStorageLogic extends BaseLogic
$warehouseProduct->save(); $warehouseProduct->save();
$warehouseStorage->nums += $params['num']; $warehouseStorage->nums += $params['num'];
$warehouseStorage->save(); $warehouseStorage->save();
SqlChannelLog('StoreBranchProduct', $warehouseProduct['id'], $warehouseProduct['nums'], 1,Request()->url()); SqlChannelLog('WarehouseProductStorege', $warehouseStorage['id'], $params['num'], 1,Request()->url());
SqlChannelLog('StoreBranchProduct', $StoreProduct['id'], $params['num'], -1,Request()->url());
Db::commit(); Db::commit();
return true; return true;
} catch (\Exception $e) { } catch (\Exception $e) {

View File

@ -20,6 +20,7 @@ class WarehouseOrderLogic extends BaseLogic
/** /**
* @deprecated 已禁止直接创建入库单
* @notes 添加仓储商品单 * @notes 添加仓储商品单
* @param array $params * @param array $params
* @return bool * @return bool
@ -92,9 +93,11 @@ class WarehouseOrderLogic extends BaseLogic
throw new BusinessException('订单不存在'); throw new BusinessException('订单不存在');
} }
$order_type=BeforehandOrder::where('warehousing_id|outbound_id',$find['id'])->value('order_type')??0; $order_type=BeforehandOrder::where('warehousing_id|outbound_id',$find['id'])->value('order_type')??0;
$buyerId = BeforehandOrder::where('warehousing_id|outbound_id',$find['id'])->value('buyer_id') ?? 0;
Db::startTrans(); Db::startTrans();
try { try {
foreach ($params['product_arr'] as $k => $v) { foreach ($params['product_arr'] as $k => $v) {
$data['buyer_id'] = $buyerId;
$data['order_type'] = $order_type; $data['order_type'] = $order_type;
$data['supplier_id'] = $v['supplier_id']??0; $data['supplier_id'] = $v['supplier_id']??0;
$data['pay_type'] = $v['pay_type']??0; $data['pay_type'] = $v['pay_type']??0;
@ -106,6 +109,8 @@ class WarehouseOrderLogic extends BaseLogic
$data['product_id'] = $v['id']; $data['product_id'] = $v['id'];
$data['nums'] = $v['nums']; $data['nums'] = $v['nums'];
$data['purchase'] = $v['purchase']; $data['purchase'] = $v['purchase'];
$data['buyer_nums'] = $v['nums'];
$data['price'] = $v['purchase'];
$data['total_price'] = $v['total_price']; $data['total_price'] = $v['total_price'];
$data['financial_pm'] = $find['financial_pm']; $data['financial_pm'] = $find['financial_pm'];
if (!empty($v['manufacture'])) { if (!empty($v['manufacture'])) {

View File

@ -2,8 +2,12 @@
namespace app\admin\logic\warehouse_product; namespace app\admin\logic\warehouse_product;
use app\admin\logic\product_source_link\ProductSourceLinkLogic;
use app\admin\logic\product_source_link_info\ProductSourceLinkInfoLogic;
use app\admin\logic\store_branch_product\StoreBranchProductLogic; use app\admin\logic\store_branch_product\StoreBranchProductLogic;
use app\admin\logic\store_product\StoreProductLogic; use app\admin\logic\store_product\StoreProductLogic;
use app\common\model\beforehand_order\BeforehandOrder;
use app\common\model\product_source_link_info\ProductSourceLinkInfo;
use app\common\model\warehouse_product\WarehouseProduct; use app\common\model\warehouse_product\WarehouseProduct;
use app\common\logic\BaseLogic; use app\common\logic\BaseLogic;
use app\common\model\purchase_product_offer\PurchaseProductOffer; use app\common\model\purchase_product_offer\PurchaseProductOffer;
@ -29,7 +33,6 @@ class WarehouseProductLogic extends BaseLogic
/** /**
* @notes 添加商品仓储信息 * @notes 添加商品仓储信息
* @param array $params * @param array $params
* @return bool
* @author admin * @author admin
* @date 2024/07/31 16:55 * @date 2024/07/31 16:55
*/ */
@ -112,6 +115,13 @@ class WarehouseProductLogic extends BaseLogic
$res = WarehouseProduct::create($data); $res = WarehouseProduct::create($data);
SqlChannelLog('WarehouseProduct', $res['id'], $params['nums'], $params['financial_pm'] == 1 ? 1 : -1, Request()->url(),$admin_id); SqlChannelLog('WarehouseProduct', $res['id'], $params['nums'], $params['financial_pm'] == 1 ? 1 : -1, Request()->url(),$admin_id);
ProductSourceLinkLogic::add([
'purchase_product_offer' => [$params],
'types' => ProductSourceLinkInfo::TypeIn,
'buyer_id' => $params['buyer_id'],
'warehouse_id' => $params['warehouse_id'],
'link_id' => $res['id'],
]);
return $res; return $res;
} catch (\Throwable $e) { } catch (\Throwable $e) {
throw new BusinessException($e->getMessage()); throw new BusinessException($e->getMessage());
@ -245,12 +255,19 @@ class WarehouseProductLogic extends BaseLogic
$datas['expiration_date'] = strtotime($params['expiration_date']); $datas['expiration_date'] = strtotime($params['expiration_date']);
} }
$res->save($datas); $res->save($datas);
$ProductSourceLinkInfoParams = ['nums' => $params['nums'], 'total_price' => $params['total_price']];
if ($find['financial_pm'] == 1) {
$ProductSourceLinkInfoParams['price'] = $params['purchase'];
ProductSourceLinkInfoLogic::updateByLinkId($res['id'], ProductSourceLinkInfo::TypeIn, $ProductSourceLinkInfoParams);
} else {
$ProductSourceLinkInfoParams['price'] = $params['price'];
ProductSourceLinkInfoLogic::updateByLinkId($res['id'], ProductSourceLinkInfo::TypeOut, $ProductSourceLinkInfoParams);
}
} }
Db::commit(); Db::commit();
return $res; return $res;
} catch (\Exception $e) { } catch (\Exception $e) {
Db::rollback(); Db::rollback();
d($e);
throw new BusinessException($e->getMessage()); throw new BusinessException($e->getMessage());
} }
} }
@ -274,6 +291,8 @@ class WarehouseProductLogic extends BaseLogic
self::incProductDecStorege($res, $res['nums'], $admin_id); self::incProductDecStorege($res, $res['nums'], $admin_id);
} }
$res->delete(); $res->delete();
$types = $res['financial_pm'] == 1 ? ProductSourceLinkInfo::TypeIn : ProductSourceLinkInfo::TypeOut;
ProductSourceLinkInfoLogic::deleteByLinkId($res['id'], $types);
Db::commit(); Db::commit();
return true; return true;
} catch (\Throwable $th) { } catch (\Throwable $th) {

View File

@ -4,6 +4,7 @@ namespace app\common\model\product_source_link_info;
use app\common\model\BaseModel; use app\common\model\BaseModel;
use app\common\model\store_product\StoreProduct;
use think\model\concern\SoftDelete; use think\model\concern\SoftDelete;
@ -18,5 +19,25 @@ class ProductSourceLinkInfo extends BaseModel
protected $name = 'product_source_link_info'; protected $name = 'product_source_link_info';
protected $deleteTime = 'delete_time'; protected $deleteTime = 'delete_time';
const TypeIn = 1;
const TypeOut = 2;
const TypeStoreIn = 3;
const TypeOrder = 4;
public function getTypeName()
{
$typeMap = [
self::TypeIn => '入库',
self::TypeOut => '出库',
self::TypeStoreIn => '门店入库',
self::TypeOrder => '订单',
];
return $typeMap[$this->getAttr('types')];
}
public function product()
{
return $this->hasOne(StoreProduct::class, 'id', 'product_id')->bind(['product_name' => 'store_name', 'image']);
}
} }