创建药品订单时,新增了药品明细的实际金额字段
This commit is contained in:
parent
d83ec385a7
commit
8afd0d91ed
@ -467,7 +467,44 @@ class TestController extends AbstractController
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function test_17(){
|
public function test_17(){
|
||||||
|
// 测试计算药品订单明细实际金额
|
||||||
|
// $product_datas = array(
|
||||||
|
// array(
|
||||||
|
// "product_id" => 1,
|
||||||
|
// "product_price" => 10,
|
||||||
|
// "actual_product_price" => 10,
|
||||||
|
// "actual_quantity" => 2,
|
||||||
|
// ),
|
||||||
|
// array(
|
||||||
|
// "product_id" => 2,
|
||||||
|
// "product_price" => 20,
|
||||||
|
// "actual_product_price" => 20,
|
||||||
|
// "actual_quantity" => 2,
|
||||||
|
// ),
|
||||||
|
// array(
|
||||||
|
// "product_id" => 3,
|
||||||
|
// "product_price" => 5,
|
||||||
|
// "actual_product_price" => 5,
|
||||||
|
// "actual_quantity" => 2,
|
||||||
|
// ),
|
||||||
|
// );
|
||||||
|
//
|
||||||
|
// $coupons = array(
|
||||||
|
// array(
|
||||||
|
// "application_scope" => 1,
|
||||||
|
// "coupon_price" => 3,
|
||||||
|
// "product_id" => "",
|
||||||
|
// ),
|
||||||
|
// array(
|
||||||
|
// "application_scope" => 5,
|
||||||
|
// "coupon_price" => 1,
|
||||||
|
// "product_id" => "1",
|
||||||
|
// )
|
||||||
|
// );
|
||||||
|
//
|
||||||
|
// $PatientOrderService = new PatientOrderService();
|
||||||
|
// $product_datas = $PatientOrderService->calculateProductOrderItemActualPrice($product_datas,$coupons);
|
||||||
|
// dump($product_datas);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 退款
|
// 退款
|
||||||
|
|||||||
@ -18,6 +18,7 @@ use Hyperf\Snowflake\Concern\Snowflake;
|
|||||||
* @property int $product_id 商品id
|
* @property int $product_id 商品id
|
||||||
* @property string $product_name 商品名称
|
* @property string $product_name 商品名称
|
||||||
* @property string $product_price 商品价格
|
* @property string $product_price 商品价格
|
||||||
|
* @property string $actual_product_price 实际商品价格
|
||||||
* @property string $product_platform_code 商品处方平台编码
|
* @property string $product_platform_code 商品处方平台编码
|
||||||
* @property int $amount 数量
|
* @property int $amount 数量
|
||||||
* @property string $manufacturer 生产厂家
|
* @property string $manufacturer 生产厂家
|
||||||
@ -25,7 +26,7 @@ use Hyperf\Snowflake\Concern\Snowflake;
|
|||||||
* @property string $product_spec 商品规格
|
* @property string $product_spec 商品规格
|
||||||
* @property \Carbon\Carbon $created_at 创建时间
|
* @property \Carbon\Carbon $created_at 创建时间
|
||||||
* @property \Carbon\Carbon $updated_at 修改时间
|
* @property \Carbon\Carbon $updated_at 修改时间
|
||||||
* @property-read Product $Product
|
* @property-read Product|null $Product
|
||||||
*/
|
*/
|
||||||
class OrderProductItem extends Model
|
class OrderProductItem extends Model
|
||||||
{
|
{
|
||||||
@ -39,7 +40,7 @@ class OrderProductItem extends Model
|
|||||||
/**
|
/**
|
||||||
* The attributes that are mass assignable.
|
* The attributes that are mass assignable.
|
||||||
*/
|
*/
|
||||||
protected array $fillable = ['product_item_id', 'order_product_id', 'order_inquiry_id', 'order_prescription_id', 'product_id', 'product_name', 'product_price', 'product_platform_code', 'amount', 'manufacturer', 'product_cover_img', 'product_spec', 'created_at', 'updated_at'];
|
protected array $fillable = ['product_item_id', 'order_product_id', 'order_inquiry_id', 'order_prescription_id', 'product_id', 'product_name', 'product_price', 'actual_product_price', 'product_platform_code', 'amount', 'manufacturer', 'product_cover_img', 'product_spec', 'created_at', 'updated_at'];
|
||||||
|
|
||||||
protected string $primaryKey = "product_item_id";
|
protected string $primaryKey = "product_item_id";
|
||||||
|
|
||||||
|
|||||||
@ -176,6 +176,8 @@ class OrderPrescriptionService extends BaseService
|
|||||||
* 上报处方平台
|
* 上报处方平台
|
||||||
* @param string $order_product_id 商品订单id
|
* @param string $order_product_id 商品订单id
|
||||||
* @return bool
|
* @return bool
|
||||||
|
* @throws ContainerExceptionInterface
|
||||||
|
* @throws NotFoundExceptionInterface
|
||||||
*/
|
*/
|
||||||
public function reportPrescription(string $order_product_id): bool
|
public function reportPrescription(string $order_product_id): bool
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1647,6 +1647,9 @@ class PatientOrderService extends BaseService
|
|||||||
// 获取可用优惠卷总金额
|
// 获取可用优惠卷总金额
|
||||||
$coupon_amount_total = $userCouponService->getCouponTotalPrice($user_coupons);
|
$coupon_amount_total = $userCouponService->getCouponTotalPrice($user_coupons);
|
||||||
|
|
||||||
|
// 计算药品订单明细实际金额
|
||||||
|
$product_datas = $this->calculateProductOrderItemActualPrice($product_datas,$user_coupons);
|
||||||
|
|
||||||
// 处理运费数据
|
// 处理运费数据
|
||||||
$app_env = config('app_env', 'prod');
|
$app_env = config('app_env', 'prod');
|
||||||
if ($app_env != "dev") {
|
if ($app_env != "dev") {
|
||||||
@ -1767,6 +1770,7 @@ class PatientOrderService extends BaseService
|
|||||||
$data['product_id'] = $product_data['product_id'];
|
$data['product_id'] = $product_data['product_id'];
|
||||||
$data['product_name'] = $product_data['product_name'];
|
$data['product_name'] = $product_data['product_name'];
|
||||||
$data['product_price'] = bcmul((string)$product_data['product_price'], (string)$product_data['actual_quantity'], 3);
|
$data['product_price'] = bcmul((string)$product_data['product_price'], (string)$product_data['actual_quantity'], 3);
|
||||||
|
$data['actual_product_price'] = $product_data['actual_product_price'];
|
||||||
$data['product_platform_code'] = $product_data['product_platform_code'];
|
$data['product_platform_code'] = $product_data['product_platform_code'];
|
||||||
$data['amount'] = $product_data['product_num'];
|
$data['amount'] = $product_data['product_num'];
|
||||||
$data['manufacturer'] = $product_data['manufacturer'];
|
$data['manufacturer'] = $product_data['manufacturer'];
|
||||||
@ -3404,4 +3408,98 @@ class PatientOrderService extends BaseService
|
|||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算药品订单明细实际金额
|
||||||
|
* 此方法暂不考虑按品牌,按类别使用情况
|
||||||
|
* @param array $product_datas 药品数据
|
||||||
|
* @param array $coupons 优惠券数据
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function calculateProductOrderItemActualPrice(array &$product_datas, array $coupons): array
|
||||||
|
{
|
||||||
|
if (empty($coupons)){
|
||||||
|
return $product_datas;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($product_datas as &$product_data){
|
||||||
|
$product_data["actual_product_price"] = bcmul(
|
||||||
|
$product_data['actual_product_price'],
|
||||||
|
$product_data['actual_quantity'],
|
||||||
|
3
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理单一商品使用优惠券
|
||||||
|
foreach ($coupons as $coupon){
|
||||||
|
// 适用范围(1:全场通用 2:问诊 3:按品牌适用 4:按类别适用 5:单品使用 6:全品类药品)
|
||||||
|
if ($coupon["application_scope"] == 5){
|
||||||
|
$product_ids = explode(',',$coupon['product_id']);
|
||||||
|
foreach ($product_datas as &$product_data){
|
||||||
|
if (in_array($product_data['product_id'],$product_ids)){
|
||||||
|
$product_data["actual_product_price"] = bcsub(
|
||||||
|
$product_data['actual_product_price'],
|
||||||
|
$coupon['coupon_price'],
|
||||||
|
2
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理订单通用优惠券
|
||||||
|
$coupon_total_amount = 0; // 订单通用优惠券总金额
|
||||||
|
foreach ($coupons as $coupon){
|
||||||
|
// 适用范围(1:全场通用 2:问诊 3:按品牌适用 4:按类别适用 5:单品使用 6:全品类药品)
|
||||||
|
if ($coupon["application_scope"] == 6 || $coupon["application_scope"] == 1){
|
||||||
|
$coupon_total_amount = bcadd($coupon_total_amount,$coupon['coupon_price'],2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($coupon_total_amount != 0){
|
||||||
|
$product_total_amount = 0; // 订单明细总金额
|
||||||
|
foreach ($product_datas as &$product_data){
|
||||||
|
$product_total_amount = bcadd(
|
||||||
|
$product_total_amount,
|
||||||
|
$product_data['actual_product_price'],
|
||||||
|
3
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$used_coupon_total_amount = 0; // 已使用的优惠券金额
|
||||||
|
foreach ($product_datas as &$product_data){
|
||||||
|
// 本商品可优惠的金额 = (商品价格 / 商品总价格) * 优惠券总金额
|
||||||
|
$amount = bcmul(
|
||||||
|
bcdiv(
|
||||||
|
$product_data['actual_product_price'],
|
||||||
|
$product_total_amount,
|
||||||
|
2
|
||||||
|
),
|
||||||
|
$coupon_total_amount,
|
||||||
|
2
|
||||||
|
);
|
||||||
|
|
||||||
|
// 分配当前商品的优惠金额 = 原金额 - 本商品可优惠的金额
|
||||||
|
$product_data["actual_product_price"] = bcsub(
|
||||||
|
$product_data['actual_product_price'],
|
||||||
|
$amount,
|
||||||
|
2
|
||||||
|
);
|
||||||
|
|
||||||
|
$used_coupon_total_amount = bcadd($used_coupon_total_amount,$amount,2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理浮点误差,将剩余金额分配到第一个商品
|
||||||
|
$remaining_amount = bcsub($coupon_total_amount,$used_coupon_total_amount,2);
|
||||||
|
if ($remaining_amount != 0){
|
||||||
|
$product_datas[0]['actual_product_price'] = bcsub(
|
||||||
|
$product_datas[0]["actual_product_price"],
|
||||||
|
$remaining_amount,
|
||||||
|
2
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $product_datas;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user