290 lines
8.7 KiB
PHP
290 lines
8.7 KiB
PHP
<?php
|
||
|
||
// +----------------------------------------------------------------------
|
||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||
// +----------------------------------------------------------------------
|
||
// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
|
||
// +----------------------------------------------------------------------
|
||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||
// +----------------------------------------------------------------------
|
||
// | Author: CRMEB Team <admin@crmeb.com>
|
||
// +----------------------------------------------------------------------
|
||
|
||
namespace app\common\repositories\store\shipping;
|
||
|
||
use app\common\repositories\BaseRepository;
|
||
use app\common\dao\store\shipping\ShippingTemplateDao as dao;
|
||
use app\common\repositories\store\product\ProductRepository;
|
||
use think\exception\ValidateException;
|
||
use think\facade\Db;
|
||
|
||
/**
|
||
* Class ShippingTemplateRepository
|
||
*
|
||
* @mixin dao
|
||
*/
|
||
class ShippingTemplateRepository extends BaseRepository
|
||
{
|
||
|
||
/**
|
||
* ShippingTemplateRepository constructor.
|
||
* @param dao $dao
|
||
*/
|
||
public function __construct(dao $dao)
|
||
{
|
||
$this->dao = $dao;
|
||
}
|
||
|
||
/**
|
||
* @Author:Qinii
|
||
* @Date: 2020/5/13
|
||
* @param int $merId
|
||
* @return mixed
|
||
*/
|
||
public function getList(int $merId)
|
||
{
|
||
$list = $this->dao->getList($merId);
|
||
foreach ($list as &$item) {
|
||
if ($item['is_default'] == 1) {
|
||
$item['name'] .= '(系统默认)';
|
||
}
|
||
}
|
||
return $list;
|
||
}
|
||
|
||
/**
|
||
* @Author:Qinii
|
||
* @Date: 2020/5/8
|
||
* @param int $merId
|
||
* @param $id
|
||
* @return bool
|
||
*/
|
||
public function merExists(int $merId,$id)
|
||
{
|
||
return $this->dao->merFieldExists($merId,$this->getPk(),$id);
|
||
}
|
||
|
||
|
||
public function merDefaultExists(int $merId,$id)
|
||
{
|
||
$where = ['mer_id' => $merId,'is_default' => 1, $this->dao->getPk() => $id];
|
||
return $this->dao->getWhere($where) ? true : false;
|
||
}
|
||
|
||
public function getProductUse(int $merId ,int $id)
|
||
{
|
||
return app()->make(ProductRepository::class)->merTempExists($merId,$id);
|
||
}
|
||
|
||
/**
|
||
* @param int $id
|
||
* @return mixed
|
||
* @author Qinii
|
||
*/
|
||
public function getOne(int $id, $api = 0)
|
||
{
|
||
$with = ['free','region','undelives'];
|
||
$result = $this->dao->getWhere([$this->dao->getPk() => $id],'*',$with);
|
||
if ($api){
|
||
if ($result['free']) $append[] = 'free.city_name';
|
||
if ($result['region']) $append[] = 'region.city_name';
|
||
if ($result['undelives']) $append[] = 'undelives.city_name';
|
||
} else {
|
||
$append = ['free.city_ids','region.city_ids','undelives.city_ids'];
|
||
}
|
||
$result->append($append);
|
||
return $result;
|
||
|
||
}
|
||
|
||
/**
|
||
* @Author:Qinii
|
||
* @Date: 2020/5/8
|
||
* @param int $merId
|
||
* @param array $where
|
||
* @param int $page
|
||
* @param int $limit
|
||
* @return array
|
||
*/
|
||
public function search(int $merId, array $where, int $page, int $limit)
|
||
{
|
||
$query = $this->dao->search($merId, $where);
|
||
$count = $query->count($this->dao->getPk());
|
||
$list = $query->page($page, $limit)->select();
|
||
foreach ($list as &$item) {
|
||
if ($item['is_default'] == 1) {
|
||
$item['name'] .= '(系统默认)';
|
||
}
|
||
}
|
||
return compact('count', 'list');
|
||
}
|
||
|
||
/**
|
||
* @Author:Qinii
|
||
* @Date: 2020/5/8
|
||
* @param int $id
|
||
* @param array $data
|
||
*/
|
||
public function update(int $id,array $data)
|
||
{
|
||
Db::transaction(function()use ($id,$data) {
|
||
$region = $data['region'];
|
||
$free = $data['free'] ?? '';
|
||
$undelives = $data['undelives']??'';
|
||
|
||
unset($data['region'],$data['free'],$data['undelives'],$data['city_ids']);
|
||
$this->dao->update($id, $data);
|
||
|
||
(app()->make(ShippingTemplateRegionRepository::class))->batchRemove([], [$id]);
|
||
(app()->make(ShippingTemplateFreeRepository::class))->batchRemove([], [$id]);
|
||
(app()->make(ShippingTemplateUndeliveRepository::class))->batchRemove([], [$id]);
|
||
|
||
if($data['appoint']) {
|
||
$settlefree = $this->settleFree($free, $id);
|
||
(app()->make(ShippingTemplateFreeRepository::class)->insertAll($settlefree));
|
||
}
|
||
|
||
$settleRegion = $this->settleRegion($region,$id);
|
||
(app()->make(ShippingTemplateRegionRepository::class)->insertAll($settleRegion));
|
||
if($data['undelivery'] == 1){
|
||
$settleUndelives = $this->settleUndelives($undelives,$id);
|
||
(app()->make(ShippingTemplateUndeliveRepository::class))->create($settleUndelives);
|
||
}
|
||
|
||
});
|
||
}
|
||
|
||
public function delete($id)
|
||
{
|
||
if (is_array($id)) {
|
||
foreach ($id as $i) {
|
||
$this->dao->delete($i);
|
||
}
|
||
} else {
|
||
$this->dao->delete($id);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @Author:Qinii
|
||
* @Date: 2020/5/13
|
||
* @param array $data
|
||
*/
|
||
public function create(array $data)
|
||
{
|
||
Db::transaction(function()use ($data) {
|
||
$region = $data['region'];
|
||
$free = $data['free'] ?? '';
|
||
$undelives = $data['undelives'] ?? '';
|
||
if(isset($data['undelivery']) && $data['undelivery'] == 2){
|
||
$data['undelives'] = [];//开启状态下过滤数据
|
||
}
|
||
unset($data['region'],$data['free'],$data['undelives'],$data['city_ids']);
|
||
$temp = $this->dao->create($data);
|
||
if($data['appoint']) {
|
||
$settlefree = $this->settleFree($free, $temp['shipping_template_id']);
|
||
(app()->make(ShippingTemplateFreeRepository::class)->insertAll($settlefree));
|
||
}
|
||
$settleRegion = $this->settleRegion($region, $temp['shipping_template_id']);
|
||
(app()->make(ShippingTemplateRegionRepository::class)->insertAll($settleRegion));
|
||
if($data['undelivery'] == 1){
|
||
$settleUndelives = $this->settleUndelives($undelives,$temp['shipping_template_id']);
|
||
(app()->make(ShippingTemplateUndeliveRepository::class))->create($settleUndelives);
|
||
}
|
||
});
|
||
}
|
||
|
||
|
||
/**
|
||
* @param $data
|
||
* @param $id
|
||
* @return array
|
||
* @author Qinii
|
||
*/
|
||
public function settleFree($data,$id)
|
||
{
|
||
foreach ($data as $v){
|
||
if (isset($v['city_id']) && !is_array($v['city_id'])) throw new ValidateException('包邮参数类型错误');
|
||
$city = '/'.implode('/',$v['city_id']).'/';
|
||
$free[] = [
|
||
'temp_id' => $id,
|
||
'city_id' => $city,
|
||
'number' => $v['number'],
|
||
'price' => $v['price']
|
||
];
|
||
}
|
||
return $free;
|
||
}
|
||
|
||
|
||
/**
|
||
* @param $data
|
||
* @param $id
|
||
* @return array
|
||
* @author Qinii
|
||
*/
|
||
public function settleUndelives($data,$id)
|
||
{
|
||
if (isset($v['city_id']) && !is_array($data['city_id'])) throw new ValidateException('指定不配送参数类型错误');
|
||
return ['temp_id' => $id, 'city_id' => $data['city_id']];
|
||
}
|
||
|
||
|
||
/**
|
||
* @Author:Qinii
|
||
* @Date: 2020/5/13
|
||
* @param $data
|
||
* @param $id
|
||
* @return array
|
||
*/
|
||
public function settleRegion($data,$id)
|
||
{
|
||
$result = [];
|
||
foreach ($data as $k => $v){
|
||
$result[] = [
|
||
'city_id' => ($k > 0 ) ? '/'.implode('/',$v['city_id']).'/' : 0,
|
||
'temp_id' => $id,
|
||
'first' => $v['first'],
|
||
'first_price'=> $v['first_price'],
|
||
'continue' => $v['continue'],
|
||
'continue_price'=> $v['continue_price'],
|
||
];
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
/**
|
||
* @param int $merId
|
||
* @author Qinii
|
||
*/
|
||
public function createDefault(int $merId)
|
||
{
|
||
$data = [
|
||
"name" => "默认模板",
|
||
"type" => 1,
|
||
"appoint" => 0,
|
||
"undelivery" => 0,
|
||
'mer_id' => $merId,
|
||
"region" => [[
|
||
"first" => 0,
|
||
"first_price" => 0,
|
||
"continue" => 0,
|
||
"continue_price" => 0,
|
||
"city_id" => 0
|
||
]]
|
||
];
|
||
return $this->create($data);
|
||
}
|
||
|
||
public function check($merId, $id)
|
||
{
|
||
if(!$this->merExists($merId, $id))
|
||
throw new ValidateException('数据不存在,ID:'.$id);
|
||
if($this->merDefaultExists($merId, $id))
|
||
throw new ValidateException('默认模板不能删除,ID:'.$id);
|
||
if($this->getProductUse($merId, $id))
|
||
throw new ValidateException('模板使用中,不能删除,ID:'.$id);
|
||
}
|
||
|
||
}
|