提交 76c0a7b1 编写于 作者: D devil_gong

库存回滚

上级 c549dafe
......@@ -60,6 +60,13 @@ class AdminController extends CommonController
// 获取管理员列表
$list = $m->where($where)->limit($page->GetPageStarNumber(), $number)->select();
if(!empty($list))
{
foreach($list as &$v)
{
$v['role_name'] = M('Role')->where(['id'=>$v['role_id']])->getField('name');
}
}
// 角色
$role = M('Role')->field(array('id', 'name'))->where(array('is_enable'=>1))->select();
......@@ -88,8 +95,7 @@ class AdminController extends CommonController
{
$where['username'] = array('like', '%'.I('username').'%');
}
if(!empty($_REQUEST['role_id']) && I('role_id') != -1)
if($role_id > 0)
if(I('role_id', -1) > -1)
{
$where['role_id'] = I('role_id');
}
......@@ -134,7 +140,7 @@ class AdminController extends CommonController
$this->assign('data', $user);
}
$role = M('Role')->field(array('id', 'name'))->where(array('is_enable'=>1, 'id'=>array('gt', 1)))->select();
$role = M('Role')->field(array('id', 'name'))->where(array('is_enable'=>1))->select();
$this->assign('role', $role);
// 组织列表
......
......@@ -296,12 +296,12 @@ class PowerController extends CommonController
$role_id = $r->add($role_data);
// 角色权限关联添加
$rp_state = true;
if(!empty($_POST['power_id']) && is_array($_POST['power_id']))
$rp_status = true;
if(!empty($_POST['power_id']))
{
// 角色权限关联对象
$rp = M('RolePower');
foreach($_POST['power_id'] as $power_id)
foreach(explode(',', I('power_id')) as $power_id)
{
if(!empty($power_id))
{
......@@ -312,13 +312,13 @@ class PowerController extends CommonController
);
if(!$rp->add($rp_data))
{
$rp_state = false;
$rp_status = false;
break;
}
}
}
}
if($role_id && $rp_state)
if($role_id && $rp_status)
{
// 提交事务
$r->commit();
......@@ -372,11 +372,10 @@ class PowerController extends CommonController
$rp_del_state = $rp->where(array('role_id'=>$role_id))->delete();
// 权限关联数据添加
$rp_state = true;
$rp_status = true;
if(!empty($_POST['power_id']))
{
$power_id_list = explode(',', $_POST['power_id']);
foreach($power_id_list as $power_id)
foreach(explode(',', I('power_id')) as $power_id)
{
if(!empty($power_id))
{
......@@ -387,13 +386,13 @@ class PowerController extends CommonController
);
if(!$rp->add($rp_data))
{
$rp_state = false;
$rp_status = false;
break;
}
}
}
}
if($r_state !== false && $rp_del_state !== false && $rp_state !== false)
if($r_state !== false && $rp_del_state !== false && $rp_status !== false)
{
// 提交事务
$r->commit();
......@@ -440,9 +439,9 @@ class PowerController extends CommonController
$r->startTrans();
// 删除角色
$role_state = $r->delete(I('id'));
$rp_state = M('RolePower')->where(array('role_id'=>I('id')))->delete();
if($role_state !== false && $rp_state !== false)
$role_status = $r->delete(I('id'));
$rp_status = M('RolePower')->where(array('role_id'=>I('id')))->delete();
if($role_status !== false && $rp_status !== false)
{
// 提交事务
$r->commit();
......@@ -457,5 +456,29 @@ class PowerController extends CommonController
$this->ajaxReturn(L('common_operation_delete_error'), -100);
}
}
/**
* [RoleStatusUpdate 角色状态更新]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-01-12T22:23:06+0800
*/
public function RoleStatusUpdate()
{
// 参数
if(empty($_POST['id']) || !isset($_POST['state']))
{
$this->ajaxReturn(L('common_param_error'), -1);
}
// 数据更新
if(M('Role')->where(array('id'=>I('id')))->save(array('is_enable'=>I('state'))))
{
$this->ajaxReturn(L('common_operation_edit_success'));
} else {
$this->ajaxReturn(L('common_operation_edit_error'), -100);
}
}
}
?>
\ No newline at end of file
......@@ -47,6 +47,7 @@
<th>{{:L('common_view_gender_name')}}</th>
<th>{{:L('login_total_name')}}</th>
<th>{{:L('common_mobile_name')}}</th>
<th class="am-hide-sm-only">{{:L('admin_view_role_name')}}</th>
<th class="am-hide-sm-only">{{:L('login_last_time_name')}}</th>
<th class="am-hide-sm-only">{{:L('common_create_time_name')}}</th>
<th>{{:L('common_operation_name')}}</th>
......@@ -60,6 +61,7 @@
<td>{{:L('common_gender_list')[$v['gender']]['name']}}</td>
<td>{{$v.login_total}}</td>
<td><if condition="empty($v['mobile'])"><span class="cr-ddd">{{:L('common_on_fill_in_the_text')}}</span><else />{{$v.mobile}}</if></td>
<td class="am-hide-sm-only">{{$v.role_name}}</td>
<td class="am-hide-sm-only">
<if condition="$v['login_total'] eq 0">
{{:L('common_not_login_name')}}
......
......@@ -72,7 +72,7 @@
<td class="am-hide-sm-only">{{$v.article_category_name}}</td>
<td class="am-hide-sm-only">{{$v.access_count}}</td>
<td>
<a href="{{:HomeUrl('Article', 'Index', ['id'=>$v['id']])}}" class="am-icon-btn am-icon-check submit-state <if condition="$v['is_enable'] eq 1">am-success<else />am-default</if>" data-url="{{:U('Admin/Article/StatusUpdate')}}" data-id="{{$v.id}}" data-state="{{$v['is_enable']}}" data-is-update-status="1"></a>
<a href="javascript:;" class="am-icon-btn am-icon-check submit-state <if condition="$v['is_enable'] eq 1">am-success<else />am-default</if>" data-url="{{:U('Admin/Article/StatusUpdate')}}" data-id="{{$v.id}}" data-state="{{$v['is_enable']}}" data-is-update-status="1"></a>
</td>
<td>
<a href="javascript:;" class="am-icon-btn am-icon-check submit-state <if condition="$v['is_home_recommended'] eq 1">am-success<else />am-default</if>" data-url="{{:U('Admin/Article/StatusHomeRecommended')}}" data-id="{{$v.id}}" data-state="{{$v['is_home_recommended']}}"></a>
......
......@@ -45,14 +45,14 @@
<label>{{$data.common_share_giving_integral_frequency.name}}<span class="fs-12 fw-100 cr-999">({{$data.common_share_giving_integral_frequency.describe}})</span></label>
<input type="number" name="{{$data.common_share_giving_integral_frequency.only_tag}}" placeholder="{{$data.common_share_giving_integral_frequency.name}}" data-validation-message="{{$data.common_share_giving_integral_frequency.error_tips}}" class="am-radius" <present name="data"> value="{{$data.common_share_giving_integral_frequency.value}}"</present> />
</div>
<div class="am-form-group">
<!-- <div class="am-form-group">
<label>{{$data.common_share_giving_integral.name}}<span class="fs-12 fw-100 cr-999">({{$data.common_share_giving_integral.describe}})</span></label>
<input type="number" name="{{$data.common_share_giving_integral.only_tag}}" placeholder="{{$data.common_share_giving_integral.name}}" data-validation-message="{{$data.common_share_giving_integral.error_tips}}" class="am-radius" <present name="data"> value="{{$data.common_share_giving_integral.value}}"</present> />
</div>
<div class="am-form-group">
<label>{{$data.common_share_view_desc.name}}</label>
<textarea rows="3" name="{{$data.common_share_view_desc.only_tag}}" class="am-radius" placeholder="{{$data.common_share_view_desc.name}}" data-validation-message="{{$data.common_share_view_desc.error_tips}}"><present name="data">{{$data.common_share_view_desc.value}}</present></textarea>
</div>
</div> -->
<div class="am-form-group">
<label>{{$data.common_user_center_notice.name}}<span class="fs-12 fw-100 cr-999">({{$data.common_user_center_notice.describe}})</span></label>
<textarea rows="3" name="{{$data.common_user_center_notice.only_tag}}" class="am-radius" placeholder="{{$data.common_user_center_notice.name}}" data-validation-message="{{$data.common_user_center_notice.error_tips}}"><present name="data">{{$data.common_user_center_notice.value}}</present></textarea>
......
......@@ -25,7 +25,7 @@
<tr id="data-list-{{$v.id}}" <if condition="$v['is_enable'] eq 0">class="am-active"</if>>
<td>{{$v.name}}</td>
<td>
<span <if condition="$v['is_enable'] eq 0">class="cr-ccc"</if>>{{:L('common_is_enable_tips')[$v['is_enable']]['name']}}</span>
<a href="javascript:;" class="am-icon-btn am-icon-check submit-state <if condition="$v['is_enable'] eq 1">am-success<else />am-default</if>" data-url="{{:U('Admin/Power/RoleStatusUpdate')}}" data-id="{{$v.id}}" data-state="{{$v['is_enable']}}" data-is-update-status="1"></a>
</td>
<td class="am-hide-sm-only">{{:date('Y-m-d H:i:s', $v['add_time'])}}</td>
<td>
......
......@@ -11,15 +11,15 @@
<form class="am-form form-validation view-save" action="{{:U('Admin/Sms/Save')}}" method="POST" request-type="ajax-url" request-value="{{:U('Admin/Sms/Index', ['type'=>'sms'])}}">
<div class="am-form-group">
<label>{{$data.common_sms_apikey.name}}<span class="fs-12 fw-100 cr-999">({{$data.common_sms_apikey.describe}})</span></label>
<input type="text" name="{{$data.common_sms_apikey.only_tag}}" placeholder="{{$data.common_sms_apikey.name}}" data-validation-message="{{$data.common_sms_apikey.error_tips}}" class="am-radius" <present name="data"> value="{{$data.common_sms_apikey.value}}"</present> required />
<input type="text" name="{{$data.common_sms_apikey.only_tag}}" placeholder="{{$data.common_sms_apikey.name}}" data-validation-message="{{$data.common_sms_apikey.error_tips}}" class="am-radius" <present name="data"> value="{{$data.common_sms_apikey.value}}"</present> />
</div>
<div class="am-form-group">
<label>{{$data.common_sms_apisecret.name}}<span class="fs-12 fw-100 cr-999">({{$data.common_sms_apisecret.describe}})</span></label>
<input type="text" name="{{$data.common_sms_apisecret.only_tag}}" placeholder="{{$data.common_sms_apisecret.name}}" data-validation-message="{{$data.common_sms_apisecret.error_tips}}" class="am-radius" <present name="data"> value="{{$data.common_sms_apisecret.value}}"</present> required />
<input type="text" name="{{$data.common_sms_apisecret.only_tag}}" placeholder="{{$data.common_sms_apisecret.name}}" data-validation-message="{{$data.common_sms_apisecret.error_tips}}" class="am-radius" <present name="data"> value="{{$data.common_sms_apisecret.value}}"</present> />
</div>
<div class="am-form-group">
<label>{{$data.common_sms_sign.name}}<span class="fs-12 fw-100 cr-999">({{$data.common_sms_sign.describe}})</span></label>
<input type="text" name="{{$data.common_sms_sign.only_tag}}" placeholder="{{$data.common_sms_sign.name}}" data-validation-message="{{$data.common_sms_sign.error_tips}}" class="am-radius" minlength="3" maxlength="16" <present name="data"> value="{{$data.common_sms_sign.value}}"</present> required />
<input type="text" name="{{$data.common_sms_sign.only_tag}}" placeholder="{{$data.common_sms_sign.name}}" data-validation-message="{{$data.common_sms_sign.error_tips}}" class="am-radius" minlength="3" maxlength="16" <present name="data"> value="{{$data.common_sms_sign.value}}"</present> />
</div>
<div class="am-form-group">
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm w100" data-am-loading="{loadingText:'{{:L('common_form_loading_tips')}}'}">{{:L('common_operation_save')}}</button>
......
......@@ -121,6 +121,9 @@ class UserController extends CommonController
$data = GoodsService::GoodsBrowseList($browse_params);
$this->assign('goods_browse_list', $data['data']);
// 用户中心公告
$this->assign('common_user_center_notice', MyC('common_user_center_notice'));
$this->display('Index');
}
......
......@@ -26,6 +26,14 @@
<!-- content start -->
<div class="user-content">
<div class="user-content-body">
<!-- 公告 -->
<notempty name="common_user_center_notice">
<div class="am-alert am-alert-warning am-radius user-center-notice" data-am-alert>
<button type="button" class="am-close">&times;</button>
<p>{{$common_user_center_notice}}</p>
</div>
</notempty>
<!-- 基础信息 -->
<div class="user-base">
<div class="user-base-left">
......
......@@ -786,7 +786,7 @@ class BuyService
case 0 :
if($params['order_data']['status'] != 1)
{
return DataReturn('当前订单状态未操作确认不扣除库存['.$params['order_id'].']', 0);
return DataReturn('当前订单状态未操作确认-不扣除库存['.$params['order_id'].']', 0);
}
break;
......@@ -794,7 +794,7 @@ class BuyService
case 1 :
if($params['order_data']['status'] != 2)
{
return DataReturn('当前订单状态未操作支付不扣除库存['.$params['order_id'].']', 0);
return DataReturn('当前订单状态未操作支付-不扣除库存['.$params['order_id'].']', 0);
}
break;
......@@ -802,7 +802,7 @@ class BuyService
case 2 :
if($params['order_data']['status'] != 3)
{
return DataReturn('当前订单状态未操作发货不扣除库存['.$params['order_id'].']', 0);
return DataReturn('当前订单状态未操作发货-不扣除库存['.$params['order_id'].']', 0);
}
break;
}
......@@ -837,13 +837,91 @@ class BuyService
'new_inventory' => $goods_m->where(['id'=>$v['goods_id']])->getField('inventory'),
'add_time' => time(),
];
$log_m->add($log_data);
if($log_m->add($log_data) <= 0)
{
return DataReturn('库存扣减日志添加失败['.$params['order_id'].'-'.$v['goods_id'].']', -100);
}
}
}
}
return DataReturn('操作成功', 0);
}
return DataReturn('没有需要扣除库存的数据', 0);
}
/**
* 库存回滚
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-11-09
* @desc description
* @param [array] $params [输入参数]
*/
public static function OrderInventoryRollback($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'order_id',
'error_msg' => '订单id有误',
],
[
'checked_type' => 'empty',
'key_name' => 'order_data',
'error_msg' => '订单更新数据不能为空',
],
[
'checked_type' => 'is_array',
'key_name' => 'order_data',
'error_msg' => '订单更新数据有误',
]
];
$ret = params_checked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 订单状态
if(!in_array($params['order_data']['status'], [5,6]))
{
return DataReturn('当前订单状态不允许回滚库存['.$params['order_id'].'-'.$params['order_data']['status'].']', 0);
}
// 获取订单商品
$order_detail = M('OrderDetail')->field('goods_id,buy_number')->where(['order_id'=>$params['order_id']])->select();
if(!empty($order_detail))
{
$goods_m = M('Goods');
$log_m = M('OrderGoodsInventoryLog');
foreach($order_detail as $v)
{
// 查看是否已扣除过库存
$temp = $log_m->where(['order_id'=>$params['order_id'], 'goods_id'=>$v['goods_id'], 'is_rollback'=>0])->find();
if(!empty($temp))
{
// 回滚操作
if(!$goods_m->where(['id'=>$v['goods_id']])->setInc('inventory', $v['buy_number']))
{
return DataReturn('库存回滚失败['.$params['order_id'].'-'.$v['goods_id'].']', -10);
}
// 回滚日志更新
$log_data = [
'is_rollback' => 1,
'rollback_time' => time(),
];
if(!$log_m->where(['id'=>$temp['id']])->save($log_data))
{
return DataReturn('库存回滚日志更新失败['.$temp['id'].'-'.$params['order_id'].']', -100);
}
}
}
return DataReturn('操作成功', 0);
}
return DataReturn('没有需要回滚的数据', 0);
}
}
?>
\ No newline at end of file
......@@ -662,21 +662,38 @@ class OrderService
return DataReturn('状态不可操作['.$status_text.']', -1);
}
$data = [
// 开启事务
$m->startTrans();
$upd_data = [
'status' => 5,
'upd_time' => time(),
];
if($m->where($where)->save($data))
if($m->where($where)->save($upd_data))
{
// 库存扣除
$ret = BuyService::OrderInventoryRollback(['order_id'=>$params['id'], 'order_data'=>$upd_data]);
if($ret['status'] != 0)
{
// 事务回滚
$m->rollback();
return DataReturn($ret['msg'], -10);
}
// 用户消息
MessageService::MessageAdd($order['user_id'], '订单取消', '订单取消成功', 1, $order['id']);
// 订单状态日志
$creator = isset($params['creator']) ? intval($params['creator']) : 0;
$creator_name = isset($params['creator_name']) ? htmlentities($params['creator_name']) : '';
self::OrderHistoryAdd($order['id'], $data['status'], $order['status'], '取消', $creator, $creator_name);
self::OrderHistoryAdd($order['id'], $upd_data['status'], $order['status'], '取消', $creator, $creator_name);
// 提交事务
$m->commit();
return DataReturn(L('common_cancel_success'), 0);
}
// 事务回滚
$m->rollback();
return DataReturn(L('common_cancel_error'), -1);
}
......
......@@ -52,6 +52,7 @@ ul.order-base li span.am-badge{position: absolute; top: -7px; left: 55%;}
.user-base-right{position: absolute; right: 10px; top: 10px;}
ul.user-base-icon{left: 0; bottom: 0; width: 100%; padding: 5px 0;}
ul.user-base-icon li{float: left; width: 33.33%;}
.user-center-notice { margin: 0; }
}
......
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册