|
|
<?php
|
|
|
|
|
|
namespace app\integral\controller\admin;
|
|
|
|
|
|
|
|
|
use app\base\model\freight\Freight;
|
|
|
use app\base\model\platform\PlatformKdniaoCode;
|
|
|
use app\base\model\user\UserInfo;
|
|
|
use app\integral\model\IntegralCategory;
|
|
|
use app\integral\model\IntegralConfig;
|
|
|
use app\integral\model\IntegralConfigAdvertise;
|
|
|
use app\integral\model\IntegralConfigCarousel;
|
|
|
use app\integral\model\IntegralOrder;
|
|
|
use app\integral\model\IntegralOrderCheck;
|
|
|
use app\integral\model\IntegralOrderProduct;
|
|
|
use app\integral\model\IntegralProduct;
|
|
|
use app\integral\model\IntegralProductCategory;
|
|
|
use app\integral\model\IntegralProductSku;
|
|
|
use app\integral\model\IntegralProductSpec;
|
|
|
use app\integral\model\IntegralProductSpecItem;
|
|
|
use app\integral\model\IntegralSearchHot;
|
|
|
use app\integral\model\IntegralStore;
|
|
|
use app\integral\model\IntegralStoreChecker;
|
|
|
use excel\Excel;
|
|
|
use Godruoyi\Snowflake\Snowflake;
|
|
|
use think\facade\Db;
|
|
|
use think\facade\View;
|
|
|
|
|
|
class Integral extends Base
|
|
|
{
|
|
|
/**
|
|
|
* 积分设置
|
|
|
*/
|
|
|
public function config()
|
|
|
{
|
|
|
$param = input();
|
|
|
|
|
|
$config_model = new IntegralConfig();
|
|
|
$config_carousel_model = new IntegralConfigCarousel();
|
|
|
$config_advertise_model = new IntegralConfigAdvertise();
|
|
|
if (request()->isPost()) {
|
|
|
switch ($param['r']) {
|
|
|
case 'base':
|
|
|
//基础设置
|
|
|
if (empty($param['delivery_type'])) {
|
|
|
return sendErrorMessage(3001, '请选择送货方式');
|
|
|
}
|
|
|
$param['delivery_type'] = implode(',', $param['delivery_type']);
|
|
|
|
|
|
$res = $config_model->dataUpdate($param);
|
|
|
if ($res === false) {
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
return sendSuccessMessage();
|
|
|
break;
|
|
|
case 'carousel':
|
|
|
//轮播图
|
|
|
$carousel = [];
|
|
|
foreach ($param['carousel_image'] as $k_1 => $value) {
|
|
|
$carousel[] = [
|
|
|
'uid' => UID,
|
|
|
'image' => $value,
|
|
|
'link_url' => $param['carousel_link_url'][$k_1],
|
|
|
'id' => $param['carousel_id'][$k_1],
|
|
|
];
|
|
|
}
|
|
|
$res = $config_carousel_model->dataUpdateByAll($carousel);
|
|
|
if ($res === false) {
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
return sendSuccessMessage();
|
|
|
break;
|
|
|
case 'advert':
|
|
|
//广告位招租
|
|
|
$advert = [];
|
|
|
foreach ($param['advert_image'] as $k_2 => $value) {
|
|
|
$advert[] = [
|
|
|
'uid' => UID,
|
|
|
'image' => $value,
|
|
|
'link_url' => $param['advert_link_url'][$k_2],
|
|
|
'id' => $param['advert_id'][$k_2],
|
|
|
'type' => 1
|
|
|
];
|
|
|
}
|
|
|
//促销
|
|
|
$promotion = [];
|
|
|
foreach ($param['promotion_image'] as $k_3 => $value) {
|
|
|
$promotion[] = [
|
|
|
'uid' => UID,
|
|
|
'image' => $value,
|
|
|
'link_url' => $param['promotion_link_url'][$k_3],
|
|
|
'id' => $param['promotion_id'][$k_3],
|
|
|
'type' => 2
|
|
|
];
|
|
|
}
|
|
|
$res1 = $config_advertise_model->dataUpdateByAll($advert);
|
|
|
if ($res1 === false) {
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
$res2 = $config_advertise_model->dataUpdateByAll($promotion);
|
|
|
if ($res2 === false) {
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
return sendSuccessMessage();
|
|
|
break;
|
|
|
default:
|
|
|
|
|
|
}
|
|
|
} else {
|
|
|
|
|
|
switch ($param['r']) {
|
|
|
case 'base':
|
|
|
$data = $config_model->getOneData(['uid' => UID]);
|
|
|
if ($data['delivery_type'] != "") {
|
|
|
$data['delivery_type'] = explode(',', $data['delivery_type']);
|
|
|
} else {
|
|
|
$data['delivery_type'] = [];
|
|
|
}
|
|
|
View::assign('data', $data);
|
|
|
break;
|
|
|
case 'carousel':
|
|
|
$carousel = $config_carousel_model->getAllData(['uid' => UID], 'id,image,link_url', 'id asc')->toArray();
|
|
|
|
|
|
$count = 5 - count($carousel);
|
|
|
|
|
|
if ($count > 0) {
|
|
|
for ($i = 0; $i <= $count; $i++) {
|
|
|
$temp = array(
|
|
|
'id' => "",
|
|
|
'image' => "",
|
|
|
'link_url' => ""
|
|
|
);
|
|
|
array_push($carousel, $temp);
|
|
|
}
|
|
|
}
|
|
|
View::assign('carousel', $carousel);
|
|
|
break;
|
|
|
case 'advert':
|
|
|
//首页广告图 位置1图(一张)
|
|
|
$advert = $config_advertise_model->getAllData(['uid' => UID, 'type' => 1], 'id,image,link_url', 'id asc')->toArray();
|
|
|
$advert_count = 1 - count($advert);
|
|
|
if ($advert_count > 0) {
|
|
|
for ($i = 0; $i <= $advert_count; $i++) {
|
|
|
$temp = array(
|
|
|
'id' => "",
|
|
|
'image' => "",
|
|
|
'link_url' => ""
|
|
|
);
|
|
|
array_push($advert, $temp);
|
|
|
}
|
|
|
}
|
|
|
View::assign('advert', $advert);
|
|
|
//首页广告图 位置2图(三种)
|
|
|
$promotion = $config_advertise_model->getAllData(['uid' => UID, 'type' => 2], 'id,image,link_url', 'id asc')->toArray();
|
|
|
$count = 3 - count($promotion);
|
|
|
if ($count > 0) {
|
|
|
for ($i = 0; $i <= $count; $i++) {
|
|
|
$temp = array(
|
|
|
'id' => "",
|
|
|
'image' => "",
|
|
|
'link_url' => ""
|
|
|
);
|
|
|
array_push($promotion, $temp);
|
|
|
}
|
|
|
}
|
|
|
View::assign('promotion', $promotion);
|
|
|
break;
|
|
|
default:
|
|
|
|
|
|
}
|
|
|
|
|
|
View::assign('r', $param['r']);
|
|
|
|
|
|
return View::fetch();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 分类
|
|
|
* @return array|mixed|string
|
|
|
*/
|
|
|
public function category()
|
|
|
{
|
|
|
$where = [
|
|
|
'uid' => UID,
|
|
|
];
|
|
|
$integral_category_model = new IntegralCategory();
|
|
|
$dataList = $integral_category_model->getAllData($where, '*', 'sort desc');
|
|
|
View::assign('dataList', $dataList);
|
|
|
|
|
|
return View::fetch();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 分类添加
|
|
|
* @return array|mixed|string
|
|
|
*/
|
|
|
public function categoryadd()
|
|
|
{
|
|
|
$integral_category_model = new IntegralCategory();
|
|
|
if (request()->isPost()) {
|
|
|
$data = input('post.');
|
|
|
$data['uid'] = UID;
|
|
|
$res = $integral_category_model->dataUpdate($data);
|
|
|
if (!$res) {
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
return sendSuccessMessage();
|
|
|
} else {
|
|
|
$id = input('param.id', 0);
|
|
|
$data = $integral_category_model->getOneData(['id' => $id]);
|
|
|
View::assign('data', $data);
|
|
|
return View::fetch('categoryadd');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 商品分类修改
|
|
|
* @return array|mixed|string
|
|
|
*/
|
|
|
public function categoryupdate()
|
|
|
{
|
|
|
return $this->categoryadd();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 产品列表 2017-10-15
|
|
|
*/
|
|
|
public function product()
|
|
|
{
|
|
|
$search = input('get.');
|
|
|
autoSearch(['time', 'keyword', 'type', 'category_id'], $search);
|
|
|
$integral_product_model = new IntegralProduct();
|
|
|
$integral_category_model = new IntegralCategory();
|
|
|
|
|
|
$where [] = ['uid', '=', UID];
|
|
|
$hasWhere = [];
|
|
|
|
|
|
if ($search['time']) {
|
|
|
$time = explode('-', $search['time']);
|
|
|
$where[] = ['create_time', 'between time', [$time[0], $time[1]]];
|
|
|
}
|
|
|
|
|
|
if ($search['keyword'] !== null && $search['keyword'] !== '') {
|
|
|
$where[] = ['name', 'like', '%' . $search['keyword'] . '%'];
|
|
|
}
|
|
|
|
|
|
if ($search['type'] !== null && $search['type'] !== '') {
|
|
|
$where [] = ['type', '=', $search['type']];
|
|
|
}
|
|
|
|
|
|
if (!empty($search['category_id'])) {
|
|
|
$hasWhere[] = ['category_id', '=', $search['category_id']];
|
|
|
}
|
|
|
|
|
|
|
|
|
$where = $integral_product_model->whereChange($where);
|
|
|
|
|
|
$dataList = $integral_product_model::hasWhere('integralProductCategory', $hasWhere)
|
|
|
->with('integralProductCategory')->where($where)->order('id desc')->paginate([
|
|
|
'list_rows' => 15,
|
|
|
'page' => array_key_exists("page", $search) ? (string)$search['page'] : "1",
|
|
|
'query' => $search
|
|
|
], false)->each(function ($item, $key) {
|
|
|
$category_model = new IntegralProductCategory();
|
|
|
$item['category_id'] = $category_model->where(['product_id' => $item['id']])->column('category_id');
|
|
|
// $temp = explode(',', $item['deliver_type']);
|
|
|
// $item['deliver_type_name'] = "";
|
|
|
// if (!empty($temp)) {
|
|
|
// $temp_name = array();
|
|
|
// foreach ($temp as $val) {
|
|
|
// if ($val == 1) {
|
|
|
// $temp_name[] = "邮寄";
|
|
|
// } elseif ($val == 2) {
|
|
|
// $temp_name[] = "上门自提";
|
|
|
// } else {
|
|
|
// $temp_name[] = "";
|
|
|
// }
|
|
|
// }
|
|
|
// $item['deliver_type_name'] = implode('/', $temp_name);
|
|
|
// }
|
|
|
});
|
|
|
$attach = [
|
|
|
'total_html' => [['商品总数', $dataList->total()]]
|
|
|
];
|
|
|
|
|
|
//获取分类列表信息
|
|
|
$category_list = $integral_category_model->getAllData(['uid' => UID], 'id,name', 'sort desc');
|
|
|
View::assign('attach', $attach);
|
|
|
View::assign('search', $search);
|
|
|
View::assign('dataList', $dataList);
|
|
|
View::assign('category_list', $category_list);
|
|
|
return View::fetch();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 添加产品 2017-10-15
|
|
|
*/
|
|
|
public function productadd()
|
|
|
{
|
|
|
$product_model = new IntegralProduct();
|
|
|
$category_model = new IntegralCategory();
|
|
|
$product_category_model = new IntegralProductCategory();
|
|
|
if (request()->isPost()) {
|
|
|
$data = input('post.');
|
|
|
|
|
|
$data['uid'] = UID;
|
|
|
if (empty($data['integral'])) {
|
|
|
return sendErrorMessage(1, '请选择消耗积分数/金额');
|
|
|
}
|
|
|
|
|
|
if (empty($data['type'])) {
|
|
|
return sendErrorMessage(1, '请选择商品类型');
|
|
|
}
|
|
|
if ((!empty($data['video_url']) && empty($data['video_cover_img'])) || (empty($data['video_url']) && !empty($data['video_cover_img']))) {
|
|
|
return sendErrorMessage(1, '视频和视频封面两个需要同时传');
|
|
|
}
|
|
|
|
|
|
$min_price = $data['price'];
|
|
|
|
|
|
//是否开启规格
|
|
|
$data['is_spec_open'] = array_key_exists('is_spec_open', $data) ? $data['is_spec_open'] : 0;
|
|
|
|
|
|
//开启规格时,获取产品最低价钱
|
|
|
if ($data['is_spec_open'] == 1) {
|
|
|
if (!array_key_exists('spec_id', $data)) {
|
|
|
return sendErrorMessage(1, '请添加规格');
|
|
|
}
|
|
|
foreach ($data['option_ids'] as $key => $value) {
|
|
|
$price[] = $data['option_price_' . $value];
|
|
|
}
|
|
|
$min_price = min($price);
|
|
|
}
|
|
|
$update = [
|
|
|
'min_price' => $min_price,
|
|
|
'is_spec_open' => $data['is_spec_open'],
|
|
|
'stock' => $data['stock'],
|
|
|
'freight_type' => $data['freight_type'],
|
|
|
'freight_id' => $data['freight_type'] == 2 ? $data['freight_id'] : 0,
|
|
|
'freight_money' => $data['freight_type'] == 1 ? $data['freight_money'] : 0,
|
|
|
'weight' => $data['weight'],
|
|
|
'is_publish' => array_key_exists('is_publish', $data) ? $data['is_publish'] : 0,
|
|
|
'publish_time' => array_key_exists('is_publish', $data) ? time() : 0,
|
|
|
];
|
|
|
$data = $data + $update;
|
|
|
|
|
|
Db::startTrans();
|
|
|
$product_id = $product_model->dataUpdate($data);
|
|
|
if ($product_id === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
|
|
|
//商品分类操作
|
|
|
$res = $this->productCategory($product_id, $data);
|
|
|
if ($res == false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
|
|
|
//商品规格操作
|
|
|
$res = $this->productSpec($product_id, $data);
|
|
|
|
|
|
if ($res['code'] != 0) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage($res['code'], $res['msg']);
|
|
|
}
|
|
|
Db::commit();
|
|
|
return sendSuccessMessage();
|
|
|
} else {
|
|
|
$id = input('param.id', 0);
|
|
|
$data = $product_model->getOneData(['id' => $id]);
|
|
|
if ($id) {
|
|
|
|
|
|
}
|
|
|
//获取分类
|
|
|
$where = ['uid' => UID];
|
|
|
$categoryList = $category_model->getAllData($where);
|
|
|
//查询商品关联分类
|
|
|
$category_id = $product_category_model->where('product_id', $id)->column('category_id');
|
|
|
if (empty($category_id)) {
|
|
|
$category_id = [];
|
|
|
}
|
|
|
foreach ($categoryList as $key => &$value) {
|
|
|
if (in_array($value['id'], $category_id)) {
|
|
|
$value['is_select'] = 1;
|
|
|
} else {
|
|
|
$value['is_select'] = 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (!empty($data)) {
|
|
|
$integral_product_spec_model = new IntegralProductSpec();
|
|
|
$integral_product_spec_item_model = new IntegralProductSpecItem();
|
|
|
//查询属性及属性项
|
|
|
$spec = $integral_product_spec_model->getAllData(['uid' => UID, 'product_id' => $id], '', 'id');
|
|
|
|
|
|
foreach ($spec as $key => $value) {
|
|
|
$value['item'] = $integral_product_spec_item_model->getAllData(['uid' => UID, 'spec_id' => $value['spec_id'], 'product_id' => $id], '', 'id asc')->toArray();
|
|
|
}
|
|
|
|
|
|
//查询SKU
|
|
|
$product_sku_model = new IntegralProductSku();
|
|
|
$sku = $product_sku_model->where(['product_id' => $id])->order('id asc')->column('sku,price,stock,cover_img,integral', 'sku');
|
|
|
|
|
|
} else {
|
|
|
$spec = [];
|
|
|
$sku = [];
|
|
|
}
|
|
|
View::assign('spec', $spec);
|
|
|
// dump($spec->toArray());
|
|
|
// foreach ($spec->toArray() as $k => $v){
|
|
|
// dump($v['item']);
|
|
|
// }
|
|
|
View::assign('sku', json_encode($sku));
|
|
|
$freight_model = new Freight();
|
|
|
$freight = $freight_model->select();
|
|
|
View::assign('freight', $freight);
|
|
|
//查询商品关联分类
|
|
|
View::assign('categoryList', $categoryList);
|
|
|
View::assign('data', $data);
|
|
|
|
|
|
return View::fetch('productadd');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 商品发布
|
|
|
*/
|
|
|
public function productPublish()
|
|
|
{
|
|
|
$data = input('post.');
|
|
|
$product_model = new IntegralProduct();
|
|
|
$update_data = ['is_publish' => $data['value'], 'publish_time' => time()];
|
|
|
if ($data['value'] == 0) {
|
|
|
$update_data['publish_time'] = 0;
|
|
|
}
|
|
|
$res = $product_model->where(['id' => $data['id']])->update($update_data);
|
|
|
if ($res === false) {
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
return sendSuccessMessage();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 商品-分类 操作
|
|
|
* @param $product_id
|
|
|
* @param array $data
|
|
|
* @return array|string
|
|
|
* @throws \think\Exception
|
|
|
*/
|
|
|
public function productCategory($product_id, $data = [])
|
|
|
{
|
|
|
$product_category_model = new IntegralProductCategory();
|
|
|
$res = $product_category_model->where(['product_id' => $product_id])->delete();
|
|
|
if ($res === false) {
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
|
|
|
$insert_array = [];
|
|
|
if (array_key_exists('category_id', $data)) {
|
|
|
foreach ($data['category_id'] as $key => $value) {
|
|
|
$insert_array[] = [
|
|
|
'product_id' => $product_id,
|
|
|
'category_id' => $value,
|
|
|
'create_time' => time(),
|
|
|
'update_time' => time(),
|
|
|
];
|
|
|
}
|
|
|
$insert_array = array_values(array_unique($insert_array, SORT_REGULAR));
|
|
|
$res = $product_category_model->insertAll($insert_array);
|
|
|
if ($res === false) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 商品规格操作
|
|
|
* @param $product_id
|
|
|
* @param array $data
|
|
|
* @return array|string
|
|
|
* @throws \think\Exception
|
|
|
*/
|
|
|
public function productSpec($product_id, $data = [])
|
|
|
{
|
|
|
$snow_flake = new Snowflake();
|
|
|
$integral_product_spec_model = new IntegralProductSpec();
|
|
|
$integral_product_spec_item_model = new IntegralProductSpecItem();
|
|
|
$integral_product_sku_model = new IntegralProductSku();
|
|
|
$integral_product_model = new IntegralProduct();
|
|
|
//清空数据
|
|
|
$where = ['uid' => UID, 'product_id' => $product_id];
|
|
|
$res = $integral_product_spec_model->destroy($where);
|
|
|
if ($res === false) {
|
|
|
return sendErrorArray();
|
|
|
}
|
|
|
$res = $integral_product_spec_item_model->destroy($where);
|
|
|
if ($res === false) {
|
|
|
return sendErrorArray();
|
|
|
}
|
|
|
$res = $integral_product_sku_model->destroy($where);
|
|
|
if ($res === false) {
|
|
|
return sendErrorArray();
|
|
|
}
|
|
|
if ($res === false) {
|
|
|
return sendErrorArray();
|
|
|
}
|
|
|
|
|
|
// 商品规格开启
|
|
|
if ($data['is_spec_open'] == 1) {
|
|
|
//保存规格名
|
|
|
$spec_data = [];
|
|
|
$spec_item_data = [];
|
|
|
if (!array_key_exists('spec_id', $data)) {
|
|
|
return sendErrorArray('请添加规格');
|
|
|
}
|
|
|
foreach ($data['spec_id'] as $key => $value) {
|
|
|
$spec_data[] = [
|
|
|
'id' => $snow_flake->id(),
|
|
|
'uid' => UID,
|
|
|
'product_id' => $product_id,
|
|
|
'spec_id' => $value,
|
|
|
'spec_title' => $data['spec_title'][$value],
|
|
|
'create_time' => time(),
|
|
|
];
|
|
|
if (!array_key_exists('spec_item_name_' . $value, $data)) {
|
|
|
return sendErrorArray('请添加' . $data['spec_title'][$value] . '的规格项');
|
|
|
}
|
|
|
foreach ($data['spec_item_name_' . $value] as $k => $v) {
|
|
|
$spec_item_data[] = [
|
|
|
'id' => $snow_flake->id(),
|
|
|
'uid' => UID,
|
|
|
'product_id' => $product_id,
|
|
|
'spec_id' => $value,
|
|
|
'spec_item_id' => $data['spec_item_id_' . $value][$k],
|
|
|
'spec_item_value' => $data['spec_item_name_' . $value][$k],
|
|
|
'create_time' => time(),
|
|
|
];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
$res = $integral_product_spec_model->insertAll($spec_data);
|
|
|
if ($res === false) {
|
|
|
return sendErrorArray();
|
|
|
}
|
|
|
//保存规格值
|
|
|
$res = $integral_product_spec_item_model->insertAll($spec_item_data);
|
|
|
if ($res === false) {
|
|
|
return sendErrorArray();
|
|
|
}
|
|
|
//保存SKU
|
|
|
$sku_data = [];
|
|
|
foreach ($data['option_ids'] as $key => $value) {
|
|
|
$sku_data[] = [
|
|
|
'id' => $snow_flake->id(),
|
|
|
'uid' => UID,
|
|
|
'product_id' => $product_id,
|
|
|
'sku' => $value,
|
|
|
'price' => $data['option_price_' . $value],
|
|
|
'integral' => $data['option_integral_' . $value],
|
|
|
'stock' => $data['option_stock_' . $value],
|
|
|
'cover_img' => $data['option_cover_img_' . $value],
|
|
|
'create_time' => time()
|
|
|
];
|
|
|
if (empty($data['option_integral_' . $value])) {
|
|
|
return sendErrorArray(4001, '积分不可为0');
|
|
|
}
|
|
|
}
|
|
|
$res = $integral_product_sku_model->insertAll($sku_data);
|
|
|
if ($res === false) {
|
|
|
return sendErrorArray();
|
|
|
}
|
|
|
// 更新库存
|
|
|
$all_stock = array_sum(array_column($sku_data, 'stock'));
|
|
|
$res = $integral_product_model->update(['stock' => $all_stock], ['id' => $product_id]);
|
|
|
if ($res === false) {
|
|
|
return sendErrorArray();
|
|
|
}
|
|
|
return sendSuccessArray();
|
|
|
} else {
|
|
|
return sendSuccessArray();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 积分商城商品编辑
|
|
|
* @return mixed
|
|
|
*/
|
|
|
public function productUpdate()
|
|
|
{
|
|
|
return $this->productadd();
|
|
|
}
|
|
|
|
|
|
public function productRecommend()
|
|
|
{
|
|
|
$data = input('post.');
|
|
|
$model = new IntegralProduct();
|
|
|
if ($data['value'] == 1) {
|
|
|
$res = $model->where(['id' => $data['id']])->update([$data['field'] => $data['value'], 'recommend_time' => '']);
|
|
|
|
|
|
} else {
|
|
|
$res = $model->where(['id' => $data['id']])->update([$data['field'] => $data['value'], 'recommend_time' => time()]);
|
|
|
}
|
|
|
if ($res === false) {
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
return sendSuccessMessage();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 自提门店列表
|
|
|
* @return array|mixed|string
|
|
|
*/
|
|
|
public function store()
|
|
|
{
|
|
|
$search = input('get.');
|
|
|
autoSearch(['time', 'keyword', 'is_publish'], $search);
|
|
|
$integral_store_model = new IntegralStore();
|
|
|
|
|
|
$where [] = ['uid', '=', UID];
|
|
|
if ($search['time']) {
|
|
|
$time = explode('-', $search['time']);
|
|
|
$where[] = ['create_time', 'between time', [$time[0], $time[1]]];
|
|
|
}
|
|
|
if ($search['keyword'] !== null && $search['keyword'] !== '') {
|
|
|
// $where['order_number|linkman|mobile_phone|address'] = ['like', '%' . $search['keyword'] . '%'];
|
|
|
$where[] = ['name', 'like', '%' . $search['keyword'] . '%'];
|
|
|
}
|
|
|
if ($search['is_publish'] !== null && $search['is_publish'] !== '') {
|
|
|
|
|
|
$where [] = ['is_publish', '=', $search['is_publish']];
|
|
|
}
|
|
|
|
|
|
$page = array_key_exists("page", $search) ? (string)$search['page'] : "1";
|
|
|
$dataList = $integral_store_model
|
|
|
->where($where)->order('id asc')
|
|
|
->paginate(['list_rows' => 50, 'page' => $page], false)->each(function ($item, $key) {
|
|
|
return $item;
|
|
|
});
|
|
|
$attach = [
|
|
|
'total_html' => [['门店总数', $dataList->total()]]
|
|
|
];
|
|
|
|
|
|
View::assign('attach', $attach);
|
|
|
View::assign('search', $search);
|
|
|
View::assign('dataList', $dataList);
|
|
|
return View::fetch();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 自提门店添加
|
|
|
* @return array|mixed|string
|
|
|
*/
|
|
|
public function storeAdd()
|
|
|
{
|
|
|
$user_model = new UserInfo();
|
|
|
$integral_store_model = new IntegralStore();
|
|
|
|
|
|
if (request()->isPost()) {
|
|
|
$data = input('post.');
|
|
|
$data['uid'] = UID;
|
|
|
$data['is_publish'] = array_key_exists('is_publish', $data) ? $data['is_publish'] : 0;
|
|
|
Db::startTrans();
|
|
|
$store_id = $integral_store_model->dataUpdate($data);
|
|
|
if ($store_id === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
if (!empty($data['id'])) {
|
|
|
$store_id = $data['id'];
|
|
|
}
|
|
|
//处理自提门店与核销员
|
|
|
$res = $this->storeUser($store_id, $data);
|
|
|
|
|
|
if ($res === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
Db::commit();
|
|
|
return sendSuccessMessage();
|
|
|
} else {
|
|
|
$id = input('param.id', 0);
|
|
|
$data = $integral_store_model->getOneData(['id' => $id]);
|
|
|
View::assign('data', $data);
|
|
|
|
|
|
$userWhere [] = [['uid', '=', UID], ['nick_name', '<>', ''], ['user_id', '>', 0]];
|
|
|
|
|
|
$userList = $user_model->getAllData($userWhere);
|
|
|
|
|
|
//查询已关联的核销员
|
|
|
$integral_store_checker_model = new IntegralStoreChecker();
|
|
|
$userId = $integral_store_checker_model->where(['uid' => UID, 'store_id' => $id])->column('user_id');
|
|
|
foreach ($userList as $key => &$value) {
|
|
|
if (!empty($userId)) {
|
|
|
if (in_array($value['user_id'], $userId)) {
|
|
|
$value['is_select'] = 1;
|
|
|
} else {
|
|
|
$value['is_select'] = 0;
|
|
|
}
|
|
|
} else {
|
|
|
$value['is_select'] = 0;
|
|
|
}
|
|
|
}
|
|
|
View::assign('userList', $userList);
|
|
|
return View::fetch('storeadd');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 自提门店与核销员
|
|
|
* @param int $store_id
|
|
|
* @param array $data
|
|
|
* @return array|string
|
|
|
* @throws \think\Exception
|
|
|
*/
|
|
|
public function storeUser($store_id = 0, $data = [])
|
|
|
{
|
|
|
if (!array_key_exists('user_id', $data)) {
|
|
|
return sendErrorMessage('请选择核销员');
|
|
|
}
|
|
|
|
|
|
$where = ['uid' => UID, 'store_id' => $store_id];
|
|
|
$integral_store_checker_model = new IntegralStoreChecker();
|
|
|
$res = $integral_store_checker_model->destroy($where, true);
|
|
|
if ($res === false) {
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
|
|
|
foreach ($data['user_id'] as $k => $v) {
|
|
|
$update = ['uid' => UID, 'store_id' => $store_id, 'user_id' => $v];
|
|
|
$res = $integral_store_checker_model->dataUpdate($update);
|
|
|
if ($res === false) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 自提门店修改
|
|
|
* @return array|mixed|string
|
|
|
*/
|
|
|
public function storeUpdate()
|
|
|
{
|
|
|
return $this->storeAdd();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 积分商城订单列表
|
|
|
*/
|
|
|
public function order()
|
|
|
{
|
|
|
$search = input('get.');
|
|
|
autoSearch(['time', 'keyword', 'status', 'remind', 'delivery_type', 'product_type', 'product_name'], $search);
|
|
|
$order_model = new IntegralOrder();
|
|
|
|
|
|
$where [] = ['uid', '=', UID];
|
|
|
$hasWhere = [];
|
|
|
if ($search['time']) {
|
|
|
$time = explode('-', $search['time']);
|
|
|
$where[] = ['create_time', 'between time', [$time[0], $time[1]]];
|
|
|
}
|
|
|
if ($search['keyword'] !== null && $search['keyword'] !== '') {
|
|
|
$where[] = ['order_number', 'like', '%' . $search['keyword'] . '%'];
|
|
|
}
|
|
|
|
|
|
if ($search['product_name'] !== null && $search['product_name'] !== '') {
|
|
|
$hasWhere[] = ['product_name', 'like', '%' . $search['product_name'] . '%'];
|
|
|
}
|
|
|
|
|
|
if ($search['status'] !== null && $search['status'] !== '') {
|
|
|
$where [] = ['status', '=', $search['status']];
|
|
|
}
|
|
|
|
|
|
if (!empty($search['remind'])) {
|
|
|
if ($search['remind'] == 1) {
|
|
|
$where [] = ['remind_time', '>', 0];
|
|
|
} else {
|
|
|
$where [] = ['remind_time', 'null', ''];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (!empty($search['delivery_type'])) {
|
|
|
$where [] = ['delivery_type', '=', $search['delivery_type']];
|
|
|
}
|
|
|
|
|
|
if (!empty($search['product_type'])) {
|
|
|
$where [] = ['product_type', '=', $search['product_type']];
|
|
|
|
|
|
}
|
|
|
$where = $order_model->whereChange($where);
|
|
|
session('where', $where);
|
|
|
session('hasWhere', $hasWhere);
|
|
|
|
|
|
$dataList = $order_model::hasWhere('integralOrderProduct', $hasWhere)
|
|
|
->with(['integralOrderProduct', 'userInfo'])
|
|
|
->where($where)->order('id desc')->paginate([
|
|
|
'list_rows' => 20,
|
|
|
'page' => array_key_exists("page", $search) ? (string)$search['page'] : "1",
|
|
|
'query' => $search
|
|
|
], false)
|
|
|
->each(function ($item, $key) {
|
|
|
$item['status_text'] = $item['status_text'];
|
|
|
return $item;
|
|
|
});
|
|
|
$order_total_money = $order_model::hasWhere('integralOrderProduct', $hasWhere)->where($where)->sum('IntegralOrder.pay_money');
|
|
|
$waitSendOrder = $order_model::hasWhere('integralOrderProduct', $hasWhere)->where([['status', '=', '2']])->count();
|
|
|
$attach = [
|
|
|
'total_html' => [
|
|
|
['订单总数', $dataList->total()],
|
|
|
['订单金额', $order_total_money],
|
|
|
['代发货订单', $waitSendOrder],
|
|
|
],
|
|
|
];
|
|
|
View::assign('search', $search);
|
|
|
View::assign('attach', $attach);
|
|
|
View::assign('dataList', $dataList);
|
|
|
|
|
|
|
|
|
return View::fetch();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 修改订单 2017-10-15
|
|
|
*/
|
|
|
public function orderdetail()
|
|
|
{
|
|
|
$id = input('param.id', 0);
|
|
|
$express_model = new PlatformKdniaoCode();
|
|
|
$integral_order_model = new IntegralOrder();
|
|
|
$data = $integral_order_model->with('userInfo')->where(['id' => $id])->find();
|
|
|
if ($id) {
|
|
|
$data['status_text'] = $data['status_text'];
|
|
|
$integral_order_product_model = new IntegralOrderProduct();
|
|
|
$data['order_product'] = $integral_order_product_model->getAllData(['order_id' => $id]);
|
|
|
if ($data['delivery_type'] == 2 && $data['type'] == 1) {
|
|
|
$integral_store_model = new IntegralStore();
|
|
|
$data['store_data'] = $integral_store_model->getOneData(['id' => $data['store_id']]);
|
|
|
}
|
|
|
if ($data['type'] == 1) {
|
|
|
if ($data['status'] == 4) {
|
|
|
//获取核销记录
|
|
|
$integral_order_check_model = new IntegralOrderCheck();
|
|
|
$check_data = $integral_order_check_model->getOneData(['order_id' => $id]);
|
|
|
// dump($check_data);
|
|
|
if (!empty($check_data)) {
|
|
|
$data['check_data'] = $check_data;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
$expressList = $express_model->getAllData(['is_show' => 1]);
|
|
|
View::assign('expressList', $expressList);
|
|
|
View::assign('data', $data);
|
|
|
return View::fetch();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 后台核销
|
|
|
* @return array|string
|
|
|
* @throws \think\Exception
|
|
|
*/
|
|
|
public function orderCheck()
|
|
|
{
|
|
|
$integral_order_model = new IntegralOrder();
|
|
|
if (request()->isPost()) {
|
|
|
$data = input('post.');
|
|
|
$where_order = ['uid' => UID, 'id' => $data['id']];
|
|
|
$order = $integral_order_model->getOneData($where_order);
|
|
|
if (empty($order)) {
|
|
|
return sendErrorMessage(1, '订单不存在');
|
|
|
}
|
|
|
if ($order['delivery_type'] != 2) {
|
|
|
return sendErrorMessage(1, '该订单无需核销');
|
|
|
}
|
|
|
if ($order['status'] != 3) {
|
|
|
return sendErrorMessage(1, '订单未支付或已提货');
|
|
|
}
|
|
|
$integral_order_check_model = new IntegralOrderCheck();
|
|
|
Db::startTrans();
|
|
|
//添加到核销历史记录
|
|
|
$update = [
|
|
|
'uid' => UID,
|
|
|
'user_id' => $data['user_id'],
|
|
|
'order_id' => $data['id'],
|
|
|
'store_id' => $order['store_id'],
|
|
|
'type' => 2,
|
|
|
'system_loginer_id' => LID
|
|
|
];
|
|
|
$res = $integral_order_check_model->dataUpdate($update);
|
|
|
if ($res === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
$res1 = $integral_order_model->where($where_order)->update(['status' => 5]);
|
|
|
if ($res1 === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
Db::commit();
|
|
|
return sendSuccessMessage('', '核销成功');
|
|
|
} else {
|
|
|
$id = input('param.id', 0);
|
|
|
$where_order = ['uid' => UID, 'id' => $id];
|
|
|
$data = $integral_order_model->getOneData($where_order);
|
|
|
//获取核销员信息
|
|
|
$integral_store_checker_model = new IntegralStoreChecker();
|
|
|
$checker = $integral_store_checker_model->with('userInfo')->where(['store_id' => $data['store_id'], 'uid' => UID])->select();
|
|
|
View::assign('checker', $checker);
|
|
|
View::assign('data', $data);
|
|
|
return View::fetch('ordercheck');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* 虚拟商品,状态变更
|
|
|
*/
|
|
|
|
|
|
public function orderFinish()
|
|
|
{
|
|
|
$integral_order_model = new IntegralOrder();
|
|
|
if (request()->isPost()) {
|
|
|
$data = input('post.');
|
|
|
$where_order = ['uid' => UID, 'id' => $data['id']];
|
|
|
$order = $integral_order_model->getOneData($where_order);
|
|
|
if (empty($order)) {
|
|
|
return sendErrorMessage('订单不存在');
|
|
|
}
|
|
|
if ($order['status'] != 2) {
|
|
|
return sendErrorMessage('订单未支付或已完成');
|
|
|
}
|
|
|
$res = $integral_order_model->where($where_order)->update(['status' => 4, 'system_remark' => $data['system_remark'], 'express_time' => time(), 'confirm_time' => time()]);
|
|
|
if ($res === false) {
|
|
|
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
return sendSuccessMessage('', '确认成功');
|
|
|
} else {
|
|
|
$id = input('param.id', 0);
|
|
|
$where_order = ['uid' => UID, 'id' => $id];
|
|
|
$data = $integral_order_model->getOneData($where_order);
|
|
|
//获取核销员信息
|
|
|
View::assign('data', $data);
|
|
|
return View::fetch('orderstatus');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 订单发货
|
|
|
* @return array|mixed|string
|
|
|
*/
|
|
|
public function orderSend()
|
|
|
{
|
|
|
$integral_order_model = new IntegralOrder();
|
|
|
$express_model = new PlatformKdniaoCode();
|
|
|
if (request()->isPost()) {
|
|
|
$data = input('post.');
|
|
|
$order = $integral_order_model->getOneData(['id' => $data['id']]);
|
|
|
|
|
|
|
|
|
if ($order['status'] == 2 && $order['product_type'] == 1) {
|
|
|
if (!isMobilephone($data['mobile_phone'])) {
|
|
|
return sendErrorMessage(1, '手机号格式不正确');
|
|
|
}
|
|
|
}
|
|
|
if ($order->status != 2) {
|
|
|
return sendErrorMessage(1, '订单状态已发生变化,请重试');
|
|
|
}
|
|
|
if ($order['product_type'] == 1) {
|
|
|
$express = $express_model->getOneData(['id' => $data['express_id']]);
|
|
|
$data['express_code'] = $express['express_code'];
|
|
|
$data['express_name'] = $express['express_company'];
|
|
|
$data['express_time'] = time();
|
|
|
}
|
|
|
|
|
|
$res = $integral_order_model->dataUpdate($data);
|
|
|
if ($res === false) {
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
return sendSuccessMessage();
|
|
|
} else {
|
|
|
$id = input('param.id');
|
|
|
$data = $integral_order_model->getOneData(['id' => $id]);
|
|
|
View::assign('data', $data);
|
|
|
$expressList = $express_model->getAllData(['is_show' => 1]);
|
|
|
//获取快递公司
|
|
|
View::assign('expressList', $expressList);
|
|
|
|
|
|
return View::fetch('ordersend');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 订单列表导出
|
|
|
* @date 2022-12-28
|
|
|
*/
|
|
|
public function orderexport()
|
|
|
{
|
|
|
$where = session('where');
|
|
|
$hasWhere = session('hasWhere');
|
|
|
|
|
|
$integral_order_model = new IntegralOrder();
|
|
|
$integral_order_product_model = new IntegralOrderProduct();
|
|
|
|
|
|
$dataList = $integral_order_model::hasWhere('integralOrderProduct', $hasWhere)
|
|
|
->with(['integralOrderProduct', 'userInfo'])
|
|
|
->where($where)->order('id desc')->select();
|
|
|
$data[] = [];
|
|
|
foreach ($dataList as $key => $value) {
|
|
|
$value['status_'] = "";
|
|
|
switch ($value['status']) {
|
|
|
case 1:
|
|
|
$value['status_'] = '待付款';
|
|
|
break;
|
|
|
case 2:
|
|
|
$value['status_'] = '待发货';
|
|
|
break;
|
|
|
case 3:
|
|
|
$value['status_'] = '已发货';
|
|
|
break;
|
|
|
case 4:
|
|
|
$value['status_'] = '已完成';
|
|
|
break;
|
|
|
}
|
|
|
$value['delivery_type_'] = "";
|
|
|
switch ($value['delivery_type']) {
|
|
|
case 1:
|
|
|
$value['delivery_type_'] = '邮寄';
|
|
|
break;
|
|
|
case 2:
|
|
|
$value['delivery_type_'] = '自提';
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
$value['delivery_type_'] = '';
|
|
|
|
|
|
}
|
|
|
|
|
|
$product_list = $integral_order_product_model->getAllData(['order_id' => $value['id'], 'uid' => UID], 'product_name,number', 'create_time desc');
|
|
|
$temp_list = [];
|
|
|
if (!empty($product_list)) {
|
|
|
$temp_list = [];
|
|
|
foreach ($product_list as $val) {
|
|
|
$str = $val['product_name'] . "(×" . $val['number'] . ")";
|
|
|
$temp_list[] = $str;
|
|
|
}
|
|
|
$value['product_list'] = implode(' | ', $temp_list);
|
|
|
} else {
|
|
|
$value['product_list'] = "";
|
|
|
}
|
|
|
|
|
|
$data[$key] = [
|
|
|
" " . $value['order_number'], //订单编号
|
|
|
$value['nick_name'], //下单人
|
|
|
$value['product_list'], //购买商品名(×数量)
|
|
|
$value['product_type'] == 1 ? '实物' : '虚拟', //商品类型
|
|
|
$value['delivery_type'] == 1 ? '姓名:' . $value['linkman'] . ';联系电话:' . $value['mobile_phone'] . ';地址:' . $value['province'] . $value['city'] . $value['area'] . $value['address'] : '自提门店地址:' . $value['store_address'], //邮寄信息/提货信息
|
|
|
$value['delivery_type'] == 1 ? '邮寄' : '门店自提', //提货方式
|
|
|
$value['pay_integral'], //实付积分数
|
|
|
$value['pay_money'], //实付金额
|
|
|
$value['remark'], //备注信息
|
|
|
$value['create_time'], //下单时间
|
|
|
$value['status_text'], //状态
|
|
|
];
|
|
|
};
|
|
|
|
|
|
$fileName = "积分订单表";
|
|
|
$headArr = ["订单编号", "下单人", "购买商品信息", "商品类型", "邮寄信息/提货信息", '提货方式', "实付积分数", "实付金额", "备注信息", "下单时间", "状态"];
|
|
|
$msg = '';
|
|
|
$excel_class = new Excel();
|
|
|
$res = $excel_class->excelExport($fileName, $headArr, $data, $msg);
|
|
|
return $res;
|
|
|
}
|
|
|
|
|
|
public function text()
|
|
|
{
|
|
|
create_qr_code_to_oss('/', '123');
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 运费设置
|
|
|
* @return array|mixed|string
|
|
|
*/
|
|
|
public function freight()
|
|
|
{
|
|
|
$where = [
|
|
|
'uid' => UID,
|
|
|
];
|
|
|
$freight_model = new IntegralFreight();
|
|
|
$dataList = $freight_model->selectList($where);
|
|
|
View::assign('dataList', $dataList);
|
|
|
return View::fetch();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 规则添加
|
|
|
*/
|
|
|
public function modeAddindie()
|
|
|
{
|
|
|
|
|
|
//获取省市数据
|
|
|
$mode = input('param.mode', 1);
|
|
|
$json_string = file_get_contents('static/json/address.json');
|
|
|
$list = json_decode($json_string, true);
|
|
|
View::assign('list', $list);
|
|
|
View::assign('mode', $mode);
|
|
|
return View::fetch('modeadd');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 运费添加
|
|
|
* @return array|mixed|string
|
|
|
*/
|
|
|
public function freightAdd()
|
|
|
{
|
|
|
$freight_model = new IntegralFreight();
|
|
|
if (request()->isPost()) { //新增和更新
|
|
|
$data = input('post.');
|
|
|
$data['uid'] = UID;
|
|
|
if ($data['type'] == 1) {
|
|
|
$rule = [
|
|
|
'name' => 'require|max:30',
|
|
|
'type' => 'require',
|
|
|
'first_number' => 'require',
|
|
|
'first_number_money' => 'require',
|
|
|
'second_number' => 'require',
|
|
|
'second_number_money' => 'require',
|
|
|
'free_money' => 'require',
|
|
|
];
|
|
|
$msg = [
|
|
|
'name.require' => '规则名称必须',
|
|
|
'name.max' => '规则名称最多不能超过30个字符',
|
|
|
'type.require' => '运费方式必须',
|
|
|
'first_number.require' => '首件必填',
|
|
|
'first_number_money.require' => '首费必填',
|
|
|
'second_number.require' => '续件必填',
|
|
|
'second_number_money.require' => '续费必填',
|
|
|
'free_money.require' => '免邮金额必填',
|
|
|
];
|
|
|
} else {
|
|
|
$rule = [
|
|
|
'name' => 'require|max:30',
|
|
|
'type' => 'require',
|
|
|
'first_weight' => 'require',
|
|
|
'first_weight_money' => 'require',
|
|
|
'second_weight' => 'require',
|
|
|
'second_weight_money' => 'require',
|
|
|
'free_money' => 'require',
|
|
|
];
|
|
|
$msg = [
|
|
|
'name.require' => '规则名称必须',
|
|
|
'name.max' => '规则名称最多不能超过30个字符',
|
|
|
'type.require' => '运费方式必须',
|
|
|
'first_weight.require' => '首重必填',
|
|
|
'first_weight_money.require' => '首费必填',
|
|
|
'second_weight.require' => '续重必填',
|
|
|
'second_weight_money.require' => '续费必填',
|
|
|
'free_money.require' => '免邮金额必填',
|
|
|
];
|
|
|
}
|
|
|
$validate = new Validate($rule, $msg);
|
|
|
if (!$validate->check($data)) {
|
|
|
return sendErrorMessage($validate->getError());
|
|
|
}
|
|
|
//检测数据的合理性
|
|
|
|
|
|
if (!empty($data['id'])) {
|
|
|
$where['id'] = ['neq', $data['id']];
|
|
|
}
|
|
|
if (!empty($data['fee_conf'])) {
|
|
|
$data['fee_conf'] = serialize($data['fee_conf']);
|
|
|
} else {
|
|
|
$data['fee_conf'] = serializeMysql([]);
|
|
|
}
|
|
|
$res = $freight_model->dataUpdate($data);
|
|
|
if ($res === false) {
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
return sendSuccessMessage();
|
|
|
} else { //编辑,添加
|
|
|
$id = input('param.id', 0);
|
|
|
$data = $freight_model->findOne(['id' => $id]);
|
|
|
//运费
|
|
|
$index = 0;
|
|
|
if (!empty($data)) {
|
|
|
if (!empty($data['fee_conf'])) {
|
|
|
$data['fee_conf'] = unserialize($data['fee_conf']);
|
|
|
if (!empty($data['fee_conf'])) {
|
|
|
$index = max(array_keys($data['fee_conf']));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
View::assign('data', $data);
|
|
|
View::assign('index', $index); //搜索最大的key值
|
|
|
View::assign('mode', isset($data['type']) ? $data['type'] : 1);
|
|
|
return View::fetch('freightadd');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 更新运费设置的默认项
|
|
|
* @return array|string|void
|
|
|
*/
|
|
|
public function updateDefault()
|
|
|
{
|
|
|
|
|
|
$data = input('post.');
|
|
|
$freight_model = new IntegralFreight();
|
|
|
if ($data['afterchange'] == 1) {
|
|
|
$freight_model->where('id !=' . $data['id'])->update(['is_default' => 0]);
|
|
|
}
|
|
|
$res = $freight_model->dataUpdate(['is_default' => $data['afterchange'], 'id' => $data['id']]);
|
|
|
if ($res === false) {
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
return sendSuccessMessage();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 运费修改
|
|
|
* @return array|mixed|string
|
|
|
*/
|
|
|
public function freightUpdate()
|
|
|
{
|
|
|
return $this->freightAdd();
|
|
|
}
|
|
|
|
|
|
|
|
|
public function review()
|
|
|
{
|
|
|
$search = input('get.');
|
|
|
autoSearch(['time', 'keyword', 'is_replay', 'is_add'], $search);
|
|
|
View::assign('search', $search);
|
|
|
|
|
|
$where = [
|
|
|
'uid' => UID,
|
|
|
'type' => 1
|
|
|
];
|
|
|
if ($search['time']) {
|
|
|
$time = explode('-', $search['time']);
|
|
|
$where['create_time'] = ['between time', [$time[0], $time[1]]];
|
|
|
}
|
|
|
if ($search['keyword'] !== null && $search['keyword'] !== '') {
|
|
|
$where['content'] = ['like', '%' . $search['keyword'] . '%'];
|
|
|
}
|
|
|
if ($search['is_replay'] !== null && $search['is_replay'] !== '') {
|
|
|
$where['is_replay'] = $search['is_replay'];
|
|
|
}
|
|
|
if ($search['is_add'] !== null && $search['is_add'] !== '') {
|
|
|
$where['is_add'] = $search['is_add'];
|
|
|
}
|
|
|
|
|
|
$review_model = new IntegralReview();
|
|
|
$dataList = $review_model->getMemberList($where, $search, '', 'id desc', 50);
|
|
|
View::assign('dataList', $dataList);
|
|
|
$attach = [
|
|
|
'total_html' => [['评论总数', $dataList->total()]]
|
|
|
];
|
|
|
View::assign('attach', $attach);
|
|
|
|
|
|
return View::fetch();
|
|
|
}
|
|
|
|
|
|
|
|
|
public function reviewdetail()
|
|
|
{
|
|
|
$review_model = new IntegralReview();
|
|
|
if (request()->isPost()) {
|
|
|
$data = input('post.');
|
|
|
$data['uid'] = UID;
|
|
|
$data['reply_time'] = time();
|
|
|
$res = $review_model->dataUpdate($data);
|
|
|
if (!$res) {
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
return sendSuccessMessage();
|
|
|
} else {
|
|
|
$id = input('param.id', 0);
|
|
|
$data = $review_model->findOne(['id' => $id]);
|
|
|
$add_review = $review_model->findOne(['review_id' => 1]);
|
|
|
View::assign('data', $data);
|
|
|
View::assign('add_review', $add_review);
|
|
|
return View::fetch('reviewdetail');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public function reviewadd()
|
|
|
{
|
|
|
return $this->reviewdetail();
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* @return string
|
|
|
* 退款原因设置
|
|
|
*/
|
|
|
public function refundcause()
|
|
|
{
|
|
|
$search = input('get.');
|
|
|
autoSearch(['keyword'], $search);
|
|
|
View::assign('search', $search);
|
|
|
$where [] = ['uid', '=', UID];
|
|
|
if ($search['keyword']) {
|
|
|
|
|
|
$where[] = ['content', 'like', '%' . $search['keyword'] . '%'];
|
|
|
}
|
|
|
|
|
|
|
|
|
$attach_model = new IntegralRefundCause();
|
|
|
$dataList = $attach_model->getMemberList($where, $search, "", "id desc");
|
|
|
View::assign('dataList', $dataList);
|
|
|
$attach = [
|
|
|
'total_html' => [['退款原因总数', $dataList->total()]]
|
|
|
];
|
|
|
View::assign('attach', $attach);
|
|
|
|
|
|
return View::fetch();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @return string
|
|
|
* 退款原因添加
|
|
|
*/
|
|
|
public function refundcauseadd()
|
|
|
{
|
|
|
$refund_model = new IntegralRefundCause();
|
|
|
if (request()->isPost()) {
|
|
|
$data = input('post.');
|
|
|
$data['uid'] = UID;
|
|
|
$res = $refund_model->dataUpdate($data);
|
|
|
if ($res === false) {
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
return sendSuccessMessage();
|
|
|
} else {
|
|
|
$id = input('param.id', 0);
|
|
|
$data = $refund_model->findOne(['id' => $id]);
|
|
|
|
|
|
View::assign('data', $data);
|
|
|
return View::fetch('refundcauseadd');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 标识/服务保障修改
|
|
|
* @return bool
|
|
|
*/
|
|
|
public function refundcauseupdate()
|
|
|
{
|
|
|
return $this->refundcauseadd();
|
|
|
}
|
|
|
|
|
|
|
|
|
/*
|
|
|
* 退款订单列表
|
|
|
*/
|
|
|
|
|
|
public function refund()
|
|
|
{
|
|
|
$search = input('get.');
|
|
|
autoSearch(['time', 'keyword', 'status', 'refund_way', 'product_order_number', 'nickname', 'product_name'], $search);
|
|
|
View::assign('search', $search);
|
|
|
|
|
|
$where [] = ['uid', '=', UID];
|
|
|
|
|
|
if ($search['time']) {
|
|
|
$time = explode('-', $search['time']);
|
|
|
$where[] = ['create_time', 'between time', [$time[0], $time[1]]];
|
|
|
}
|
|
|
if ($search['refund_way'] !== null && $search['refund_way'] !== '') {
|
|
|
$where [] = ['refund_way', '=', $search['refund_way']];
|
|
|
}
|
|
|
if ($search['keyword']) {
|
|
|
$where[] = ['order_number', 'like', '%' . $search['keyword'] . '%'];
|
|
|
}
|
|
|
if ($search['nickname'] !== null && $search['nickname'] !== '') {
|
|
|
$where[] = ['user_id', 'in', (new VipInfo())->selectListByColumn([['nickname', 'like', '%' . $search['nickname'] . '%']], 'user_id')];
|
|
|
}
|
|
|
if ($search['status'] !== null && $search['status'] !== '') {
|
|
|
$where [] = ['status', '=', $search['status']];
|
|
|
}
|
|
|
if ($search['product_name'] !== null && $search['product_name'] !== '') {
|
|
|
$where[] = ['order_product_id', 'in', (new IntegralOrderProduct())->selectListByColumn([['product_name', 'like', '%' . $search['product_name'] . '%']], 'id')];
|
|
|
}
|
|
|
$order_number = 0;
|
|
|
if ($search['product_order_number'] !== null && $search['product_order_number'] !== '') {
|
|
|
$order_number = $search['product_order_number'];
|
|
|
}
|
|
|
|
|
|
|
|
|
session('where', $where);
|
|
|
$refund_model = new IntegralRefund();
|
|
|
|
|
|
$dataList = $refund_model->getMemberList($where, $search, '', 'id desc', 50, $order_number);
|
|
|
|
|
|
|
|
|
View::assign('dataList', $dataList);
|
|
|
$refund_money = $refund_model->where($where)->sum('refund_money');
|
|
|
$attach = [
|
|
|
'total_html' => [['订单总数', $dataList->total()], ['退款金额', $refund_money]]
|
|
|
];
|
|
|
View::assign('attach', $attach);
|
|
|
|
|
|
return View::fetch();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 退款订单审核通过(同步做退款操作)
|
|
|
* @return array|string
|
|
|
* @throws \think\Exception
|
|
|
*/
|
|
|
public function refundupdate1()
|
|
|
{
|
|
|
$integral_refund_model = new IntegralRefund();
|
|
|
$integral_order_model = new IntegralOrder();
|
|
|
|
|
|
$id = input('param.id', 0);
|
|
|
if (empty($id)) {
|
|
|
return sendErrorMessage('参数错误,审核失败!');
|
|
|
}
|
|
|
$where = [
|
|
|
'uid' => UID,
|
|
|
'id' => $id
|
|
|
];
|
|
|
$refund = $integral_refund_model->findOne($where);
|
|
|
if ($refund['status'] != 1) {
|
|
|
return sendErrorMessage('审核状态发生变化,请刷新重试');
|
|
|
}
|
|
|
$wx_type = "";
|
|
|
if ($refund['source'] == 2) {
|
|
|
$wx_type = "applet";
|
|
|
} elseif ($refund['source'] == 1) {
|
|
|
$wx_type = "wechat";
|
|
|
}
|
|
|
|
|
|
$weixin_logic = new WeixinLogic(['wx_type' => $wx_type]);
|
|
|
$order = $integral_refund_model->findOne(['id' => $refund['order_id']]);
|
|
|
if ($refund['refund_way'] == 1) { //微信原路返回
|
|
|
Db::startTrans();
|
|
|
//获取退款订单信息
|
|
|
$result = $weixin_logic->wxRefund($order['order_number'], $order['pay_money'], $refund['refund_money'], $refund['order_number']);
|
|
|
if ($result['return_code'] === 'SUCCESS') { //返回状态码
|
|
|
if ($result['result_code'] === 'SUCCESS') { //业务结果
|
|
|
$update_data = [
|
|
|
'id' => $id,
|
|
|
'is_arrival' => 1,
|
|
|
'status' => 2,
|
|
|
'arrival_time' => time(),
|
|
|
'update_time' => time(),
|
|
|
'transaction_id' => $result['transaction_id']
|
|
|
];
|
|
|
$res = $integral_refund_model->dataUpdate($update_data);
|
|
|
if (!$res) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
//修改订单状态
|
|
|
$res1 = $integral_order_model->where('id', $refund['order_id'])->update(['status' => ORDER_REFUND_SUCCESS, 'refund_status' => 3]);
|
|
|
if ($res1 === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
|
|
|
//发送模板消息
|
|
|
//$weixin_logic->sendTemplateByApplet('order_refund',$order['openid'],getDomain() . '/wechat.php/mall/orderdetail/id/' . $order['id'],['order_id' => $order['id']])
|
|
|
//库存退回
|
|
|
$this->stockchange($refund['order_product_id'], $refund['refund_number']);
|
|
|
$res = $this->integralchange($refund['user_id'], $refund['refund_integral']);
|
|
|
if ($res === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
Db::commit();
|
|
|
return sendSuccessMessage('', '审核退款成功');
|
|
|
} else {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage($result['err_code_des']);
|
|
|
}
|
|
|
} else {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage($result['return_msg']);
|
|
|
}
|
|
|
} elseif ($refund['refund_way'] == 2) { //余额退回
|
|
|
//生成退款日志,并增加用户的余额信息
|
|
|
Db::startTrans();
|
|
|
$update_data = [
|
|
|
'id' => $id,
|
|
|
'is_arrival' => 1,
|
|
|
'status' => 2,
|
|
|
'arrival_time' => time(),
|
|
|
'update_time' => time()
|
|
|
];
|
|
|
$res = $integral_refund_model->dataUpdate($update_data);
|
|
|
if (!$res) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
$money_service = new \app\money\service\Money();
|
|
|
$res1 = $money_service->change($order['user_id'], 5, $refund['refund_money'], "商城购物退款", $refund['id'], $refund['order_id']);
|
|
|
if ($res1['code'] != 1) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage($res1['message']);
|
|
|
}
|
|
|
|
|
|
//修改订单状态
|
|
|
$res2 = $integral_order_model->where('id', $refund['order_id'])->update(['status' => ORDER_REFUND_SUCCESS, 'refund_status' => 3]);
|
|
|
if ($res2 === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
//库存退回
|
|
|
$this->stockchange($refund['order_product_id'], $refund['refund_number']);
|
|
|
$res = $this->integralchange($refund['user_id'], $refund['refund_integral']);
|
|
|
if ($res === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
//发送模板消息
|
|
|
//$weixin_logic->sendTemplateByApplet('order_refund',$order['openid'],getDomain() . '/wechat.php/mall/orderdetail/id/' . $order['id'],['order_id' => $order['id']])
|
|
|
Db::commit();
|
|
|
return sendSuccessMessage('', '审核退款成功');
|
|
|
} elseif ($refund['refund_way'] == 3) { //支付宝退回
|
|
|
//生成退款日志,并增加用户的余额信息
|
|
|
Db::startTrans();
|
|
|
$update_data = [
|
|
|
'id' => $id,
|
|
|
'is_arrival' => 1,
|
|
|
'status' => 2,
|
|
|
'arrival_time' => time(),
|
|
|
'update_time' => time()
|
|
|
];
|
|
|
$res = $integral_refund_model->dataUpdate($update_data);
|
|
|
if (!$res) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
$ali_logic = new Alipay();
|
|
|
$res1 = $ali_logic->aliRefund($order['order_number'], $refund['order_number'], $refund['refund_money']);
|
|
|
if ($res1['code'] != 1) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage($res1['message']);
|
|
|
}
|
|
|
|
|
|
//修改订单状态
|
|
|
$res2 = $integral_order_model->where('id', $refund['order_id'])->update(['status' => ORDER_REFUND_SUCCESS, 'refund_status' => 3]);
|
|
|
if ($res2 === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
//库存退回
|
|
|
$this->stockchange($refund['order_product_id'], $refund['refund_number']);
|
|
|
$res = $this->integralchange($refund['user_id'], $refund['refund_integral']);
|
|
|
if ($res === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
//发送模板消息
|
|
|
//$weixin_logic->sendTemplateByApplet('order_refund',$order['openid'],getDomain() . '/wechat.php/mall/orderdetail/id/' . $order['id'],['order_id' => $order['id']])
|
|
|
Db::commit();
|
|
|
return sendSuccessMessage('', '审核退款成功');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public function refundupdate()
|
|
|
{
|
|
|
$mall_refund_model = new IntegralRefund();
|
|
|
$mall_order_model = new IntegralOrder();
|
|
|
$order_product_model = new IntegralOrderProduct();
|
|
|
|
|
|
$id = input('param.id', 0);
|
|
|
if (empty($id)) {
|
|
|
return sendErrorMessage('参数错误,审核失败!');
|
|
|
}
|
|
|
$where = [
|
|
|
'uid' => UID,
|
|
|
'id' => $id
|
|
|
];
|
|
|
$refund = $mall_refund_model->findOne($where);
|
|
|
if ($refund['status'] != 1) {
|
|
|
return sendErrorMessage('审核状态发生变化,请刷新重试');
|
|
|
}
|
|
|
$weixin_logic = invoke(Weixin::class);
|
|
|
$order = $mall_order_model->findOne(['id' => $refund['order_id']]);
|
|
|
$res = $this->integralchange($refund['user_id'], $refund['refund_integral']);
|
|
|
if ($res === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
if ($refund['refund_money'] > 0) {
|
|
|
if ($refund['refund_way'] == 1) { //微信原路返回
|
|
|
Db::startTrans();
|
|
|
//获取退款订单信息
|
|
|
$result = $weixin_logic->wxRefund($order['order_number'], $order['pay_money'], $refund['refund_money'], $refund['order_number']);
|
|
|
|
|
|
if ($result['return_code'] === 'SUCCESS') { //返回状态码
|
|
|
if ($result['result_code'] === 'SUCCESS') { //业务结果
|
|
|
$update_data = [
|
|
|
'id' => $id,
|
|
|
'is_arrival' => 1,
|
|
|
'status' => 2,
|
|
|
'arrival_time' => time(),
|
|
|
'update_time' => time(),
|
|
|
'transaction_id' => $result['transaction_id']
|
|
|
];
|
|
|
$res = $mall_refund_model->dataUpdate($update_data);
|
|
|
if (!$res) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
//修改订单状态
|
|
|
// $res1 = $mall_order_model->where('id', $refund['order_id'])->update(['status' => ORDER_REFUND_SUCCESS, 'refund_status' => 3]);
|
|
|
// if ($res1 === false) {
|
|
|
// Db::rollback();
|
|
|
// return sendErrorMessage();
|
|
|
// }
|
|
|
|
|
|
//修改订单状态
|
|
|
//查询订单剩余商品数量
|
|
|
$order_now_product_number = $order_product_model->where(['order_id' => $refund['order_id']])->sum('number');
|
|
|
//查询订单退款单的剩余审核中数量
|
|
|
$now_refund_order_number = $mall_refund_model->where(['order_id' => $refund['order_id'], 'status' => 1])->count();
|
|
|
if ($order_now_product_number == 0 && $now_refund_order_number == 0) {//该订单没有没有未申请的商品也没有审核中的退款单 改变订单状态为退款成功
|
|
|
$res1 = $mall_order_model->dataUpdate(['id' => $refund['order_id'], 'status' => ORDER_REFUND_SUCCESS, 'refund_status' => 3]);
|
|
|
if ($res1 === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
} else {
|
|
|
$status = $order['delivery_type'] + 1;
|
|
|
$res1 = $mall_order_model->dataUpdate(['id' => $refund['order_id'], 'status' => $status, 'refund_status' => 1]);
|
|
|
if ($res1 === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage(1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//发送模板消息
|
|
|
//$weixin_logic->sendTemplateByApplet('order_refund',$order['openid'],getDomain() . '/wechat.php/mall/orderdetail/id/' . $order['id'],['order_id' => $order['id']])
|
|
|
//库存退回
|
|
|
$this->stockchange($refund['order_product_id'], $refund['refund_number']);
|
|
|
Db::commit();
|
|
|
return sendSuccessMessage('', '审核退款成功');
|
|
|
} else {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage($result['err_code_des']);
|
|
|
}
|
|
|
} else {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage($result['return_msg']);
|
|
|
}
|
|
|
} elseif ($refund['refund_way'] == 2) { //余额退回
|
|
|
//生成退款日志,并增加用户的余额信息
|
|
|
Db::startTrans();
|
|
|
$update_data = [
|
|
|
'id' => $id,
|
|
|
'is_arrival' => 1,
|
|
|
'status' => 2,
|
|
|
'arrival_time' => time(),
|
|
|
'update_time' => time()
|
|
|
];
|
|
|
$res = $mall_refund_model->dataUpdate($update_data);
|
|
|
if (!$res) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
$money_service = new \app\money\service\Money();
|
|
|
$res1 = $money_service->change($order['user_id'], 5, $refund['refund_money'], "商城购物退款", $refund['id'], $refund['order_id']);
|
|
|
if ($res1['code'] != 1) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage($res1['message']);
|
|
|
}
|
|
|
|
|
|
//修改订单状态
|
|
|
// $res2 = $mall_order_model->where('id', $refund['order_id'])->update(['status' => ORDER_REFUND_SUCCESS, 'refund_status' => 3]);
|
|
|
// if ($res2 === false) {
|
|
|
// Db::rollback();
|
|
|
// return sendErrorMessage();
|
|
|
// }
|
|
|
|
|
|
//修改订单状态
|
|
|
//查询订单剩余商品数量
|
|
|
$order_now_product_number = $order_product_model->where(['order_id' => $refund['order_id']])->sum('number');
|
|
|
//查询订单退款单的剩余审核中数量
|
|
|
$now_refund_order_number = $mall_refund_model->where(['order_id' => $refund['order_id'], 'status' => 1])->count();
|
|
|
if ($order_now_product_number == 0 && $now_refund_order_number == 0) {//该订单没有没有未申请的商品也没有审核中的退款单 改变订单状态为退款成功
|
|
|
$res1 = $mall_order_model->dataUpdate(['id' => $refund['order_id'], 'status' => ORDER_REFUND_SUCCESS, 'refund_status' => 3]);
|
|
|
if ($res1 === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage(1);
|
|
|
}
|
|
|
} else {
|
|
|
$status = $order['delivery_type'] + 1;
|
|
|
$res1 = $mall_order_model->dataUpdate(['id' => $refund['order_id'], 'status' => $status, 'refund_status' => 1]);
|
|
|
if ($res1 === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage(1);
|
|
|
}
|
|
|
}
|
|
|
//库存退回
|
|
|
$this->stockchange($refund['order_product_id'], $refund['refund_number']);
|
|
|
//发送模板消息
|
|
|
//$weixin_logic->sendTemplateByApplet('order_refund',$order['openid'],getDomain() . '/wechat.php/mall/orderdetail/id/' . $order['id'],['order_id' => $order['id']])
|
|
|
Db::commit();
|
|
|
return sendSuccessMessage('', '审核退款成功');
|
|
|
} elseif ($refund['refund_way'] == 3) { //支付宝退回
|
|
|
//生成退款日志,并增加用户的余额信息
|
|
|
Db::startTrans();
|
|
|
$update_data = [
|
|
|
'id' => $id,
|
|
|
'is_arrival' => 1,
|
|
|
'status' => 2,
|
|
|
'arrival_time' => time(),
|
|
|
'update_time' => time()
|
|
|
];
|
|
|
$res = $mall_refund_model->dataUpdate($update_data);
|
|
|
if (!$res) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
$ali_logic = new Alipay();
|
|
|
$res1 = $ali_logic->aliRefund($order['order_number'], $refund['order_number'], $refund['refund_money']);
|
|
|
if ($res1['code'] != 1) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage($res1['message']);
|
|
|
}
|
|
|
|
|
|
//修改订单状态
|
|
|
// $res2 = $mall_order_model->where('id', $refund['order_id'])->update(['status' => ORDER_REFUND_SUCCESS, 'refund_status' => 3]);
|
|
|
// if ($res2 === false) {
|
|
|
// Db::rollback();
|
|
|
// return sendErrorMessage();
|
|
|
// }
|
|
|
//修改订单状态
|
|
|
//查询订单剩余商品数量
|
|
|
$order_now_product_number = $order_product_model->where(['order_id' => $refund['order_id']])->sum('number');
|
|
|
//查询订单退款单的剩余审核中数量
|
|
|
$now_refund_order_number = $mall_refund_model->where(['order_id' => $refund['order_id'], 'status' => 1])->count();
|
|
|
if ($order_now_product_number == 0 && $now_refund_order_number == 0) {//该订单没有没有未申请的商品也没有审核中的退款单 改变订单状态为退款成功
|
|
|
$res1 = $mall_order_model->dataUpdate(['id' => $refund['order_id'], 'status' => ORDER_REFUND_SUCCESS, 'refund_status' => 3]);
|
|
|
if ($res1 === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
} else {
|
|
|
$status = $order['delivery_type'] + 1;
|
|
|
$res1 = $mall_order_model->dataUpdate(['id' => $refund['order_id'], 'status' => $status, 'refund_status' => 1]);
|
|
|
if ($res1 === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage(1);
|
|
|
}
|
|
|
}
|
|
|
//库存退回
|
|
|
$this->stockchange($refund['order_product_id'], $refund['refund_number']);
|
|
|
//发送模板消息
|
|
|
//$weixin_logic->sendTemplateByApplet('order_refund',$order['openid'],getDomain() . '/wechat.php/mall/orderdetail/id/' . $order['id'],['order_id' => $order['id']])
|
|
|
Db::commit();
|
|
|
return sendSuccessMessage('', '审核退款成功');
|
|
|
}
|
|
|
} else {
|
|
|
$update_data = [
|
|
|
'id' => $id,
|
|
|
'is_arrival' => 1,
|
|
|
'status' => 2,
|
|
|
'arrival_time' => time(),
|
|
|
'update_time' => time(),
|
|
|
];
|
|
|
$res = $mall_refund_model->dataUpdate($update_data);
|
|
|
if (!$res) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
//修改订单状态
|
|
|
// $res1 = $mall_order_model->where('id', $refund['order_id'])->update(['status' => ORDER_REFUND_SUCCESS, 'refund_status' => 3]);
|
|
|
// if ($res1 === false) {
|
|
|
// Db::rollback();
|
|
|
// return sendErrorMessage();
|
|
|
// }
|
|
|
|
|
|
//修改订单状态
|
|
|
//查询订单剩余商品数量
|
|
|
$order_now_product_number = $order_product_model->where(['order_id' => $refund['order_id']])->sum('number');
|
|
|
//查询订单退款单的剩余审核中数量
|
|
|
$now_refund_order_number = $mall_refund_model->where(['order_id' => $refund['order_id'], 'status' => 1])->count();
|
|
|
if ($order_now_product_number == 0 && $now_refund_order_number == 0) {//该订单没有没有未申请的商品也没有审核中的退款单 改变订单状态为退款成功
|
|
|
$res1 = $mall_order_model->dataUpdate(['id' => $refund['order_id'], 'status' => ORDER_REFUND_SUCCESS, 'refund_status' => 3]);
|
|
|
if ($res1 === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
} else {
|
|
|
$status = $order['delivery_type'] + 1;
|
|
|
$res1 = $mall_order_model->dataUpdate(['id' => $refund['order_id'], 'status' => $status, 'refund_status' => 1]);
|
|
|
if ($res1 === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage(1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//发送模板消息
|
|
|
//$weixin_logic->sendTemplateByApplet('order_refund',$order['openid'],getDomain() . '/wechat.php/mall/orderdetail/id/' . $order['id'],['order_id' => $order['id']])
|
|
|
//库存退回
|
|
|
$this->stockchange($refund['order_product_id'], $refund['refund_number']);
|
|
|
Db::commit();
|
|
|
return sendSuccessMessage('', '审核退款成功');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 审核订单审核不通过
|
|
|
* @return array|string
|
|
|
* @throws \think\Exception
|
|
|
*/
|
|
|
public function refundRefuse()
|
|
|
{
|
|
|
$mall_refund_model = new IntegralRefund();
|
|
|
$mall_order_model = new IntegralOrder();
|
|
|
$mall_order_product_model = new IntegralOrderProduct();
|
|
|
|
|
|
$id = input('param.id', 0);
|
|
|
$cause = input('param.cause', 0);
|
|
|
if (empty($id)) {
|
|
|
return sendErrorMessage('参数错误,审核状态变更失败!');
|
|
|
}
|
|
|
$where = [
|
|
|
'uid' => UID,
|
|
|
'id' => $id
|
|
|
];
|
|
|
$refund = $mall_refund_model->findOne($where);
|
|
|
if ($refund['status'] != 1) {
|
|
|
return sendErrorMessage('审核状态发生变化,请刷新重试');
|
|
|
}
|
|
|
$order = $mall_order_model->findOne(['id' => $refund['order_id']]);
|
|
|
Db::startTrans();
|
|
|
//退款订单数据变更
|
|
|
$res = $mall_refund_model->dataUpdate(['id' => $id, 'status' => 3, 'update_time' => time(), 'refuse_cause' => $cause]);
|
|
|
if (!$res) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
//修改订单商品数量
|
|
|
$res1 = $mall_order_product_model->where(['order_id' => $refund['order_id'], 'id' => $refund['order_product_id']])->inc('number', $refund['refund_number'])->update();
|
|
|
if ($res1 === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
|
|
|
$status = $order['delivery_type'] + 1;
|
|
|
$res1 = $mall_order_model->dataUpdate(['id' => $refund['order_id'], 'status' => $status, 'refund_status' => 1]);
|
|
|
if ($res1 === false) {
|
|
|
Db::rollback();
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
Db::commit();
|
|
|
return sendSuccessMessage('', '审核状态变更成功');
|
|
|
}
|
|
|
|
|
|
public function stockchange($id, $refund_number)
|
|
|
{
|
|
|
//获取订单信息
|
|
|
$order_product_model = new IntegralOrderProduct();
|
|
|
$data = $order_product_model->field('id,product_id,is_product_spec_open,product_sku,number')->where(['id' => $id])->find();
|
|
|
$integral_product_model = new IntegralProduct();
|
|
|
$integral_product_sku_model = new IntegralProductSku();
|
|
|
if (!empty($data)) {
|
|
|
$integral_product_model->where(['id' => $data['product_id']])->dec('sales_actual_number', $refund_number)->update();
|
|
|
|
|
|
// 没有开启规格 减少产品总库存
|
|
|
if ($data['is_product_spec_open'] == 0) {
|
|
|
$integral_product_model->where(['id' => $data['product_id']])->inc('stock', $refund_number)->update();
|
|
|
} else {
|
|
|
$integral_product_sku_model->where(['product_id' => $data['product_id'], 'sku' => $data['product_sku']])->inc('stock', $refund_number)->update();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public function integralchange($user_id, $integral_num)
|
|
|
{
|
|
|
$my_integral = new IntegralMy();
|
|
|
return $my_integral->where(['user_id' => $user_id])->inc('integral', $integral_num)->update();
|
|
|
}
|
|
|
|
|
|
public function test()
|
|
|
{
|
|
|
$res = exec('ffmpeg -i 2.mp4 -vf "drawtext=fontfile=SimHei.ttf:text=\'哈哈哈哈哈\':y=h-line_h-20:x=(w-text_w)/2:fontsize=34:fontcolor=yellow:shadowy=2" -b:v 3000k 22.mp4');
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 热门标签列表
|
|
|
* @return array|mixed|string
|
|
|
*/
|
|
|
public function search()
|
|
|
{
|
|
|
$search_hot_model = new IntegralSearchHot();
|
|
|
$where = ['uid' => UID];
|
|
|
$dataList = $search_hot_model->getAllData($where, '', 'sort desc,id desc');
|
|
|
View::assign('dataList', $dataList);
|
|
|
return View::fetch("search");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 热门搜索添加
|
|
|
* @return array|mixed|string
|
|
|
*/
|
|
|
public function searchAdd()
|
|
|
{
|
|
|
$search_hot_model = new IntegralSearchHot();
|
|
|
if (request()->isPost()) {
|
|
|
$data = input('post.');
|
|
|
$data['uid'] = UID;
|
|
|
$res = $search_hot_model->dataUpdate($data);
|
|
|
if ($res === false) {
|
|
|
return sendErrorMessage();
|
|
|
}
|
|
|
return sendSuccessMessage();
|
|
|
} else {
|
|
|
$id = input('param.id', 0);
|
|
|
$data = $search_hot_model->getOneData(['id' => $id]);
|
|
|
View::assign('data', $data);
|
|
|
return View::fetch('searchadd');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public function searchUpdate()
|
|
|
{
|
|
|
return $this->searchAdd();
|
|
|
}
|
|
|
|
|
|
} |