[ * goods_id 商品id * sku_id 规格id * purchase_price 进价 * goods_class_id 分类id * attribute_state 1常规 2规格 * pricing_method 1不称重 2称重 * type 1入库 2退货出库 3调价单修改 * time 添加时间 * ] * @return array * [ * status * message * ] */ public function modifyCostPrice($parameter) { $verify = $this->modifyCostPriceVerify($parameter); if ($verify['status'] != 1) { return $verify; } $result = $this->reckonCostPrice($parameter); //计算成本价 if ($result['status'] != 1) { return $result; } $cost_price = $result['data']['cost_price']; //成本价 $goods = $parameter['goods']; //商品信息 $where = [ 'merchant_id' => $parameter['merchant_id'], 'goods_id' => $goods['goods_id'], 'status' => ['in', '0,1'], ]; if (!empty($goods['sku_id'])) { $where['sku_id'] = $goods['sku_id']; } switch ($parameter['user_type']) { case 1: //商户 $saleGoodsModel = new SaleMGoodsModel(); if (!empty($goods['sku_id'])) { $goodsModel = new SkuMGoodsModel(); $map = [ 'mgoods_id' => $goods['goods_id'], 'id' => $goods['sku_id'] ]; $goodsSave = ['purch_price' => $cost_price]; } else { $goodsModel = new RetailMgoodsModel(); $map = ['id' => $goods['goods_id']]; $goodsSave = ['purch_price' => $cost_price]; } break; case 2: //门店 $saleGoodsModel = new SSaleMGoodsModel(); if (!empty($goods['sku_id'])) { $goodsModel = new RetailSkuGoodsModel(); $map = [ 'goods_id' => $goods['goods_id'], 'id' => $goods['sku_id'] ]; $goodsSave = ['purchase_price' => $cost_price]; } else { $goodsModel = new RetailGoodsModel(); $map = ['id' => $goods['goods_id']]; $goodsSave = ['purchase_price' => $cost_price]; } $where['store_id'] = $parameter['store_id']; break; } try { $result = $saleGoodsModel->updateData($where, ['cost_price' => $cost_price]); //库存成本价修改 if ($result) { $result = $goodsModel->updateOrder($map, $goodsSave); //商品档案成本价修改 } } catch (\Exception $e) { return callBack(statusCode()['error'], "暂未修改"); } if ($result) { $parameter['goods']['new_cost_price'] = $cost_price; $result = $this->costPriceRecord($parameter); //成本价记录 if ($result['status'] != 1) { return callBack(statusCode()['success'], "成本价修改成功,记录添加失败"); } else { return callBack(statusCode()['success'], "操作成功"); } } else { return callBack(statusCode()['error'], "暂未修改"); } } /** * 成本价记录 * @param $parameter * [ * user_type 1 商户 2门店 * merchant_id * store_id * goods=>[ * new_cost_price 成本价 * goods_id 商品id * sku_id 规格id * purchase_price 进价 * goods_class_id 分类id * attribute_state 1常规 2规格 * pricing_method 1不称重 2称重 * type 1入库 2退货出库 3调价单修改 * time 添加时间 * ] * ] * @return array * [ * status * msg * data 添加id * ] */ public function costPriceRecord($parameter) { $goods = $parameter['goods']; $data = [ 'merchant_id' => $parameter['merchant_id'], 'cost_price' => $goods['new_cost_price'], 'goods_id' => $goods['goods_id'], 'sku_id' => $goods['sku_id'] ? $goods['sku_id'] : 0, 'purchase_price' => $goods['cost_price'], 'goods_class_id' => $goods['goods_class_id'], 'attribute_state' => $goods['attribute_state'], 'pricing_method' => $goods['pricing_method'], 'type' => $goods['type'] ? $goods['type'] : 1, 'add_time' => $goods['time'] ? $goods['time'] : time() ]; switch ($parameter['user_type']) { case 1: //商户 $costPriceModel = new CostPriceRecordModel(); break; case 2: //门店 $data['store_id'] = $parameter['store_id']; $costPriceModel = new SCostPriceRecordModel(); break; } try { $result = $costPriceModel->addData($data); } catch (\Exception $e) { return callBack(statusCode()['error'], "记录添加失败"); } return $result; } /** * 计算成本价 * @param $parameter * [ * user_type 1 商户 2门店 * merchant_id * store_id * goods=>[ * goods_id 商品id * sku_id 规格id * time 添加时间 * ] * @return array * [ * status * message * data=>[ * cost_price 成本价 * ] * ] */ public function reckonCostPrice($parameter) { $goods = $parameter['goods']; $where = [ 'surplus_num' => ['gt', 0], 'merchant_id' => $parameter['merchant_id'], 'goods_id' => $goods['goods_id'], ]; if (!empty($goods['sku_id'])) { $where['sku_id'] = $goods['sku_id']; } switch ($parameter['user_type']) { case 1: //商户 $WarehousingGoodsModel = new WarehousingGoodsModel(); break; case 2: //门店 $WarehousingGoodsModel = new SWarehousingGoodsModel(); $where['store_id'] = $parameter['store_id']; break; } try { $list = $WarehousingGoodsModel->getSelect($where, '', '', 'surplus_num,warehouse_price', 'add_time asc'); if ($list) { $priceTotal = 0; //总进价 $numTotal = 0; //总数量 foreach ($list as $val) { $priceTotal += $val['surplus_num'] * $val['warehouse_price']; $numTotal += $val['surplus_num']; } $cost_price = round(($priceTotal / $numTotal), 2); if ($cost_price > 0) { return callBack(statusCode()['success'], "计算成功", ['cost_price' => $cost_price]); } else { return callBack(statusCode()['error'], "该商品已售完"); } } else { return callBack(statusCode()['error'], "该商品已售完"); } } catch (\Exception $e) { return callBack(statusCode()['error'], "该商品已售完"); } } /** * 修改进价价验证 * @param $parameter * [ * user_type 1 商户 2门店 * merchant_id * store_id * goods=>[ * goods_id 商品id * sku_id 规格id * purchase_price 进价 * goods_class_id 分类id * attribute_state 1常规 2规格 * pricing_method 1不称重 2称重 * type 1入库 2退货出库 3调价单修改 * time 添加时间 * ] * @return array * [ * status * message * ] */ public function modifyCostPriceVerify($parameter) { if (!in_array($parameter['user_type'], [1, 2])) { return callBack(statusCode()['error'], "未知请求源"); } if (empty($parameter['merchant_id']) || ($parameter['user_type'] == 2 && empty($parameter['store_id']))) { return callBack(statusCode()['error'], "缺少必要参数"); } if (empty($parameter['goods']) || empty($parameter['goods']['goods_id'])) { return callBack(statusCode()['error'], "商品信息不能为空"); } return callBack(statusCode()['success'], "验证成功"); } }