WorkLable.php 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Description: 任务标签
  4. // +----------------------------------------------------------------------
  5. // | Author: yykun
  6. // +----------------------------------------------------------------------
  7. namespace app\work\model;
  8. use think\Db;
  9. use app\admin\model\Common;
  10. use com\verify\HonrayVerify;
  11. use think\Cache;
  12. class WorkLable extends Common
  13. {
  14. /**
  15. * 为了数据库的整洁,同时又不影响Model和Controller的名称
  16. * 我们约定每个模块的数据表都加上相同的前缀,比如微信模块用weixin作为数据表前缀
  17. */
  18. protected $name = 'work_task_lable';
  19. protected $createTime = 'create_time';
  20. protected $updateTime = false;
  21. protected $autoWriteTimestamp = true;
  22. protected $insert = [
  23. 'status' => 1,
  24. ];
  25. /**
  26. * [getDataList 标签列表]
  27. * @AuthorHTL
  28. * @param [string] $map [查询条件]
  29. * @param [number] $page [当前页数]
  30. * @param [number] $limit [每页数量]
  31. * @return [array] [description]
  32. */
  33. public function getDataList($userId)
  34. {
  35. $map['l.status'] = 1;
  36. $count = db('work_task_lable')->alias('l')->where($map)->count();
  37. if (db('work_lable_order')->where('user_id', $userId)->count() > 0) {
  38. $map['o.user_id'] = $userId;
  39. $list = db('work_task_lable')->alias('l')
  40. ->join('__WORK_LABLE_ORDER__ o', 'o.lable_id = l.lable_id', 'LEFT')
  41. ->where($map)->order('o.order', 'asc')->select();
  42. } else {
  43. $list = db('work_task_lable')->alias('l')->where($map)->select();
  44. }
  45. $data['list'] = !empty($list) ? $list : [];
  46. $data['dataCount'] = $count;
  47. return $data;
  48. }
  49. /**
  50. * 创建标签
  51. * @author yykun
  52. * @param
  53. * @return
  54. */
  55. public function createData($param)
  56. {
  57. $this->startTrans();
  58. try {
  59. $data['create_time'] = time();
  60. $data['create_user_id'] = $param['create_user_id'];
  61. $data['name'] = $param['name'];
  62. $data['color'] = $param['color'];
  63. $data['status'] = 1;
  64. $this->insert($data);
  65. $lableId = $this->getLastInsID();
  66. # 更新排序
  67. $this->updateLableOrder($lableId, $param['create_user_id']);
  68. $this->commit();
  69. return true;
  70. } catch(\Exception $e) {
  71. $this->rollback();
  72. $this->error = '添加失败';
  73. return false;
  74. }
  75. }
  76. /**
  77. * 更新标签排序
  78. *
  79. * @param int $lableId 标签ID
  80. * @param int $userId 用户ID
  81. * @author fanqi
  82. * @since 2021-03-27
  83. */
  84. private function updateLableOrder($lableId, $userId)
  85. {
  86. $order = 0;
  87. $orderList = db('work_lable_order')->where('user_id', $userId)->select();
  88. foreach ($orderList AS $key => $value) {
  89. if (!empty($value['order']) && $value['order'] > $order) $order = $value['order'];
  90. }
  91. if (!empty($order)) db('work_lable_order')->insert([
  92. 'lable_id' => $lableId,
  93. 'user_id' => $userId,
  94. 'order' => $order + 1
  95. ]);
  96. }
  97. /**
  98. * 编辑标签
  99. * @author yykun
  100. * @param
  101. * @return
  102. */
  103. public function updateDataById($param)
  104. {
  105. $map['lable_id'] = $param['lable_id'];
  106. unset($param['lable_id']);
  107. $flag = $this->where($map)->update($param);
  108. if ($flag) {
  109. return true;
  110. } else {
  111. $this->error = '操作失败';
  112. return false;
  113. }
  114. }
  115. /**
  116. * 删除标签
  117. * @author yykun
  118. * @param
  119. * @return
  120. */
  121. public function delDataById($param)
  122. {
  123. $map['lable_id'] = $param['lable_id'];
  124. if (db('task')->where(['lable_id' => ['like','%,'.$param['lable_id'].',%']])->find()) {
  125. $this->error = '标签已被使用,无法删除!';
  126. return false;
  127. }
  128. $this->startTrans();
  129. try {
  130. $ret = $this->where($map)->setField('status',0);
  131. if ($ret) {
  132. $this->commit();
  133. return true;
  134. } else {
  135. $this->rollback();
  136. $this->error = '删除失败';
  137. return false;
  138. }
  139. } catch (\Exception $e){
  140. $this->rollback();
  141. $this->error = '删除失败';
  142. return false;
  143. }
  144. }
  145. /**
  146. * 任务标签
  147. *
  148. * @param $idstr
  149. * @return array|bool|\PDOStatement|string|\think\Collection
  150. * @throws \think\db\exception\DataNotFoundException
  151. * @throws \think\db\exception\ModelNotFoundException
  152. * @throws \think\exception\DbException
  153. */
  154. public function getDataByStr($idstr)
  155. {
  156. $idstr = stringToArray($idstr);
  157. $list = Db::name('WorkTaskLable')->field('lable_id,name,color')->where(['lable_id' => ['in',$idstr],'status'=>1])->select();
  158. return $list ? : [];
  159. }
  160. /**
  161. * 任务标签名称
  162. * @author yykun
  163. * @param
  164. * @return
  165. */
  166. public function getNameByIds($ids)
  167. {
  168. $list = Db::name('WorkTaskLable')->where(['lable_id' => ['in',$ids]])->column('name');
  169. return $list ? : [];
  170. }
  171. /**
  172. * 标签排序
  173. *
  174. * @param array $param user_id 用户ID; labelIds 标签ID
  175. * @author fanqi
  176. * @since 2021-03-27
  177. */
  178. public function updateOrder($param)
  179. {
  180. if (!empty($param['labelIds'])) {
  181. $data = [];
  182. foreach ($param['labelIds'] AS $key => $value) {
  183. $data[] = [
  184. 'lable_id' => $value,
  185. 'user_id' => $param['user_id'],
  186. 'order' => $key + 1
  187. ];
  188. }
  189. # 先删除在添加
  190. db('work_lable_order')->where('user_id', $param['user_id'])->delete();
  191. db('work_lable_order')->insertAll($data);
  192. }
  193. }
  194. }