CustomerNewPortrait.php 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. <?php
  2. namespace app\sys\controller;
  3. use think\facade\Request;
  4. use think\facade\View;
  5. use app\model\Employee;
  6. use app\model\Org;
  7. use app\model\Company;
  8. use app\model\CustomerPackage;
  9. use app\model\Setting;
  10. use app\model\CustomerPortrait;
  11. use app\model\CustomerSource;
  12. use app\model\CustomerPortraitField;
  13. use app\model\CustomerPortraitFieldSelect;
  14. use app\model\Decostyle;
  15. use app\model\Customer;
  16. class CustomerNewPortrait
  17. {
  18. //画像设置首页
  19. public function index()
  20. {
  21. $request = request();
  22. $param = $request->only(['pid']);
  23. if (!request()->isAjax()) {
  24. $pidlist = CustomerPortraitField::where([['root_id', '=', request()->employee->root_id], ['pid', '=', 0], ['status', '=', 0]])
  25. ->orderRaw('if(isnull(sort),1,0),sort asc')->select()->toArray();
  26. view::assign('list', $pidlist);
  27. return view::fetch();
  28. }
  29. $where[] = ['root_id', '=', request()->employee->root_id];
  30. if ($param['pid']) {
  31. $where[] = ['pid', '=', $param['pid']];
  32. }
  33. $list = CustomerPortraitField::with(['select'])->where($where)->orderRaw('if(isnull(sort),1,0),sort asc')->select()->toArray();
  34. foreach ($list as $key => $val) {
  35. if ($val['keyname'] == 'deco_style') {
  36. $sel = Decostyle::field('id,name,root_id as pid')->where(['root_id' => request()->employee->root_id])->where([['type', '=', 0]])->order('id desc')->select()->toArray();
  37. $list[$key]['select'] = $sel;
  38. }
  39. if ($val['keyname'] == 'source_id') {
  40. $soudata = CustomerSource::field('id,source as name')->where('root_id', request()->employee->root_id)->select()->toArray();
  41. $list[$key]['select'] = $soudata;
  42. }
  43. }
  44. return json(['code' => 0, 'msg' => '获取成功', 'data' => $list]);
  45. }
  46. //处理已经设置过画像的公司
  47. public function reduction_set()
  48. {
  49. $list = CustomerPortrait::select()->toArray();
  50. foreach ($list as $key => $val) {
  51. $save = [];
  52. foreach ($val['fields'] as $k => $v) {
  53. if ($k != 'info_status') {
  54. foreach ($v as $p => $z) {
  55. if (empty($z['status'])) {
  56. $save[] = $z;
  57. }
  58. }
  59. }
  60. }
  61. $list[$key]['save'] = $save;
  62. }
  63. foreach ($list as $key => $val) {
  64. if (!empty($val['save'])) {
  65. $allname = array_column($val['save'], 'title');
  66. $tp = CustomerPortraitField::where([['root_id', '=', $val['root_id']], ['pid', '<>', 0], ['name', 'in', $allname]])
  67. ->update(['status' => 1]);
  68. }
  69. }
  70. }
  71. //添加自定义字段
  72. public function add_field()
  73. {
  74. $request = request();
  75. $param = $request->only(['pid', 'name', 'type', 'select' => null, 'unity']);
  76. if (!request()->isAjax()) {
  77. view::assign('pid', $param['pid']);
  78. return view::fetch();
  79. }
  80. if (strlen($param['name']) > 21) {
  81. return json(['code' => 1, 'msg' => '名称字数不能超过7个']);
  82. }
  83. //验证字段名称重复
  84. $query[] = ['name', '=', trim($param['name'])];
  85. $query[] = ['root_id', '=', request()->employee->root_id];
  86. $check = CustomerPortraitField::where($query)->field('id')->findOrEmpty();
  87. if (!$check->isEmpty()) return json(['code' => 1, 'msg' => '“' . trim($param['name']) . '”已存在。']);
  88. $add = ['name' => $param['name'], 'root_id' => request()->employee->root_id, 'pid' => $param['pid'], 'type' => $param['type'], 'keyname' => time(), 'unity' => $param['unity']];
  89. $ms = CustomerPortraitField::create($add);
  90. if (($param['type'] == 3 || $param['type'] == 4) && !empty($param['select'])) {
  91. foreach ($param['select'] as $key => $val) {
  92. $a[] = ['name' => $val['name'], 'pid' => $ms->id];
  93. }
  94. CustomerPortraitFieldSelect::insertAll($a);
  95. }
  96. if ($ms->id) {
  97. return json(['code' => 0, 'msg' => '添加成功']);
  98. } else {
  99. return json(['code' => 1, 'msg' => '添加失败']);
  100. }
  101. }
  102. //修改自定义字段
  103. public function edit_field()
  104. {
  105. $request = request();
  106. $param = $request->only(['id', 'pid', 'name', 'type', 'select' => null, 'unity']);
  107. if (!request()->isAjax()) {
  108. $data = CustomerPortraitField::with(['select'])->where([['root_id', '=', request()->employee->root_id], ['id', '=', $param['id']]])
  109. ->find();
  110. view::assign('data', $data);
  111. return view::fetch();
  112. }
  113. if (strlen($param['name']) > 21) {
  114. return json(['code' => 1, 'msg' => '名称字数不能超过7个']);
  115. }
  116. $field_data = CustomerPortraitField::where([['root_id', '=', request()->employee->root_id], ['id', '=', $param['id']]])->find();
  117. if(empty($field_data)) return json(['code' => 1, 'msg' => '修改失败,数据不存在']);
  118. $noup = ['deco_style', 'source_id'];
  119. if (!in_array($field_data['keyname'], $noup)) {
  120. $add = ['name' => $param['name'], 'type' => $param['type'], 'select' => json_encode($param['select']), 'unity' => $param['unity']];
  121. //$ms=CustomerPortraitField::where('id',$param['id'])->update($add);
  122. $ms = $field_data->save($add);
  123. }
  124. $sad = [];
  125. $sve = [];
  126. if (($param['type'] == 3 || $param['type'] == 4) && !empty($param['select'])) {
  127. foreach ($param['select'] as $key => $val) {
  128. if (empty($val['id'])) {
  129. $sad[] = ['name' => $val['name'], 'pid' => $param['id']];
  130. }
  131. if (!empty($val['id'])) {
  132. $sve[] = ['name' => $val['name'], 'id' => $val['id']];
  133. }
  134. }
  135. if ($field_data['keyname'] == 'deco_style') {
  136. $fsmod = new Decostyle;
  137. if (!empty($sad)) {
  138. foreach ($sad as $k => $v) {
  139. //$sad[$k]['root_id']=request()->employee->root_id;
  140. $decad[] = ['name' => $v['name'], 'root_id' => request()->employee->root_id];
  141. }
  142. $fsmod->saveAll($decad);
  143. }
  144. if (!empty($sve)) {
  145. $fsmod->saveAll($sve);
  146. }
  147. } elseif ($field_data['keyname'] == 'source_id') {
  148. $fsmod = new CustomerSource;
  149. if (!empty($sad)) {
  150. foreach ($sad as $k => $v) {
  151. //$sad[$k]['root_id']=request()->employee->root_id;
  152. $decad[] = ['source' => $v['name'], 'root_id' => request()->employee->root_id];
  153. }
  154. $fsmod->saveAll($decad);
  155. }
  156. if (!empty($sve)) {
  157. $sb = [];
  158. $s = $fsmod->where([['id', 'in', array_column($sve, 'id')]])->column('source', 'id');
  159. foreach ($sve as $key => $val) {
  160. if($val['name'] == $s[$val['id']]) {
  161. unset($sve[$key]);
  162. continue;
  163. }
  164. $sb[] = [
  165. 'source' => $val['name'],
  166. 'id' => $val['id']
  167. ];
  168. }
  169. if (!empty($sb)) {
  170. $exit = Customer::where([['source_id', 'in', array_column($sve, 'id')]])->find();
  171. if($exit) return json(['code'=>1, 'msg'=>'修改失败,尚有客户使用该来源']);
  172. $fsmod->saveAll($sb);
  173. }
  174. }
  175. } else {
  176. $fsmod = new CustomerPortraitFieldSelect;
  177. if (!empty($sad)) {
  178. $fsmod->saveAll($sad);
  179. }
  180. if (!empty($sve)) {
  181. $fsmod->saveAll($sve);
  182. }
  183. }
  184. }
  185. return json(['code' => 0, 'msg' => '修改成功']);
  186. // if($ms){
  187. // return json(['code' => 0, 'msg' => '修改成功']);
  188. // }else{
  189. // return json(['code' => 1, 'msg' => '修改失败']);
  190. // }
  191. }
  192. //删除自定义字段
  193. public function del_field()
  194. {
  195. $request = request();
  196. $param = $request->only(['id']);
  197. $ms = CustomerPortraitField::where([['id', '=', $param['id']], ['root_id', '=', request()->employee->root_id]])->find();
  198. if ($ms['pid'] == 0) {
  199. $child = CustomerPortraitField::where([['pid', '=', $ms['id']], ['root_id', '=', request()->employee->root_id]])->count();
  200. if (!empty($child)) {
  201. return json(['code' => 1, 'msg' => '请先删除子选项']);
  202. }
  203. }
  204. $ms->delete();
  205. if ($ms) {
  206. return json(['code' => 0, 'msg' => '删除成功']);
  207. } else {
  208. return json(['code' => 1, 'msg' => '删除失败']);
  209. }
  210. }
  211. //删除自定义的select选项
  212. public function del_select_opt()
  213. {
  214. $request = request();
  215. $param = $request->only(['id', 'pid']);
  216. $pd = CustomerPortraitField::where([['id', '=', $param['pid']], ['root_id', '=', request()->employee->root_id]])->find();
  217. if(empty($pd)) return json(['code'=>1, 'msg'=>"删除失败"]);
  218. if ($pd['keyname'] == 'deco_style') {
  219. // echo 'www';
  220. // exit;
  221. $ms = Decostyle::where('id', $param['id'])->delete();
  222. } elseif ($pd['keyname'] == 'source_id') {
  223. // 检测属性是否已经被使用
  224. $s = CustomerSource::where([['id', '=', $param['id']], ['root_id', '=', request()->employee->root_id]])->find();
  225. if(empty($s)) return json(['code'=>1, 'msg'=>"删除失败"]);
  226. /* 检测是否已经使用该值,如果使用,会影响统计相关内容,则不可删除和修改(20230328王振良,https://xueque.coding.net/p/aiyuansu/assignments/issues/5331/detail)*/
  227. // 检测该值是否已经使用
  228. $exit = Customer::where(['source_id'=>$s->id])->find();
  229. if($exit) return json(['code'=>1, 'msg'=>"删除失败,尚有用户使用该来源"]);
  230. // 删除渠道
  231. $s->delete();
  232. } else {
  233. $ms = CustomerPortraitFieldSelect::where('id', $param['id'])->delete();
  234. }
  235. return json(['code' => 0, 'msg' => '删除成功']);
  236. }
  237. //修改字段显示隐藏
  238. public function set_show()
  239. {
  240. $request = request();
  241. $param = $request->only(['id', 'field' => '']);
  242. $arr = ['isadd', 'status', 'is_must'];
  243. if (!in_array($param['field'], $arr)) return json(['code' => 1, 'msg' => '设置失败']);
  244. $ids = array_filter(explode(',', $param['id']));
  245. foreach ($ids as $id){
  246. $ms = CustomerPortraitField::find($id);
  247. $field = $param['field'];
  248. $ms->$field = $ms->$field ? 0 : 1;
  249. $ms->save();
  250. if ($ms->keyname == 'group_building' && $field == 'status') {
  251. //建群情况和建群时间关联,,建群情况开启关闭时建群时间同步开启关闭
  252. CustomerPortraitField::where([['root_id', '=', request()->employee->root_id], ['keyname', '=', 'group_building_date']])->update(['status' => $ms->$field]);
  253. }
  254. }
  255. return json(['code' => 0, 'msg' => '设置成功']);
  256. //CustomerPortraitField::where([['keyname','=','source_id']])->update(['isedit'=>0,'is_status'=>0]);
  257. /*if ($ms) {
  258. return json(['code' => 0, 'msg' => '设置成功']);
  259. } else {
  260. return json(['code' => 1, 'msg' => '设置失败']);
  261. }*/
  262. }
  263. //添加大类
  264. public function add_top_field()
  265. {
  266. $request = request();
  267. $param = $request->only(['name']);
  268. $add = ['name' => $param['name'], 'root_id' => request()->employee->root_id, 'keyname' => time()];
  269. $ms = CustomerPortraitField::create($add);
  270. if ($ms->id) {
  271. return json(['code' => 0, 'msg' => '添加成功']);
  272. } else {
  273. return json(['code' => 1, 'msg' => '添加失败']);
  274. }
  275. }
  276. //修改大类
  277. public function edit_top_field()
  278. {
  279. $request = request();
  280. $param = $request->only(['name', 'id']);
  281. $add = ['name' => $param['name']];
  282. $ms = CustomerPortraitField::where([['id', '=', $param['id']], ['root_id', '=', request()->employee->root_id]])->update($add);
  283. if ($ms) {
  284. return json(['code' => 0, 'msg' => '修改成功']);
  285. } else {
  286. return json(['code' => 1, 'msg' => '修改失败']);
  287. }
  288. }
  289. public function change()
  290. {
  291. $defaultFields = [
  292. [
  293. 'name' => '基本信息',
  294. 'keyname' => 'basic_info',
  295. 'sort' => 1,
  296. 'value' => [
  297. ['name' => '姓名', 'type' => 1, 'isedit' => 1, 'keyname' => 'name', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '', 'is_status' => 1, 'isedit_type' => 1, 'sort' => 1],
  298. ['name' => '手机号', 'type' => 2, 'isedit' => 1, 'keyname' => 'phone', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '', 'is_status' => 1, 'isedit_type' => 1, 'sort' => 2],
  299. ['name' => '性别', 'type' => 3, 'isedit' => 1, 'keyname' => 'sex', 'isdel' => 1, 'status' => 0, 'select' => ['男', '女'], 'unity' => '', 'is_status' => 1, 'isedit_type' => 1, 'sort' => 3],
  300. ['name' => '客户等级', 'type' => 3, 'isedit' => 1, 'keyname' => 'level', 'isdel' => 1, 'status' => 0, 'select' => ['A类', 'B类', 'C类', 'D类'], 'unity' => '', 'is_status' => 1, 'isedit_type' => 1, 'sort' => 5],
  301. ['name' => '装修意向', 'type' => 3, 'isedit' => 0, 'keyname' => 'intention', 'isdel' => 1, 'status' => 0, 'select' => ['非常高', '高', '中', '低'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 6],
  302. ['name' => '是否添加微信', 'type' => 3, 'isedit' => 0, 'keyname' => 'wechat', 'isdel' => 1, 'status' => 0, 'select' => ['是', '否'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 20],
  303. ['name' => '客户关注点', 'type' => 4, 'isedit' => 0, 'keyname' => 'follow', 'isdel' => 1, 'status' => 0, 'select' => ['服务流程', '设计方案', '施工质量', '施工材料', '工期长短', '售后服务', '其他'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 18],
  304. ['name' => '客户痛点', 'type' => 4, 'isedit' => 0, 'keyname' => 'point', 'isdel' => 1, 'status' => 0, 'select' => ['工艺', '环保', '质量', '恶意增项', '工期延期', '其他'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 19],
  305. ['name' => '客户来源', 'type' => 3, 'isedit' => 1, 'keyname' => 'source_id', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '', 'is_status' => 1, 'isedit_type' => 1, 'sort' => 9],
  306. ['name' => '是否首次装修', 'type' => 3, 'isedit' => 0, 'keyname' => 'first', 'isdel' => 1, 'status' => 0, 'select' => ['是', '否'], 'unity' => '', 'is_status' => 1, 'isedit_type' => 1, 'sort' => 10],
  307. ['name' => '年龄', 'type' => 3, 'isedit' => 0, 'keyname' => 'age_range', 'isdel' => 1, 'status' => 0, 'select' => ['20岁以下', '20-30岁', '30-40岁', '40-50岁', '50-60岁', '60岁以上'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 4],
  308. ['name' => '当前所在区域', 'type' => 3, 'isedit' => 0, 'keyname' => 'current_region', 'isdel' => 1, 'status' => 0, 'select' => ['其他'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 8],
  309. ['name' => '加微类型', 'type' => 3, 'isedit' => 1, 'keyname' => 'add_wechat_type', 'isdel' => 1, 'status' => 0, 'select' => ['常规加微', '社群加微'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 11],
  310. ['name' => '加微时间', 'type' => 5, 'isedit' => 1, 'keyname' => 'add_wechat_time', 'isdel' => 1, 'status' => 0, 'select' => ['常规加微', '社群加微'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 12],
  311. ['name' => '建群情况', 'type' => 4, 'isedit' => 0, 'keyname' => 'group_building', 'isdel' => 1, 'status' => 0, 'select' => ['1对1小群', '临时大群', '社群'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 13],
  312. ['name' => '直播情况', 'type' => 4, 'isedit' => 1, 'keyname' => 'live_broadcast', 'isdel' => 1, 'status' => 0, 'select' => ['1对1业务直播', '1对1设计直播', '一对多直播'], 'unity' => '', 'is_status' => 1, 'isedit_type' => 1, 'sort' => 14],
  313. ['name' => '业务直播人员', 'type' => 1, 'isedit' => 1, 'keyname' => 'live_broadcast_business', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '', 'is_status' => 1, 'isedit_type' => 1, 'sort' => 15],
  314. ['name' => '设计直播人员', 'type' => 1, 'isedit' => 1, 'keyname' => 'live_broadcast_design', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '', 'is_status' => 1, 'isedit_type' => 1, 'sort' => 16],
  315. ['name' => '直播人员', 'type' => 1, 'isedit' => 1, 'keyname' => 'live_broadcast_personnel', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '', 'is_status' => 1, 'isedit_type' => 1, 'sort' => 17],
  316. ['name' => '谈单时长', 'type' => 1, 'isedit' => 0, 'keyname' => 'talking_about_single_time', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '分钟', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 21],
  317. ['name' => '消费水平', 'type' => 3, 'isedit' => 0, 'keyname' => 'consumption_capacity', 'isdel' => 1, 'status' => 0, 'select' => ['高', '中', '低'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 7]
  318. ]
  319. ],
  320. [
  321. 'name' => '房屋信息',
  322. 'keyname' => 'house_info',
  323. 'sort' => 2,
  324. 'value' => [
  325. ['name' => '小区名称', 'type' => 1, 'isedit' => 0, 'keyname' => 'community_name', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 1],
  326. ['name' => '门牌单元号', 'type' => 1, 'isedit' => 0, 'keyname' => 'unit_number', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 2],
  327. ['name' => '请选择房屋户型', 'type' => 3, 'isedit' => 0, 'keyname' => 'housetype_arrow', 'isdel' => 1, 'status' => 0, 'select' => ['1居室', '2居室', '3居室', '4居室', '其他'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 5],
  328. ['name' => '面积', 'type' => 1, 'isedit' => 0, 'keyname' => 'square', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 4],
  329. ['name' => '装修预算', 'type' => 2, 'isedit' => 0, 'keyname' => 'budget', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '万元', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 11],
  330. ['name' => '请选择倾向风格', 'type' => 3, 'isedit' => 0, 'keyname' => 'deco_style', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 6],
  331. ['name' => '客户喜欢的色调', 'type' => 3, 'isedit' => 0, 'keyname' => 'like_color', 'isdel' => 1, 'status' => 0, 'select' => ['黄色调', '红色调', '蓝色调', '橙色调', '绿色调', '紫色调', '白色调', '灰色调'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 16],
  332. ['name' => '房屋类型', 'type' => 3, 'isedit' => 1, 'keyname' => 'house_type', 'isdel' => 1, 'status' => 0, 'select' => ['现房', '期房', '二手房'], 'unity' => '', 'is_status' => 1, 'isedit_type' => 1, 'sort' => 7],
  333. ['name' => '房屋状态', 'type' => 3, 'isedit' => 0, 'keyname' => 'house_status', 'isdel' => 1, 'status' => 0, 'select' => ['毛坯', '精装', '老房'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 9],
  334. ['name' => '房屋结构', 'type' => 3, 'isedit' => 0, 'keyname' => 'house_structure', 'isdel' => 1, 'status' => 0, 'select' => ['公寓', '商品房', '别墅', '自建'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 14],
  335. ['name' => '预计交房时间', 'type' => 5, 'isedit' => 1, 'keyname' => 'house_delivery_time', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '', 'is_status' => 1, 'isedit_type' => 1, 'sort' => 8],
  336. ['name' => '预计装修时间', 'type' => 5, 'isedit' => 1, 'keyname' => 'plan_deco_time', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '', 'is_status' => 1, 'isedit_type' => 1, 'sort' => 10],
  337. ['name' => '装修方式', 'type' => 3, 'isedit' => 0, 'keyname' => 'decoration_mode', 'isdel' => 1, 'status' => 0, 'select' => ['半包', '整装', '套餐'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 15],
  338. ['name' => '客户其它需求', 'type' => 1, 'isedit' => 0, 'keyname' => 'customer_demand', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 17],
  339. ['name' => '房屋用途', 'type' => 3, 'isedit' => 0, 'keyname' => 'housing_use', 'isdel' => 1, 'status' => 0, 'select' => ['自用', '出租'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 12],
  340. ['name' => '房屋位置', 'type' => 1, 'isedit' => 1, 'keyname' => 'house_location', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '', 'is_status' => 1, 'isedit_type' => 1, 'sort' => 3],
  341. ['name' => '其他房屋信息', 'type' => 1, 'isedit' => 0, 'keyname' => 'remarks_on_other_house_information', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 18],
  342. ['name' => '周边配套', 'type' => 4, 'isedit' => 0, 'keyname' => 'peripheral_supporting', 'isdel' => 1, 'status' => 0, 'select' => ['商业', '教育', '交通', '资源', '其他'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 13]
  343. ]
  344. ],
  345. [
  346. 'name' => '家庭信息',
  347. 'keyname' => 'family_info',
  348. 'sort' => 3,
  349. 'value' => [
  350. ['name' => '家庭结构', 'type' => 3, 'isedit' => 0, 'keyname' => 'family_structure', 'isdel' => 1, 'status' => 0, 'select' => ['新婚夫妇', '三口之家', '四口之家', '其他'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 6, 'sort' => 1],
  351. ['name' => '家庭成员意见', 'type' => 3, 'isedit' => 0, 'keyname' => 'family_opinion', 'isdel' => 1, 'status' => 0, 'select' => ['非常满意', '满意', '一般', '不满意'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 3],
  352. ['name' => '决策人', 'type' => 3, 'isedit' => 0, 'keyname' => 'decision_maker', 'isdel' => 1, 'status' => 0, 'select' => ['老婆', '丈夫', '父亲', '孩子'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 2],
  353. ['name' => '客户爱好', 'type' => 1, 'isedit' => 0, 'keyname' => 'hobby', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 7],
  354. ['name' => '客户空闲时段', 'type' => 1, 'isedit' => 0, 'keyname' => 'free_time', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 8],
  355. ['name' => '汽车价格', 'type' => 2, 'isedit' => 0, 'keyname' => 'car_price', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '元', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 5],
  356. ['name' => '房屋价格', 'type' => 2, 'isedit' => 0, 'keyname' => 'hourse_price', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '元', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 4],
  357. ['name' => '买小区的原因', 'type' => 1, 'isedit' => 0, 'keyname' => 'buying_community', 'isdel' => 1, 'status' => 0, 'select' => null, 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 6]
  358. ]
  359. ],
  360. [
  361. 'name' => '关注点',
  362. 'keyname' => 'behavioral_info',
  363. 'sort' => 4,
  364. 'value' => [
  365. ['name' => '重视环保', 'type' => 3, 'isedit' => 0, 'keyname' => 'environmental_requirements', 'isdel' => 1, 'status' => 0, 'select' => ['非常重视', '重视', '一般', '不重视'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 1],
  366. ['name' => '关注的工艺', 'type' => 3, 'isedit' => 0, 'keyname' => 'workmanship', 'isdel' => 1, 'status' => 0, 'select' => ['水电工艺', '木工工艺', '泥工工艺', '油漆工艺', '吊顶工艺', '防水工艺'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 3],
  367. ['name' => '重视设计', 'type' => 3, 'isedit' => 0, 'keyname' => 'design', 'isdel' => 1, 'status' => 0, 'select' => ['非常重视', '重视', '一般', '不重视'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 2],
  368. ['name' => '关注房屋的空间', 'type' => 4, 'isedit' => 0, 'keyname' => 'space_design', 'isdel' => 1, 'status' => 0, 'select' => ['客厅', '卧室', '卫生间', '厨房', '阳台', '其他'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 4]
  369. ]
  370. ],
  371. [
  372. 'name' => '客户满意度',
  373. 'keyname' => 'evaluate_info',
  374. 'sort' => 5,
  375. 'value' => [
  376. ['name' => '设计师服务', 'type' => 3, 'isedit' => 0, 'keyname' => 'service_satisfaction', 'isdel' => 1, 'status' => 0, 'select' => ['非常好', '好', '一般', '不满意'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 1],
  377. ['name' => '报价满意度', 'type' => 3, 'isedit' => 0, 'keyname' => 'quotation_satisfaction', 'isdel' => 1, 'status' => 0, 'select' => ['非常好', '好', '一般', '不满意'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 2],
  378. ['name' => '方案满意度', 'type' => 3, 'isedit' => 0, 'keyname' => 'program_satisfaction', 'isdel' => 1, 'status' => 0, 'select' => ['非常好', '好', '一般', '不满意'], 'unity' => '', 'is_status' => 0, 'isedit_type' => 1, 'sort' => 3]
  379. ]
  380. ]
  381. ];
  382. $fieldmod = new CustomerPortraitFieldSelect;
  383. $list = Company::where('root_id', 23)->field('id,root_id,company_name')->select()->toArray();
  384. foreach ($list as $p => $m) {
  385. $root_id = $m['root_id'];
  386. foreach ($defaultFields as $key => $val) {
  387. $parent = CustomerPortraitField::create([
  388. 'name' => $val['name'],
  389. 'pid' => 0,
  390. 'type' => 1,
  391. 'isedit' => 0,
  392. 'root_id' => $root_id,
  393. 'status' => 0,
  394. 'isdel' => 1,
  395. 'keyname' => $val['keyname'],
  396. 'sort' => $val['sort']
  397. ]);
  398. $pid = $parent->id;
  399. foreach ($val['value'] as $k => $v) {
  400. //$all[]=['name'=>$v['name'],'pid'=>$pid,'type'=>$v['type'],'isedit'=>$v['isedit'],'root_id'=>$root_id,'status'=>$v['status'],'isdel'=>$v['isdel'],'select'=>json_encode($v['select']),'keyname'=>$v['keyname']];
  401. $add = ['name' => $v['name'], 'pid' => $pid, 'type' => $v['type'], 'isedit' => $v['isedit'], 'root_id' => $root_id, 'status' => $v['status'], 'isdel' => $v['isdel'], 'keyname' => $v['keyname'], 'unity' => $v['unity'], 'is_status' => $v['is_status'], 'isedit_type' => $v['isedit_type'], 'sort' => $v['sort']];
  402. //$cp=$fieldmod->save($add);
  403. $cp = CustomerPortraitField::create($add);
  404. $all = [];
  405. if (!empty($v['select'])) {
  406. foreach ($v['select'] as $e => $r) {
  407. $all[] = ['name' => $r, 'pid' => $cp->id];
  408. }
  409. $childObjs = $fieldmod->saveAll($all);
  410. }
  411. }
  412. }
  413. }
  414. }
  415. }