From 2c847246f7e3ba0c69af1a658789cd1bc87c8f64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Fri, 22 May 2026 17:12:54 +0800 Subject: [PATCH] =?UTF-8?q?bug-1492=20=E7=A7=BB=E5=8A=A8=E7=A0=B4=E5=92=8C?= =?UTF-8?q?=E5=B7=A5=E6=9C=8D=E5=B7=A5=E5=8D=95=E7=9A=84=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E6=95=B0=E6=8D=AE=E8=B0=83=E6=95=B4=20?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=AB=AF=20=E5=88=9B=E5=BB=BA=E5=B7=A5?= =?UTF-8?q?=E5=8D=95=E6=97=B6=E9=9C=80=E8=A6=81=E5=B0=86=E8=BF=99=E4=B8=AA?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E7=9A=84=E6=9C=8D=E5=8A=A1=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E5=95=86=E5=85=AC=E5=8F=B8=E5=9B=BA=E5=8C=96=E4=B8=8B=E6=9D=A5?= =?UTF-8?q?=EF=BC=8C=E5=8C=BA=E5=9F=9F=E5=AD=97=E6=AE=B5=E7=9A=84=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=8F=96=E8=BF=99=E4=B8=AA=E5=85=AC=E5=8F=B8=E5=AF=B9?= =?UTF-8?q?=E5=BA=94=E7=9A=84=E5=8C=BA=E5=9F=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 客户端 工单列表中,如果是内部用户和终端用户登录,则去掉区域列,如果是主账号登录,则区域显示空,如果是子账号登录,则显示主账号为子账号设置的区域 --- .../admin/controller/TicketController.java | 15 +-- .../cfs/controller/TicketController.java | 35 ++----- .../common/pojo/vo/AdminTicketVO.java | 6 +- .../common/pojo/vo/TicketInfoVO.java | 9 +- .../repository/entity/Ticket.java | 5 + .../service/impl/TicketServiceImpl.java | 6 ++ .../resources/mapper/GongfuTicketMapper.xml | 22 ++--- .../main/resources/mapper/TicketMapper.xml | 94 +++++++++---------- 8 files changed, 89 insertions(+), 103 deletions(-) diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java index 22029d12..7929ef52 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java @@ -690,19 +690,8 @@ public class TicketController extends ControllerBase { VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在"); AdminUser adminUser = StrUtil.equals(ticket.getUserPlatform(), Constant.FROM_ADMIN) ? adminUserService.getById(ticket.getUserId()) : null; AppUser user = StrUtil.equals(ticket.getUserPlatform(), Constant.FROM_APP) ? appUserService.getById(ticket.getUserId()) : null; - String areaName = ""; - if (Objects.nonNull(user)) { - if (user.getType() == 0) { - if (BooleanUtil.isTrue(user.getIsPrimary())) { - areaName = StrUtil.join(",", customerService.getAreas(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList()))); - } else if (Objects.nonNull(user.getAreaId())) { - areaName = appAreaService.getById(user.getAreaId()).getName(); - } - } else { - areaName = Optional.ofNullable(areaService.getById(user.getAreaId())).map(TBaseArea::getAreaName).orElse(""); - } - } -// TBaseCustomer company = customerService.getById(Integer.valueOf(user.getCompanyId())); + TBaseCustomer customer=customerService.lambdaQuery().eq(TBaseCustomer::getAgencyCompanyCode, ticket.getAgencyCompanyCode()).one(); + String areaName = Objects.isNull(customer) ? "" : customer.getAreaName(); DeviceInfoVO device = deviceService.getByDeviceNo(ticket.getDeviceNo()); String warrantyStateDesc = ""; if (Objects.nonNull(device.getWarrantyState())) { diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java index c800b9ed..31d34c7f 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java @@ -270,41 +270,25 @@ public class TicketController extends ControllerBase { public ApiResult getTicket(@Valid @RequestParam @NotNull Long id) { TicketDTO ticket = ticketService.getDto(id); VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("未找到工单"); - String areaId = "", areaName = "", companyName = ""; +// String areaId = "", areaName = "", companyName = ""; String userName, userAvatar; DeviceInfoVO device = deviceService.getByDeviceNo(ticket.getDeviceNo()); + TBaseCustomer customer = customerService.lambdaQuery().eq(TBaseCustomer::getAgencyCompanyCode, ticket.getAgencyCompanyCode()).one(); + String companyName = Optional.ofNullable(customer).map(TBaseCustomer::getAgencyCompanyName).orElse(""); + String areaName = ""; if (StrUtil.equals(ticket.getUserPlatform(), "app")) { AppUser user = appUserService.getById(ticket.getUserId()); userName = user.getName(); userAvatar = user.getAvatar(); - if (user.getType() == 0) { - if (user.getIsPrimary()) { - areaId = StrUtil.join(",", customerService.getAreaIds(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList()))); - areaName = StrUtil.join(",", customerService.getAreas(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList()))); - } else if (Objects.nonNull(user.getAreaId())) { - AppArea area = appAreaService.getById(user.getAreaId()); - if (Objects.nonNull(area)) { - areaId = String.valueOf(area.getId()); - areaName = area.getName(); - } - } -// companyName = StrUtil.join(",", customerService.listByIds(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList())) -// .stream().map(TBaseCustomer::getAgencyCompanyName).collect(Collectors.toList())); - } else if (user.getType() == 1) { -// areaName = gongfuTicketAreaService.getAreaName(ticket.getAreaId(), MultilingualUtil.getLanguage()); - GongfuTicketArea area = gongfuTicketAreaService.getArea(ticket.getAreaId(), MultilingualUtil.getLanguage()); - if (Objects.nonNull(area)) { - areaId = String.valueOf(area.getId()); - areaName = area.getName(); - } -// companyName = device.getAgentName(); + if (user.getType() == 0 && !user.getIsPrimary()) { + AppArea appArea = appAreaService.getById(user.getAreaId()); + areaName = Objects.isNull(appArea) ? "" : appArea.getName(); } } else { AdminUser adminUser = adminUserService.getById(ticket.getUserId()); userName = adminUser.getUserName(); userAvatar = adminUser.getAvatar(); } - companyName = Objects.nonNull(device) ? device.getAgentName() : ""; String handle = ticket.getHandle(); if (StrUtil.isNotBlank(handle)) { List adminUsers = adminUserService.listByIds(Arrays.stream(handle.split(",")).map(Integer::parseInt).collect(Collectors.toList())); @@ -326,7 +310,8 @@ public class TicketController extends ControllerBase { .setCreateUserName(userName) .setCreateUserAvatar(userAvatar) .setCreateTime(ticket.getCreateTime()) - .setAreaId(areaId) +// .setAreaId(areaId) +// .setAreaName(areaName) .setAreaName(areaName) .setSolveTime(ticket.getSolveTime()) .setCompanyName(companyName) @@ -342,7 +327,7 @@ public class TicketController extends ControllerBase { if (Objects.nonNull(part)) { vo.setComponent(part.getPartName()); } - vo.setPrimaryUserName(companyName); + vo.setPrimaryUserName(Optional.ofNullable(customer).map(TBaseCustomer::getAgencyCompanyName).orElse("")); } else { GongfuDevicePart part = part1Service.getByIdAndLanguage(ticket.getComponentId(), MultilingualUtil.getLanguage()); if (Objects.nonNull(part)) { diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminTicketVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminTicketVO.java index 178a2ec3..f646836f 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminTicketVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminTicketVO.java @@ -75,9 +75,9 @@ public class AdminTicketVO { return reason; } - //代理区域 - @ExcelColumn("代理区域") - private String agentAreaName; +// //代理区域 +// @ExcelColumn("代理区域") +// private String agentAreaName; //区域 @ExcelColumn("区域") diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TicketInfoVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TicketInfoVO.java index 8c3a356f..0b7d0fbb 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TicketInfoVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TicketInfoVO.java @@ -50,10 +50,13 @@ public class TicketInfoVO { //客户名称 private String companyName; - //所属区域id,多个时逗号分隔 - private String areaId; +// //所属区域id,多个时逗号分隔 +// private String areaId; - //所属区域,多个时逗号分隔 +// //所属区域,多个时逗号分隔 +// private String areaName; + + //所属区域 private String areaName; //设备编号 diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Ticket.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Ticket.java index d4d7b331..cffd94e2 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Ticket.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Ticket.java @@ -163,4 +163,9 @@ public class Ticket implements Serializable { */ @TableLogic(value = "0", delval = "1") private Integer isDelete; + + /** + * 代理公司编码 + */ + private String agencyCompanyCode; } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java index ee69b1c7..f04439f1 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java @@ -69,14 +69,20 @@ public class TicketServiceImpl extends ServiceImpl impleme @Resource private IAppMessageService appMessageService; + @Resource + private IDeviceService deviceService; + @Transactional @Override public Ticket add(TicketAddRequest request, Integer userId) { Ticket lastTicket = getBaseMapper().getLastTicket(); String no = lastTicket == null ? TicketUtil.getNextNo("YPSH", null) : TicketUtil.getNextNo("YPSH", lastTicket.getNo()); + Device device = deviceService.lambdaQuery().eq(Device::getDeviceNo, request.getDeviceNo()).last("LIMIT 1").one(); + VUtils.trueThrowBusinessError(Objects.isNull(device)).throwMessage("未找到设备"); Ticket ticket = new Ticket() .setNo(no) .setDeviceNo(request.getDeviceNo()) + .setAgencyCompanyCode(device.getAgentCode()) .setDeviceAddress(request.getDeviceAddress()) .setComponentId(Math.toIntExact(request.getComponentId())) .setUseTime(request.getUseTime()) diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/GongfuTicketMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/GongfuTicketMapper.xml index 5b1d225b..5b360fb7 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/GongfuTicketMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/GongfuTicketMapper.xml @@ -112,7 +112,7 @@ SELECT t.id,t.`no`,t.title,t.state,t.urgency,p.part_name AS 'component',t.question,t.reason - ,a1.area_name AS 'areaName','' AS 'agentAreaName',d.customer_name AS 'customerName',t.agency_company_name AS 'agentName' + ,c.area_name AS 'areaName',d.customer_name AS 'customerName',t.agency_company_name AS 'agentName' ,IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime' ,t.create_time AS 'createTime',t.solve_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType' ,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',IF(tf.id IS NULL, false, true) AS 'followed' @@ -165,7 +165,7 @@ FROM gongfu_ticket t LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN admin_user au ON t.user_id=au.id - LEFT JOIN t_base_area a1 ON u.area_id=a1.id + LEFT JOIN t_base_customer c ON t.agency_company_code=c.agency_company_code LEFT JOIN gongfu_device d ON t.device_no=d.device_no and d.data_valid_state=1 LEFT JOIN gongfu_device_type dt1 ON dt1.parent_id=0 AND d.product_line=dt1.device_type LEFT JOIN gongfu_device_type dt2 ON dt2.parent_id=dt1.id AND d.device_type=dt2.device_type @@ -180,7 +180,7 @@ SELECT t.id,t.`no`,t.title,t.state,t.urgency,p.part_name AS 'component',t.question,t.reason - ,a1.area_name AS 'areaName','' AS 'agentAreaName',d.customer_name AS 'customerName',t.agency_company_name AS 'agentName' + ,c.area_name AS 'areaName',d.customer_name AS 'customerName',t.agency_company_name AS 'agentName' ,IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime' ,t.create_time AS 'createTime',t.solve_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType' ,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',true AS 'followed',auc.user_name AS 'cqm' @@ -213,7 +213,7 @@ FROM gongfu_ticket t LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN admin_user au ON t.user_id=au.id - LEFT JOIN t_base_area a1 ON u.area_id=a1.id + LEFT JOIN t_base_customer c ON t.agency_company_code=c.agency_company_code INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=1 LEFT JOIN gongfu_device d ON t.device_no=d.device_no and d.data_valid_state=1 LEFT JOIN gongfu_device_type dt1 ON dt1.parent_id=0 AND d.product_line=dt1.device_type @@ -228,7 +228,7 @@ SELECT t.id,t.`no`,t.title,t.state,t.urgency,p.part_name AS 'component',t.question,t.reason - ,a1.area_name AS 'areaName','' AS 'agentAreaName',d.customer_name AS 'customerName',t.agency_company_name AS 'agentName' + ,c.area_name AS 'areaName',d.customer_name AS 'customerName',t.agency_company_name AS 'agentName' ,IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime' ,t.create_time AS 'createTime',t.solve_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType' ,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',true AS 'followed',auc.user_name AS 'cqm' @@ -271,7 +271,7 @@ FROM gongfu_ticket t LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN admin_user au ON t.user_id=au.id - LEFT JOIN t_base_area a1 ON u.area_id=a1.id + LEFT JOIN t_base_customer c ON t.agency_company_code=c.agency_company_code INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=1 AND tf.favorites_id=#{favouritesId} diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml index 34f5d254..14f5633b 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml @@ -98,12 +98,14 @@ SELECT t.id,t.`no`,t.title,t.state,t.urgency,p.part_name AS 'component',t.question,t.reason - ,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),IF(u.type=1,a3.area_name,'')) AS 'areaName',IF(u.is_primary,'',a2.`name`) AS 'agentAreaName' - ,d.customer_name AS 'customerName',d.agent_name AS 'agentName',IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime' - ,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType' - ,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',IF(tf.id IS NULL, false, true) AS 'followed',auc.user_name AS 'cqm' - ,t.solve_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms' - ,t.handle_name AS 'handle',t.description,t.throughput,t.accident_level + ,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),c.area_name AS 'areaName',d.customer_name AS 'customerName' + ,d.agent_name AS 'agentName',IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo' + ,t.use_time AS 'useTime',t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc' + ,d.device_type AS 'deviceType',d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate' + ,IF(tf.id IS NULL, false, true) AS 'followed',auc.user_name AS 'cqm',t.solve_time AS 'closeTime' + ,auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms',t.handle_name AS 'handle',t.description,t.throughput + ,t.accident_level FROM ticket t LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN admin_user au ON t.user_id=au.id - LEFT JOIN app_area a2 ON u.area_id=a2.id - LEFT JOIN t_base_area a3 ON u.area_id=a3.id + LEFT JOIN t_base_customer c ON t.agency_company_code=c.agency_company_code LEFT JOIN device d ON t.device_no=d.device_no and d.data_valid_state=1 LEFT JOIN t_base_device_type dt ON d.device_type=dt.device_type LEFT JOIN dictionary_item di ON d.warranty_state=di.id @@ -184,17 +186,16 @@ SELECT t.id,t.`no`,t.title,t.state,t.urgency,p.part_name AS 'component',t.question,t.reason - ,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),IF(u.type=1,a3.area_name,'')) AS 'areaName',IF(u.is_primary,'',a2.`name`) AS 'agentAreaName' - ,d.customer_name AS 'customerName',d.agent_name AS 'agentName',IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime' - ,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType' - ,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',true AS 'followed',auc.user_name AS 'cqm' - ,t.solve_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms' + ,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),c.area_name AS 'areaName',d.customer_name AS 'customerName' + ,d.agent_name AS 'agentName',IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo' + ,t.use_time AS 'useTime',t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc' + ,d.device_type AS 'deviceType',d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',true AS 'followed' + ,auc.user_name AS 'cqm',t.solve_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms' ,t.handle_name AS 'handle',t.description,t.throughput,t.accident_level FROM ticket t LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN admin_user au ON t.user_id=au.id - LEFT JOIN app_area a2 ON u.area_id=a2.id - LEFT JOIN t_base_area a3 ON u.area_id=a3.id + LEFT JOIN t_base_customer c ON t.agency_company_code=c.agency_company_code INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=1 LEFT JOIN device d ON t.device_no=d.device_no and d.data_valid_state=1 LEFT JOIN t_base_device_type dt ON d.device_type=dt.device_type @@ -232,16 +232,15 @@ SELECT t.id,t.`no`,t.title,t.state,t.urgency,p.part_name AS 'component',t.question,t.reason - ,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),IF(u.type=1,a3.area_name,'')) AS 'areaName',IF(u.is_primary,'',a2.`name`) AS 'agentAreaName' - ,d.customer_name AS 'customerName',d.agent_name AS 'agentName',IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime' - ,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType' - ,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',true AS 'followed',auc.user_name AS 'cqm' - ,t.solve_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms' + ,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),c.area_name AS 'areaName',d.customer_name AS 'customerName' + ,d.agent_name AS 'agentName',IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo' + ,t.use_time AS 'useTime',t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc' + ,d.device_type AS 'deviceType',d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',true AS 'followed' + ,auc.user_name AS 'cqm',t.solve_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms' ,t.handle_name AS 'handle',t.description,t.throughput,t.accident_level FROM ticket t LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN admin_user au ON t.user_id=au.id - LEFT JOIN app_area a2 ON u.area_id=a2.id - LEFT JOIN t_base_area a3 ON u.area_id=a3.id + LEFT JOIN t_base_customer c ON t.agency_company_code=c.agency_company_code INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=1 AND tf.favorites_id=#{favouritesId}