UpdateSql.php 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. <?php
  2. /**
  3. * 更新sql(包含安装)
  4. *
  5. * @author fanqi
  6. * @since 2021-05-08
  7. */
  8. namespace app\admin\controller;
  9. use think\Db;
  10. use think\Exception;
  11. class UpdateSql
  12. {
  13. /**
  14. * 添加公海默认数据
  15. *
  16. * @author fanqi
  17. * @since 2021-05-08
  18. * @return bool
  19. */
  20. static public function addPoolDefaultData()
  21. {
  22. // 员工ID
  23. $userIds = db('admin_user')->column('id');
  24. // 公海主数据
  25. $poolData = [
  26. 'pool_name' => '系统默认公海',
  27. 'admin_user_ids' => ',1,',
  28. 'user_ids' => ','.implode(',', $userIds).',',
  29. 'department_ids' => '',
  30. 'status' => 1,
  31. 'before_owner_conf' => 0,
  32. 'before_owner_day' => 0,
  33. 'receive_conf' => 0,
  34. 'receive_count' => 0,
  35. 'remind_conf' => 0,
  36. 'remain_day' => 0,
  37. 'recycle_conf' => 1,
  38. 'create_user_id' => 1,
  39. 'create_time' => time()
  40. ];
  41. // 公海规则数据
  42. $poolRuleData = [
  43. 'pool_id' => 0,
  44. 'type' => 1,
  45. 'deal_handle' => 0,
  46. 'business_handle' => 0,
  47. 'level_conf' => 1,
  48. 'level' => json_encode([['level' => '所有客户', 'limit_day' => 30]]),
  49. 'limit_day' => 0
  50. ];
  51. // 公海字段数据
  52. $poolFieldData = [];
  53. $fields = db('admin_field')->field(['field', 'name', 'form_type', 'is_hidden'])->where(['types' => 'crm_customer'])->select();
  54. foreach ($fields AS $key => $value) {
  55. $poolFieldData[] = [
  56. 'field_name' => $value['field'],
  57. 'name' => $value['name'],
  58. 'form_type' => $value['form_type'],
  59. 'is_hidden' => $value['is_hidden']
  60. ];
  61. }
  62. $poolFieldData[] = ['field_name' => 'address', 'name' => '省、市、区/县', 'form_type' => 'customer_address', 'is_hidden' => 0];
  63. $poolFieldData[] = ['field_name' => 'detail_address', 'name' => '详细地址', 'form_type' => 'text', 'is_hidden' => 0];
  64. $poolFieldData[] = ['field_name' => 'last_record', 'name' => '最后跟进记录', 'form_type' => 'text', 'is_hidden' => 0];
  65. $poolFieldData[] = ['field_name' => 'last_time', 'name' => '最后跟进时间', 'form_type' => 'datetime', 'is_hidden' => 0];
  66. $poolFieldData[] = ['field_name' => 'before_owner_user_id', 'name' => '前负责人', 'form_type' => 'user', 'is_hidden' => 0];
  67. $poolFieldData[] = ['field_name' => 'into_pool_time', 'name' => '进入公海时间', 'form_type' => 'datetime', 'is_hidden' => 0];
  68. $poolFieldData[] = ['field_name' => 'create_time', 'name' => '创建时间', 'form_type' => 'datetime', 'is_hidden' => 0];
  69. $poolFieldData[] = ['field_name' => 'update_time', 'name' => '更新时间', 'form_type' => 'datetime', 'is_hidden' => 0];
  70. $poolFieldData[] = ['field_name' => 'create_user_id', 'name' => '创建人', 'form_type' => 'user', 'is_hidden' => 0];
  71. Db::startTrans();
  72. try {
  73. // 添加公海主数据
  74. $poolId = Db::name('crm_customer_pool')->insert($poolData, false, true);
  75. // 添加公海规则数据
  76. $poolRuleData['pool_id'] = $poolId;
  77. Db::name('crm_customer_pool_rule')->insert($poolRuleData);
  78. // 添加公海字段数据
  79. array_walk($poolFieldData, function (&$val) use ($poolId) {
  80. $val['pool_id'] = $poolId;
  81. });
  82. Db::name('crm_customer_pool_field_setting')->insertAll($poolFieldData);
  83. Db::commit();
  84. return true;
  85. } catch (Exception $e) {
  86. Db::rollback();
  87. return false;
  88. }
  89. }
  90. /**
  91. * 添加跟进记录的导入导出权限数据
  92. *
  93. * @author fanqi
  94. * @since 2021-05-08
  95. */
  96. static public function addFollowRuleData()
  97. {
  98. // 删除旧版的跟进记录权限规则数据
  99. db('admin_rule')->where(['types' => 2, 'title' => '跟进记录管理', 'name' => 'record', 'level' => 2, 'pid' => 1])->delete();
  100. // 新版跟进记录权限规则增加导入导出
  101. $activityPid = db('admin_rule')->where(['types' => 2, 'title' => '跟进记录', 'name' => 'activity', 'level' => 2])->value('id');
  102. if (!db('admin_rule')->where(['types' => 2, 'pid' => $activityPid, 'name' => 'excelImport'])->value('id')) {
  103. db('admin_rule')->insert(['types' => 2, 'title' => '导入', 'name' => 'excelImport', 'level' => 3, 'pid' => $activityPid, 'status' => 1]);
  104. }
  105. if (!db('admin_rule')->where(['types' => 2, 'pid' => $activityPid, 'name' => 'excelExport'])->value('id')) {
  106. db('admin_rule')->insert(['types' => 2, 'title' => '导出', 'name' => 'excelExport', 'level' => 3, 'pid' => $activityPid, 'status' => 1]);
  107. }
  108. }
  109. /**
  110. * 处理11.0.3升级时,没有处理旧公海数据的问题
  111. *
  112. * @author fanqi
  113. * @since 2021-06-23
  114. */
  115. static public function SynchronizationCustomerToPool()
  116. {
  117. $poolData = [];
  118. $installData = [];
  119. $updateData = [];
  120. // 公海数据
  121. $poolList = db('crm_customer_pool')->alias('pool')
  122. ->join('__CRM_CUSTOMER_POOL_RELATION__ relation', 'pool.pool_id = relation.pool_id', 'INNER')
  123. ->field(['relation.pool_id', 'relation.customer_id'])->select();
  124. // 整理公海数据
  125. foreach ($poolList AS $key => $value) {
  126. $poolData[$value['pool_id']][] = $value['customer_id'];
  127. }
  128. // 没有负责人和没有进入公海时间的客户
  129. $customerIds = db('crm_customer')->where(['owner_user_id' => 0, 'into_pool_time' => 0])->column('customer_id');
  130. // 整理要添加(公海客户管理表)和要编辑的数据(修改客户的进入公海时间)
  131. foreach ($customerIds AS $key => $value) {
  132. foreach ($poolData AS $k => $v) {
  133. if (!in_array($value, $v)) {
  134. $installData[] = [
  135. 'pool_id' => $k,
  136. 'customer_id' => $value
  137. ];
  138. $updateData[] = $value;
  139. }
  140. }
  141. }
  142. // 添加至公海客户关联表
  143. if (!empty($installData)) {
  144. db('crm_customer_pool_relation')->insertAll($installData);
  145. }
  146. // 更新客户的进入公海时间
  147. if (!empty($updateData)) {
  148. db('crm_customer')->whereIn('customer_id', array_unique($updateData))->exp('before_owner_user_id', 'create_user_id')->update(['into_pool_time' => time()]);
  149. }
  150. }
  151. /**
  152. * 发票导出权限
  153. *
  154. * @author fanqi
  155. * @since 2021-06-24
  156. */
  157. static public function createInvoiceExportRule()
  158. {
  159. // 发票导出权限
  160. $invoiceId = db('admin_rule')->where(['types' => 2, 'title' => '发票管理', 'name' => 'invoice', 'level' => 2, 'pid' => 1])->value('id');
  161. if (!empty($invoiceId)) {
  162. db('admin_rule')->insert(['types' => 2, 'title' => '导出', 'name' => 'excelExport', 'level' => 3, 'pid' => $invoiceId, 'status' => 1]);
  163. }
  164. }
  165. /**
  166. * 修改数字字段类型
  167. *
  168. * @author fanqi
  169. * @since 2021-06-24
  170. */
  171. static public function updateFieldNumberType()
  172. {
  173. $leadsList = db("admin_field")->field(['field', 'name', 'default_value'])->where(['types' => 'crm_leads', 'form_type' => 'number'])->select();
  174. foreach ($leadsList AS $key => $value) {
  175. Db::execute("ALTER TABLE `5kcrm_crm_leads` MODIFY COLUMN `".$value['field']."` VARCHAR(255) NULL ".$value['default_value']." COMMENT '".$value['name']."'");
  176. }
  177. $customerList = db("admin_field")->field(['field', 'name', 'default_value'])->where(['types' => 'crm_customer', 'form_type' => 'number'])->select();
  178. foreach ($customerList AS $key => $value) {
  179. Db::execute("ALTER TABLE `5kcrm_crm_customer` MODIFY COLUMN `".$value['field']."` VARCHAR(255) NULL ".$value['default_value']." COMMENT '".$value['name']."'");
  180. }
  181. $contactsList = db("admin_field")->field(['field', 'name', 'default_value'])->where(['types' => 'crm_contacts', 'form_type' => 'number'])->select();
  182. foreach ($contactsList AS $key => $value) {
  183. Db::execute("ALTER TABLE `5kcrm_crm_contacts` MODIFY COLUMN `".$value['field']."` VARCHAR(255) NULL ".$value['default_value']." COMMENT '".$value['name']."'");
  184. }
  185. $businessList = db("admin_field")->field(['field', 'name', 'default_value'])->where(['types' => 'crm_business', 'form_type' => 'number'])->select();
  186. foreach ($businessList AS $key => $value) {
  187. Db::execute("ALTER TABLE `5kcrm_crm_business` MODIFY COLUMN `".$value['field']."` VARCHAR(255) NULL ".$value['default_value']." COMMENT '".$value['name']."'");
  188. }
  189. $contractList = db("admin_field")->field(['field', 'name', 'default_value'])->where(['types' => 'crm_contract', 'form_type' => 'number'])->select();
  190. foreach ($contractList AS $key => $value) {
  191. Db::execute("ALTER TABLE `5kcrm_crm_contract` MODIFY COLUMN `".$value['field']."` VARCHAR(255) NULL ".$value['default_value']." COMMENT '".$value['name']."'");
  192. }
  193. $receivablesList = db("admin_field")->field(['field', 'name', 'default_value'])->where(['types' => 'crm_receivables', 'form_type' => 'number'])->select();
  194. foreach ($receivablesList AS $key => $value) {
  195. Db::execute("ALTER TABLE `5kcrm_crm_receivables` MODIFY COLUMN `".$value['field']."` VARCHAR(255) NULL ".$value['default_value']." COMMENT '".$value['name']."'");
  196. }
  197. $visitList = db("admin_field")->field(['field', 'name', 'default_value'])->where(['types' => 'crm_visit', 'form_type' => 'number'])->select();
  198. foreach ($visitList AS $key => $value) {
  199. Db::execute("ALTER TABLE `5kcrm_crm_visit` MODIFY COLUMN `".$value['field']."` VARCHAR(255) NULL ".$value['default_value']." COMMENT '".$value['name']."'");
  200. }
  201. $productList = db("admin_field")->field(['field', 'name', 'default_value'])->where(['types' => 'crm_product', 'form_type' => 'number'])->select();
  202. foreach ($productList AS $key => $value) {
  203. Db::execute("ALTER TABLE `5kcrm_crm_product` MODIFY COLUMN `".$value['field']."` VARCHAR(255) NULL ".$value['default_value']." COMMENT '".$value['name']."'");
  204. }
  205. }
  206. }