BusinessStatus.php 7.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Description: 商机组
  4. // +----------------------------------------------------------------------
  5. // | Author: Michael_xu | gengxiaoxu@5kcrm.com
  6. // +----------------------------------------------------------------------
  7. namespace app\crm\model;
  8. use think\Db;
  9. use app\admin\model\Common;
  10. use think\Request;
  11. use think\Validate;
  12. class BusinessStatus extends Common
  13. {
  14. /**
  15. * 为了数据库的整洁,同时又不影响Model和Controller的名称
  16. * 我们约定每个模块的数据表都加上相同的前缀,比如CRM模块用crm作为数据表前缀
  17. */
  18. protected $name = 'crm_business_status';
  19. /**
  20. * [getDataList 商机状态list]
  21. * @author Michael_xu
  22. * @param type_id 商机组ID
  23. * @return
  24. */
  25. public function getDataList($type_id, $type = 0)
  26. {
  27. if ($type == 1) {
  28. $list = $this->where(['type_id' => $type_id])->whereOr(['type_id' => 0])->select();
  29. } else {
  30. $list = $this->where(['type_id' => $type_id])->select();
  31. }
  32. return $list ? : [];
  33. }
  34. /**
  35. * [getTypeList 商机组list]
  36. * @author Michael_xu
  37. * @param [string] $map [查询条件]
  38. * @param [number] $page [当前页数]
  39. * @param [number] $limit [每页数量]
  40. * @return [array] [description]
  41. */
  42. public function getTypeList($request)
  43. {
  44. $userModel = new \app\admin\model\User();
  45. $structureModel = new \app\admin\model\Structure();
  46. $request = $this->fmtRequest( $request );
  47. $map = $request['map'] ? : [];
  48. if (isset($map['search']) && $map['search']) {
  49. //普通筛选
  50. $map['name'] = ['like', '%'.$map['search'].'%'];
  51. }
  52. $map['is_display'] = ['eq', 1];
  53. unset($map['search']);
  54. $list = db('crm_business_type')
  55. ->where($map)
  56. ->page($request['page'], $request['limit'])
  57. ->select();
  58. $dataCount = db('crm_business_type')->where($map)->count('type_id');
  59. foreach ($list as $k=>$v) {
  60. $list[$k]['create_user_id_info'] = $userModel->getUserById($v['create_user_id']);
  61. $list[$k]['structure_id_info'] = $structureModel->getListByStr($v['structure_id']) ? : [];
  62. $list[$k]['create_time'] = !empty($v['create_time']) ? date('Y-m-d H:i:s', $v['create_time']) : null;
  63. $list[$k]['update_time'] = !empty($v['update_time']) ? date('Y-m-d H:i:s', $v['update_time']) : null;
  64. }
  65. $data = [];
  66. $data['list'] = $list;
  67. $data['dataCount'] = $dataCount ? : 0;
  68. return $data;
  69. }
  70. /**
  71. * 创建商机组
  72. * @author Michael_xu
  73. * @param
  74. * @return
  75. */
  76. public function createData($param)
  77. {
  78. if (!$param['name']) {
  79. $this->error = '请填写商机组名称';
  80. return false;
  81. }
  82. if (!$param['status']) {
  83. $this->error = '请至少配置一个商机阶段';
  84. return false;
  85. }
  86. $data = [];
  87. $data['name'] = $param['name'];
  88. $data['update_time'] = time();
  89. $data['create_time'] = time();
  90. $data['create_user_id'] = $param['create_user_id'];
  91. $data['structure_id'] = arrayToString($param['structure_id']);
  92. if ($type_id = db('crm_business_type')->insertGetId($data)) {
  93. $statusData = [];
  94. $i = 1;
  95. foreach ($param['status'] as $k=>$v) {
  96. //$v = json_decode($v,true);
  97. $statusData[$k]['name'] = $v['name'];
  98. $statusData[$k]['rate'] = $v['rate'];
  99. $statusData[$k]['type_id'] = $type_id;
  100. $statusData[$k]['order_id'] = $i;
  101. if (empty($v['name']) && empty($v['rate'])) {
  102. unset($statusData[$k]);
  103. } else {
  104. $i++;
  105. }
  106. }
  107. db('crm_business_status')->insertAll($statusData);
  108. return true;
  109. } else {
  110. $this->error = '添加失败';
  111. return false;
  112. }
  113. }
  114. /**
  115. * 编辑商机组信息
  116. * @author Michael_xu
  117. * @param type_id 商机组类型ID
  118. * @return
  119. */
  120. public function updateDataById($param, $type_id = '')
  121. {
  122. $dataInfo = db('crm_business_type')->where(['type_id' => $type_id])->find();
  123. if (!$dataInfo) {
  124. $this->error = '数据不存在或已删除';
  125. return false;
  126. }
  127. //过滤不能修改的字段
  128. $unUpdateField = ['create_user_id'];
  129. foreach ($unUpdateField as $v) {
  130. unset($param[$v]);
  131. }
  132. if (!$param['name']) {
  133. $this->error = '请填写商机组名称';
  134. return false;
  135. }
  136. if (!$param['status']) {
  137. $this->error = '请至少配置一个商机阶段';
  138. return false;
  139. }
  140. $data = [];
  141. $data['name'] = $param['name'];
  142. $data['structure_id'] = arrayToString($param['structure_id']);
  143. $newIds = []; //编辑ID
  144. $statusData = [];
  145. $resData = true;
  146. // 启动事务
  147. Db::startTrans();
  148. try {
  149. db('crm_business_type')->where(['type_id' => $type_id])->update($data);
  150. $i = 1;
  151. foreach ($param['status'] as $k=>$v) {
  152. $statusData[$k]['name'] = $v['name'];
  153. $statusData[$k]['rate'] = $v['rate'];
  154. $statusData[$k]['type_id'] = $type_id;
  155. $statusData[$k]['order_id'] = $i;
  156. if ($v['status_id']) {
  157. //编辑
  158. $newIds[] = $v['status_id'];
  159. $statusData[$k]['status_id'] = $v['status_id'];
  160. $this->isUpdate()->saveAll($statusData);
  161. unset($statusData[$k]);
  162. }
  163. if (empty($v['name']) && empty($v['rate'])) {
  164. unset($statusData[$k]);
  165. } else {
  166. $i++;
  167. }
  168. }
  169. //删除
  170. $oldIds = $this->where(['type_id' => $type_id])->column('status_id'); //原ID
  171. $delIds = array_diff($oldIds, $newIds); //数组差集
  172. if ($delIds) {
  173. db('crm_business_status')->where(['status_id' => ['in',$delIds]])->delete();
  174. }
  175. //新增
  176. db('crm_business_status')->insertAll($statusData);
  177. // 提交事务
  178. Db::commit();
  179. return true;
  180. } catch (\Exception $e) {
  181. $this->error = '编辑失败';
  182. // 回滚事务
  183. Db::rollback();
  184. return false;
  185. }
  186. }
  187. /**
  188. * 商机组数据
  189. * @param $status_id 商机组ID
  190. * @return
  191. */
  192. public function getDataById($type_id = '')
  193. {
  194. if (!$data = db('crm_business_type')->where(['type_id' => $type_id])->find()) {
  195. $this->error = '数据不存在或已删除';
  196. return false;
  197. }
  198. $status = $this->getDataList($type_id);
  199. $data['structure_id'] = !empty($data['structure_id']) ? stringToArray($data['structure_id']) : [];
  200. $data['status'] = $status ? : [];
  201. return $data;
  202. }
  203. /**
  204. * [delDataById 根据id删除数据]
  205. * @param string $id [主键]
  206. * @param boolean $delSon [是否删除子孙数据]
  207. * @return [type] [description]
  208. */
  209. public function delDataById($id = '', $delSon = false)
  210. {
  211. if (!$id) {
  212. $this->error = '删除失败';
  213. return false;
  214. }
  215. //状态组已被使用,则不能删除
  216. $resDel = true;
  217. // if (db('crm_business')->where(['type_id' => $id])->find()) {
  218. // $this->error = '状态组已被使用,不能删除';
  219. // return false;
  220. // }
  221. //启动事务
  222. Db::startTrans();
  223. try {
  224. db('crm_business_type')->where(['type_id' => $id])->update(['is_display' => 0]);
  225. // db('crm_business_type')->where(['type_id' => $id])->delete();
  226. // db('crm_business_status')->where(['type_id' => $id])->delete();
  227. // 提交事务
  228. Db::commit();
  229. return true;
  230. } catch(\Exception $e) {
  231. $this->error = '删除失败';
  232. // 回滚事务
  233. Db::rollback();
  234. return false;
  235. }
  236. }
  237. }