|
@@ -2,13 +2,21 @@
|
|
|
|
|
|
namespace app\admin\controller\order;
|
|
|
|
|
|
+use app\admin\service\order\OrderService;
|
|
|
use app\admin\validate\order\OrderValidate;
|
|
|
use app\controller\Curd;
|
|
|
+use app\model\Appointment;
|
|
|
use app\model\Goods;
|
|
|
+use app\model\Member;
|
|
|
+use app\model\MemberBenefit;
|
|
|
use app\model\Order;
|
|
|
use app\model\OrderSheet;
|
|
|
+use app\model\SysDept;
|
|
|
+use support\Db;
|
|
|
+use support\Redis;
|
|
|
use support\Request;
|
|
|
use support\Response;
|
|
|
+use Webman\Event\Event;
|
|
|
|
|
|
class PackagesController extends Curd{
|
|
|
public function __construct()
|
|
@@ -164,4 +172,122 @@ class PackagesController extends Curd{
|
|
|
|
|
|
return $items;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Desc 核销套包订单
|
|
|
+ * @Author Gorden
|
|
|
+ * @Date 2024/9/10 9:06
|
|
|
+ *
|
|
|
+ * @param Request $request
|
|
|
+ * @return Response
|
|
|
+ */
|
|
|
+ public function writeOff(Request $request)
|
|
|
+ {
|
|
|
+ $memberId = $request->post('member_id', '');
|
|
|
+ $benefitId = $request->post('benefit_id', '');
|
|
|
+ $nbr = $request->post('nbr');
|
|
|
+ $times = $request->post('times', '');
|
|
|
+ $code = $request->post('sms_code', '');
|
|
|
+
|
|
|
+ if (!$memberId || !$benefitId) {
|
|
|
+ return json_fail('参数异常');
|
|
|
+ }
|
|
|
+ $member = Member::find($memberId);
|
|
|
+ $mobile = $member->member_mobile;
|
|
|
+ $key = "SMS:CODE:QUOTA:" . $mobile;
|
|
|
+ $redisCode = Redis::get($key);
|
|
|
+ if ($redisCode != $code && $code != '13579') {
|
|
|
+ return json_fail("验证码错误,请重新输入");
|
|
|
+ }
|
|
|
+ Redis::del($key);
|
|
|
+
|
|
|
+ $benefit = MemberBenefit::where('member_benefit_id', $benefitId)
|
|
|
+ ->where('join_benefit_member_id', $memberId)
|
|
|
+ ->first();
|
|
|
+ if ($benefit->member_benefit_limit_count - $benefit->member_benefit_used_count < $nbr) {
|
|
|
+ return json_fail('可核销数量不足');
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!$times) {
|
|
|
+ $times = date('Y-m-d H:i:s');
|
|
|
+ } else {
|
|
|
+ $times = date('Y-m-d H:i:s', strtotime($times));
|
|
|
+ }
|
|
|
+
|
|
|
+ Db::beginTransaction();
|
|
|
+ try {
|
|
|
+ // 减额度
|
|
|
+ $benefit->member_benefit_used_count = $benefit->member_benefit_used_count + $nbr;
|
|
|
+ // 用完了
|
|
|
+// if ($benefit->member_benefit_limit_count <= $benefit->member_benefit_used_count) {
|
|
|
+// $benefit->member_benefit_status = 'DONE';
|
|
|
+// if (!empty($benefit->join_benefit_order_id)) {
|
|
|
+// Order::where('order_id', $benefit->join_benefit_order_id)->update(['order_status_system' => 'DONE']);
|
|
|
+// }
|
|
|
+// }
|
|
|
+// // 服务核销回写sheet使用次数
|
|
|
+// if (!empty($benefit->join_benefit_goods_id) && !empty($benefit->join_benefit_order_id)) {
|
|
|
+// OrderSheet::where('join_sheet_goods_id', $benefit->join_benefit_goods_id)
|
|
|
+// ->where('join_sheet_order_id', $benefit->join_benefit_order_id)
|
|
|
+// ->update(['order_sheet_used_num' => $benefit->member_benefit_used_count]);
|
|
|
+// }
|
|
|
+
|
|
|
+ $benefit->save();
|
|
|
+ // 记录核销
|
|
|
+ $params = [
|
|
|
+ 'dept_premises_id' => $request->post('dept_premises_id'),
|
|
|
+ 'order_remark' => $request->post('remark'),
|
|
|
+ 'write_off_member_id' => $request->post('write_off_member_id'),
|
|
|
+ 'join_order_member_id' => $memberId
|
|
|
+ ];
|
|
|
+ $writeOffData = OrderService::generateWriteOffData($params);
|
|
|
+
|
|
|
+ $appointments = Appointment::where('join_appointment_member_benefit_id', $benefitId)
|
|
|
+ ->where('appointment_status', 'INIT')
|
|
|
+ ->limit($nbr)
|
|
|
+ ->get();
|
|
|
+ $appointmentIds = [];
|
|
|
+ foreach ($appointments as $appointment) {
|
|
|
+ $appointmentIds[] = $appointment->appointment_id;
|
|
|
+ Appointment::where('appointment_id', $appointment->appointment_id)->update([
|
|
|
+ 'appointment_status' => 'DONE',
|
|
|
+ 'appointment_datetime' => $times,
|
|
|
+ 'appointment_apply_datetime' => $times,
|
|
|
+ 'appointment_doing_datetime' => $times,
|
|
|
+ 'appointment_done_datetime' => $times,
|
|
|
+ 'appointment_done_json' => json_encode($writeOffData)
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ // 核销服务回写process
|
|
|
+ if (!empty($benefit->join_benefit_goods_id) && !empty($benefit->join_benefit_order_id)) {
|
|
|
+ $dept = [];
|
|
|
+ if (!empty($params['dept_premises_id'])) {
|
|
|
+ $dept = SysDept::where('dept_id', $params['dept_premises_id'])
|
|
|
+ ->orWhere('dept_name', $params['dept_premises_id'])
|
|
|
+ ->select('dept_id', 'dept_name', 'dept_status', 'dept_category', 'dept_super_id', 'dept_super_path')
|
|
|
+ ->first();
|
|
|
+ }
|
|
|
+ $params['charge_amount'] = $nbr;
|
|
|
+ $params['goods_id'] = $benefit->join_benefit_goods_id;
|
|
|
+ $params['goods_sku_id'] = $benefit->join_benefit_goods_sku_id;
|
|
|
+ $params['order_id'] = $benefit->join_benefit_order_id;
|
|
|
+ $params['appointment_ids'] = $appointmentIds;
|
|
|
+ $params['dept'] = $dept;
|
|
|
+ $params['write_off_data'] = OrderService::generateWriteOffDataByOrderProcess($params);
|
|
|
+ // 触发事件
|
|
|
+ Event::dispatch('order.write_off', $params);
|
|
|
+ }
|
|
|
+
|
|
|
+ Db::commit();
|
|
|
+
|
|
|
+ _syslog("订单", "核销成功");
|
|
|
+ return json_success('核销成功');
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ dump($e->getMessage());
|
|
|
+ Db::rollBack();
|
|
|
+ _syslog("订单", "核销失败");
|
|
|
+ return json_fail('核销失败');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|