DemandBiddingService.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. namespace app\common\service;
  3. use app\common\model\demand\Biddings;
  4. use app\common\traits\ServiceTrait;
  5. use Exception;
  6. use think\Db;
  7. class DemandBiddingService
  8. {
  9. use ServiceTrait;
  10. /** @var Biddings */
  11. public static $Model = Biddings::class;
  12. // 竞标状态
  13. const STATUS_BIDDING_NO = 0; //无
  14. const STATUS_BIDDING_ONGOING = 1; //竞标中
  15. const STATUS_BIDDING_WIN = 2; //中标
  16. const STATUS_BIDDING_FAILED = 3; //未中标
  17. const BIDDING_STATUS_MAP = [
  18. self::STATUS_BIDDING_NO => '无',
  19. self::STATUS_BIDDING_ONGOING => '竞标中',
  20. self::STATUS_BIDDING_WIN => '中标',
  21. self::STATUS_BIDDING_FAILED => '未中标',
  22. ];
  23. // 竞标状态
  24. const STATUS_PROCESS_NO = 0; //未处理
  25. const STATUS_PROCESS_ONGOING = 1; //待确认
  26. const STATUS_PROCESS_CONFIRMED = 2; //已确认
  27. const STATUS_PROCESS_FAILED = 3; //已拒绝
  28. const STATUS_PROCESS_TIMEOUT = 4; //超时弃权
  29. const PROCESS_STATUS_MAP = [
  30. self::STATUS_PROCESS_NO => '未处理',
  31. self::STATUS_PROCESS_ONGOING => '待确认',
  32. self::STATUS_PROCESS_CONFIRMED => '已确认',
  33. self::STATUS_PROCESS_FAILED => '已拒绝',
  34. self::STATUS_PROCESS_TIMEOUT => '超时弃权',
  35. ];
  36. /**
  37. * 创建竞标记录
  38. *
  39. * @param array $data 需求数据
  40. * @param int $userId 用户ID
  41. * @return bool
  42. * @throws Exception
  43. */
  44. public static function create($data, $userId)
  45. {
  46. $saveData = $data + [
  47. 'user_id' => $userId,
  48. 'bidding_status' => self::STATUS_BIDDING_ONGOING,
  49. 'process_status' => self::STATUS_PROCESS_NO,
  50. ];
  51. $result = self::$Model::create($saveData);
  52. if (!$result) {
  53. throw new Exception('需求保存失败');
  54. }
  55. return true;
  56. }
  57. public static function joinBidding()
  58. {
  59. }
  60. /**
  61. * 设为中标
  62. * @param $demandBidding
  63. * @return void
  64. */
  65. public static function setWin($demandBidding)
  66. {
  67. DB::transaction(function () use ($demandBidding) {
  68. $demandId = $demandBidding->demand_id;
  69. $demand = DemandService::getOne(['id' => $demandId]);
  70. $where = ['demand_id' => $demandId, 'bidding_status' => DemandBiddingService::STATUS_BIDDING_WIN];
  71. $winBidding = DemandBiddingService::where($where)->find();
  72. if ($winBidding) {
  73. exception('请先执行重置投标操作');
  74. }
  75. if ($demandBidding->bidding_status != CommonService::ONGOING) {
  76. exception('用户投标状态异常不能中标');
  77. }
  78. //设置为已中标
  79. $demandBidding->bidding_status = DemandBiddingService::STATUS_BIDDING_WIN;
  80. $demandBidding->process_status = DemandBiddingService::STATUS_PROCESS_ONGOING;
  81. $saveRes = $demandBidding->save();
  82. if (!$saveRes) {
  83. exception('更新中标状态失败');
  84. }
  85. //发送接单成功提醒消息
  86. $msgData = [
  87. 'values' => [
  88. $demand->parent_order_no,
  89. mb_substr($demand->desc, 0, 8),
  90. mb_substr($demand->desc, 0, 11),
  91. SubscribeMessageService::MSG_MAP[SubscribeMessageService::MSG_TEMP_DEMAND_RECEIVE]['remark'],
  92. ]
  93. ];
  94. (new EasyWeChatService())->sendMsg($demandBidding->user_id, SubscribeMessageService::MSG_TEMP_DEMAND_RECEIVE, $msgData);
  95. });
  96. }
  97. }