From 9813a09447f4e427c147a741c7cd9a7e2cda7a04 Mon Sep 17 00:00:00 2001 From: ZZM <1105966949@qq.com> Date: Mon, 22 Dec 2025 11:11:45 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=B3=E6=8A=A5=E8=87=AA=E6=A3=80=E7=BB=93?= =?UTF-8?q?=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AdminConfigController.java | 3 + .../admin/controller/AdminRoleController.java | 10 +- .../bi/mapper/xml/BiCustomerMapper.xml | 74 +-- .../bi/mapper/xml/BiEmployeeMapper.xml | 62 +- .../kakarote/bi/mapper/xml/BiFunnelMapper.xml | 30 +- .../com/kakarote/bi/mapper/xml/BiMapper.xml | 10 +- .../kakarote/bi/mapper/xml/BiRankMapper.xml | 74 +-- .../kakarote/bi/mapper/xml/BiWorkMapper.xml | 10 +- .../com/kakarote/core/entity/PageEntity.java | 2 + .../core/security/util/EsDataEncryptUtil.java | 27 +- .../com/kakarote/crm/common/ElasticUtil.java | 20 +- .../controller/CrmCustomerPoolController.java | 6 + .../crm/controller/CrmGsdjxxController.java | 3 +- .../crm/controller/CrmSbzjjgController.java | 93 +++ .../crm/controller/XzqhController.java | 8 +- .../crm/controller/ZjzbdmVoController.java | 10 +- .../crm/entity/DTO/CrmQueryGsdjxxDTO.java | 3 + .../com/kakarote/crm/entity/PO/CrmQyfxmx.java | 25 + .../com/kakarote/crm/entity/PO/CrmQyjbxx.java | 3 +- .../com/kakarote/crm/entity/PO/CrmSbzjjg.java | 190 ++++++ .../com/kakarote/crm/entity/PO/CrmSwjg.java | 60 +- .../entity/VO/CrmAccountQueryRequestVO.java | 52 ++ .../entity/VO/CrmAccountQueryResponseVO.java | 68 ++ .../VO/CrmRankByEnterpriseRiskRequestVO.java | 35 + .../VO/CrmRankByPointerTypeRequestVO.java | 35 + .../kakarote/crm/entity/VO/ZjzbSwjgVo.java | 2 +- .../kakarote/crm/mapper/CrmSbzjjgMapper.java | 44 ++ .../crm/mapper/xml/CallRecordMapper.xml | 10 +- .../crm/mapper/xml/CrmActionRecordMapper.xml | 2 +- .../crm/mapper/xml/CrmActivityMapper.xml | 6 +- .../mapper/xml/CrmActivityRelationMapper.xml | 2 +- .../kakarote/crm/mapper/xml/CrmAuthMapper.xml | 2 +- .../crm/mapper/xml/CrmBackLogDealMapper.xml | 2 +- .../crm/mapper/xml/CrmBackLogMapper.xml | 18 +- .../mapper/xml/CrmBusinessChangeMapper.xml | 2 +- .../crm/mapper/xml/CrmBusinessDataMapper.xml | 2 +- .../crm/mapper/xml/CrmBusinessMapper.xml | 2 +- .../mapper/xml/CrmBusinessProductMapper.xml | 2 +- .../mapper/xml/CrmBusinessStatusMapper.xml | 2 +- .../crm/mapper/xml/CrmBusinessTypeMapper.xml | 2 +- .../mapper/xml/CrmBusinessUserStarMapper.xml | 2 +- .../mapper/xml/CrmContactsBusinessMapper.xml | 2 +- .../crm/mapper/xml/CrmContactsDataMapper.xml | 2 +- .../crm/mapper/xml/CrmContactsMapper.xml | 2 +- .../mapper/xml/CrmContactsUserStarMapper.xml | 2 +- .../crm/mapper/xml/CrmContractDataMapper.xml | 2 +- .../crm/mapper/xml/CrmContractMapper.xml | 2 +- .../mapper/xml/CrmContractProductMapper.xml | 2 +- .../crm/mapper/xml/CrmCustomerDataMapper.xml | 2 +- .../crm/mapper/xml/CrmCustomerMapper.xml | 2 +- .../xml/CrmCustomerPoolFieldSettingMapper.xml | 2 +- .../xml/CrmCustomerPoolFieldSortMapper.xml | 2 +- .../xml/CrmCustomerPoolFieldStyleMapper.xml | 2 +- .../crm/mapper/xml/CrmCustomerPoolMapper.xml | 2 +- .../xml/CrmCustomerPoolRelationMapper.xml | 2 +- .../mapper/xml/CrmCustomerPoolRuleMapper.xml | 2 +- .../mapper/xml/CrmCustomerSettingMapper.xml | 2 +- .../xml/CrmCustomerSettingUserMapper.xml | 2 +- .../mapper/xml/CrmCustomerUserStarMapper.xml | 2 +- .../crm/mapper/xml/CrmExamineLogMapper.xml | 2 +- .../crm/mapper/xml/CrmExamineMapper.xml | 2 +- .../crm/mapper/xml/CrmExamineRecordMapper.xml | 2 +- .../crm/mapper/xml/CrmExamineStepMapper.xml | 2 +- .../crm/mapper/xml/CrmFieldConfigMapper.xml | 2 +- .../crm/mapper/xml/CrmFieldMapper.xml | 2 +- .../crm/mapper/xml/CrmFieldSortMapper.xml | 2 +- .../kakarote/crm/mapper/xml/CrmInstrument.xml | 110 ++-- .../mapper/xml/CrmInstrumentSortMapper.xml | 2 +- .../crm/mapper/xml/CrmInvoiceInfoMapper.xml | 2 +- .../crm/mapper/xml/CrmInvoiceMapper.xml | 2 +- .../crm/mapper/xml/CrmLeadsDataMapper.xml | 2 +- .../crm/mapper/xml/CrmLeadsMapper.xml | 2 +- .../mapper/xml/CrmMarketingFieldMapper.xml | 2 +- .../crm/mapper/xml/CrmMarketingFormMapper.xml | 2 +- .../crm/mapper/xml/CrmNumberSettingMapper.xml | 2 +- .../mapper/xml/CrmProductCategoryMapper.xml | 2 +- .../crm/mapper/xml/CrmProductDataMapper.xml | 2 +- .../mapper/xml/CrmProductDetailImgMapper.xml | 2 +- .../crm/mapper/xml/CrmProductMapper.xml | 2 +- .../crm/mapper/xml/CrmProductUserMapper.xml | 2 +- .../mapper/xml/CrmReceivablesDataMapper.xml | 2 +- .../crm/mapper/xml/CrmReceivablesMapper.xml | 2 +- .../mapper/xml/CrmReceivablesPlanMapper.xml | 2 +- .../mapper/xml/CrmReturnVisitDataMapper.xml | 2 +- .../crm/mapper/xml/CrmReturnVisitMapper.xml | 2 +- .../crm/mapper/xml/CrmRoleFieldMapper.xml | 2 +- .../crm/mapper/xml/CrmSbzjjgMapper.xml | 287 ++++++++ .../crm/mapper/xml/CrmSceneDefaultMapper.xml | 2 +- .../crm/mapper/xml/CrmSceneMapper.xml | 2 +- .../kakarote/crm/mapper/xml/CrmSwjgMapper.xml | 11 +- .../kakarote/crm/mapper/xml/XzqhMapper.xml | 1 + .../crm/service/ICrmCustomerPoolService.java | 4 + .../crm/service/ICrmDjzclxService.java | 5 + .../kakarote/crm/service/ICrmHyDmService.java | 6 + .../crm/service/ICrmSbzjjgService.java | 61 ++ .../crm/service/ICrmSwjgDmService.java | 6 + .../crm/service/IZjzbDzbzdszlVoService.java | 5 + .../crm/service/IZjzbZsxmVoService.java | 9 + .../crm/service/IZjzbdmVoService.java | 5 + .../service/impl/CrmBackLogServiceImpl.java | 24 +- .../service/impl/CrmContractServiceImpl.java | 2 + .../impl/CrmCustomerPoolServiceImpl.java | 221 +++++++ .../service/impl/CrmCustomerServiceImpl.java | 6 +- .../service/impl/CrmDjzclxServiceImpl.java | 11 + .../service/impl/CrmGsdjxxServiceImpl.java | 189 +++++- .../crm/service/impl/CrmHyDmServiceImpl.java | 12 + .../service/impl/CrmOpenApiServiceImpl.java | 2 + .../service/impl/CrmQyfxjcjgServiceImpl.java | 2 +- .../service/impl/CrmSbzjjgServiceImpl.java | 610 ++++++++++++++++++ .../service/impl/CrmSwjgDmServiceImpl.java | 10 + .../impl/ZjzbDzbzdszlVoServiceImpl.java | 15 + .../service/impl/ZjzbZsxmVoServiceImpl.java | 15 + .../crm/service/impl/ZjzbdmVoServiceImpl.java | 11 + .../java/com/kakarote/crm/util/JsonUtil.java | 18 + .../mapper/xml/ExamineRecordLogMapper.xml | 10 +- .../gateway/config/GatewayFilter.java | 7 + .../kakarote/oa/mapper/xml/OaLogMapper.xml | 10 +- 117 files changed, 2433 insertions(+), 359 deletions(-) create mode 100644 crm/src/main/java/com/kakarote/crm/controller/CrmSbzjjgController.java create mode 100644 crm/src/main/java/com/kakarote/crm/entity/PO/CrmSbzjjg.java create mode 100644 crm/src/main/java/com/kakarote/crm/entity/VO/CrmAccountQueryRequestVO.java create mode 100644 crm/src/main/java/com/kakarote/crm/entity/VO/CrmAccountQueryResponseVO.java create mode 100644 crm/src/main/java/com/kakarote/crm/entity/VO/CrmRankByEnterpriseRiskRequestVO.java create mode 100644 crm/src/main/java/com/kakarote/crm/entity/VO/CrmRankByPointerTypeRequestVO.java create mode 100644 crm/src/main/java/com/kakarote/crm/mapper/CrmSbzjjgMapper.java create mode 100644 crm/src/main/java/com/kakarote/crm/mapper/xml/CrmSbzjjgMapper.xml create mode 100644 crm/src/main/java/com/kakarote/crm/service/ICrmSbzjjgService.java create mode 100644 crm/src/main/java/com/kakarote/crm/service/impl/CrmSbzjjgServiceImpl.java diff --git a/admin/src/main/java/com/kakarote/admin/controller/AdminConfigController.java b/admin/src/main/java/com/kakarote/admin/controller/AdminConfigController.java index 475994e..ccb8d43 100644 --- a/admin/src/main/java/com/kakarote/admin/controller/AdminConfigController.java +++ b/admin/src/main/java/com/kakarote/admin/controller/AdminConfigController.java @@ -94,6 +94,9 @@ public class AdminConfigController { .eq(AdminModelSort::getType, 1) .eq(AdminModelSort::getUserId, UserUtil.getUserId()) .list(); + AdminModelSort sort = new AdminModelSort(); + sort.setModel("compliance"); + list.add(sort); return Result.ok(list.stream().map(AdminModelSort::getModel).collect(Collectors.toList())); } diff --git a/admin/src/main/java/com/kakarote/admin/controller/AdminRoleController.java b/admin/src/main/java/com/kakarote/admin/controller/AdminRoleController.java index 2f283fb..0a2e1f9 100644 --- a/admin/src/main/java/com/kakarote/admin/controller/AdminRoleController.java +++ b/admin/src/main/java/com/kakarote/admin/controller/AdminRoleController.java @@ -57,8 +57,16 @@ public class AdminRoleController { @ApiOperation("角色权限") public Result auth() { JSONObject object = adminRoleService.auth(UserUtil.getUserId()); - AdminModelSort one = adminModelSortService.lambdaQuery().select(AdminModelSort::getModel).eq(AdminModelSort::getType, 1).eq(AdminModelSort::getUserId, UserUtil.getUserId()).orderByAsc(AdminModelSort::getSort).last(" limit 1").one(); + AdminModelSort one = adminModelSortService.lambdaQuery() + .select(AdminModelSort::getModel) + .eq(AdminModelSort::getType, 1) + .eq(AdminModelSort::getUserId, UserUtil.getUserId()) + .orderByAsc(AdminModelSort::getSort) + .last(" limit 1").one(); + AdminModelSort sort = new AdminModelSort(); + sort.setModel("compliance"); object.put("firstModel", one != null ? one.getModel() : ""); + object.put("compliance", sort.getModel()); return R.ok(object); } diff --git a/bi/src/main/java/com/kakarote/bi/mapper/xml/BiCustomerMapper.xml b/bi/src/main/java/com/kakarote/bi/mapper/xml/BiCustomerMapper.xml index 5118c1b..6748a1a 100644 --- a/bi/src/main/java/com/kakarote/bi/mapper/xml/BiCustomerMapper.xml +++ b/bi/src/main/java/com/kakarote/bi/mapper/xml/BiCustomerMapper.xml @@ -1,5 +1,5 @@ - + @@ -156,17 +156,17 @@ where c.status != 3 and a.type = 1 and DATE_FORMAT(a.create_time,#{sqlDateFormat}) between #{beginTime} and #{finalTime} and a.create_user_id in - + #{item} - + ),0),2) as proportion from wk_crm_activity a left join wk_crm_customer c on a.activity_type_id = c.customer_id where c.status != 3 and a.type = 1 and DATE_FORMAT(a.create_time,#{sqlDateFormat}) between #{beginTime} and #{finalTime} and a.create_user_id in - + #{item} - + group by a.category @@ -178,9 +178,9 @@ FROM wk_crm_customer WHERE owner_user_id IN - + #{item} - + and status != 3 @@ -199,9 +199,9 @@ left join wk_admin_user as d on a.owner_user_id = d.user_id where DATE_FORMAT(a.create_time,#{sqlDateFormat}) = #{time} and b.check_status != 7 and a.deal_status = 1 and a.owner_user_id in - + #{item} - + and a.status != 3 @@ -215,17 +215,17 @@ where c.status != 3 and DATE_FORMAT(a.create_time,'${sqlDateFormat}') = ${x} and a.type = 9 and a.post_owner_user_id in - + #{item} - ) as receiveNum + ) as receiveNum from wk_crm_owner_record a left join wk_crm_customer c on a.type_id = c.customer_id where c.status != 3 and DATE_FORMAT(a.create_time,'${sqlDateFormat}') = ${x} and a.type = 9 and a.pre_owner_user_id in - + #{item} - + @@ -243,9 +243,9 @@ and a.type = 9 and a.post_owner_user_id = a.user_id) as receiveNum from wk_admin_user as a left join wk_admin_dept as b on a.dept_id = b.dept_id where user_id in - + #{item} - + @@ -289,9 +289,9 @@ from wk_crm_customer where DATE_FORMAT(create_time,'${entity.sqlDateFormat}') between #{entity.beginTime} and #{entity.finalTime} and deal_status = 1 and owner_user_id in - + #{item} - + and address like '%${x}%' @@ -305,9 +305,9 @@ left join wk_crm_contract_product as c on b.contract_id = c.contract_id where DATE_FORMAT(a.create_time,'${entity.sqlDateFormat}') between #{entity.beginTime} and #{entity.finalTime} and a.deal_status = 1 and a.owner_user_id in - + #{item} - + and c.product_id = ${x.id} @@ -341,9 +341,9 @@ left join wk_crm_return_visit_data as e on a.batch_id = e.batch_id and e.field_id = #{fieldId} where d.status != 3 and DATE_FORMAT(b.order_date,'${sqlDateFormat}') between #{beginTime} and #{finalTime} and d.product_id = #{x.id} and a.owner_user_id in - + #{item} - + ) as z diff --git a/bi/src/main/java/com/kakarote/bi/mapper/xml/BiEmployeeMapper.xml b/bi/src/main/java/com/kakarote/bi/mapper/xml/BiEmployeeMapper.xml index 3c074bd..24b4ed9 100644 --- a/bi/src/main/java/com/kakarote/bi/mapper/xml/BiEmployeeMapper.xml +++ b/bi/src/main/java/com/kakarote/bi/mapper/xml/BiEmployeeMapper.xml @@ -1,5 +1,5 @@ - + @@ -139,16 +139,16 @@ ( SELECT IFNULL(sum(b.invoice_money),0) FROM wk_crm_invoice as b WHERE b.check_status in (1,10) and b.real_invoice_date BETWEEN #{startTime} and #{endTime} and b.owner_user_id in - + #{item} - + ) as invoiceMoney, ( SELECT IFNULL(sum(c.money),0) FROM wk_crm_receivables as c WHERE c.check_status in (1,10) and c.return_time BETWEEN #{startTime} and #{endTime} and c.owner_user_id in - + #{item} - + ) as receivablesMoney diff --git a/bi/src/main/java/com/kakarote/bi/mapper/xml/BiFunnelMapper.xml b/bi/src/main/java/com/kakarote/bi/mapper/xml/BiFunnelMapper.xml index bacd44b..38e636b 100644 --- a/bi/src/main/java/com/kakarote/bi/mapper/xml/BiFunnelMapper.xml +++ b/bi/src/main/java/com/kakarote/bi/mapper/xml/BiFunnelMapper.xml @@ -1,5 +1,5 @@ - + @@ -38,9 +38,9 @@ status = 1 AND (DATE_FORMAT(create_time,#{sqlDateFormat}) between #{beginTime} and #{finalTime}) AND owner_user_id IN - + #{item} - + ) t GROUP BY t.type ) a @@ -58,9 +58,9 @@ status = 1 AND (DATE_FORMAT(create_time,#{sqlDateFormat}) between #{beginTime} and #{finalTime}) AND owner_user_id IN - + #{item} - + ) t GROUP BY t.type ) b ON a.type = b.type @@ -86,9 +86,9 @@ WHERE (DATE_FORMAT(create_time,#{sqlDateFormat}) between #{beginTime} and #{finalTime}) AND owner_user_id IN - + #{item} - + AND STATUS = 1 ) t GROUP BY t.type @@ -107,9 +107,9 @@ (DATE_FORMAT(create_time,#{sqlDateFormat}) between #{beginTime} and #{finalTime}) AND is_end = 1 AND owner_user_id IN - + #{item} - + AND STATUS = 1 ) t GROUP BY t.type @@ -128,9 +128,9 @@ (DATE_FORMAT(create_time,#{sqlDateFormat}) between #{beginTime} and #{finalTime}) AND is_end = 1 AND owner_user_id IN - + #{item} - + AND STATUS = 1 ) t GROUP BY t.type @@ -153,9 +153,9 @@ left join wk_crm_business_status e on e.status_id = a.status_id left join wk_crm_business_type f on f.type_id = a.type_id where a.owner_user_id in - + #{item} - + and date_format(a.create_time,#{sqlDateFormat}) = #{time} and a.status = 1 diff --git a/bi/src/main/java/com/kakarote/bi/mapper/xml/BiMapper.xml b/bi/src/main/java/com/kakarote/bi/mapper/xml/BiMapper.xml index 857fb25..6d03199 100644 --- a/bi/src/main/java/com/kakarote/bi/mapper/xml/BiMapper.xml +++ b/bi/src/main/java/com/kakarote/bi/mapper/xml/BiMapper.xml @@ -1,5 +1,5 @@ - + @@ -34,9 +34,9 @@ JOIN wk_crm_contract_product AS b ON a.contract_id = b.contract_id WHERE DATE_FORMAT(a.order_date,#{sqlDateFormat}) between #{beginTime} and #{finalTime} and a.owner_user_id in - + #{item} - + GROUP BY b.product_id ) as a diff --git a/bi/src/main/java/com/kakarote/bi/mapper/xml/BiRankMapper.xml b/bi/src/main/java/com/kakarote/bi/mapper/xml/BiRankMapper.xml index 659da3a..cebe758 100644 --- a/bi/src/main/java/com/kakarote/bi/mapper/xml/BiRankMapper.xml +++ b/bi/src/main/java/com/kakarote/bi/mapper/xml/BiRankMapper.xml @@ -1,5 +1,5 @@ - + @@ -23,9 +23,9 @@ LEFT JOIN wk_crm_customer_data as b on a.batch_id=b.batch_id and b.`name`= (select field_name from wk_crm_field where label = 2 and field_name = 'industry') where a.status !=3 and a.owner_user_id in - + #{item} - + and to_days(NOW()) = TO_DAYS(a.create_time) @@ -72,9 +72,9 @@ LEFT JOIN wk_crm_customer_data as b on a.batch_id=b.batch_id and b.`name`= (select field_name from wk_crm_field where label = 2 and field_name = 'level') where a.status !=3 and a.owner_user_id in - + #{item} - + and to_days(NOW()) = TO_DAYS(a.create_time) @@ -121,9 +121,9 @@ LEFT JOIN wk_crm_customer_data as b on a.batch_id=b.batch_id and b.`name`= (select field_name from wk_crm_field where label = 2 and field_name = 'source') where a.status !=3 and a.owner_user_id in - + #{item} - + and to_days(NOW()) = TO_DAYS(a.create_time) @@ -171,9 +171,9 @@ WHERE d.check_status = 1 and d.owner_user_id in - + #{item} - + and to_days(NOW()) = TO_DAYS(d.order_date) @@ -219,9 +219,9 @@ left join wk_admin_dept as cad on cad.dept_id = cau.dept_id WHERE check_status in (1,10) and cct.owner_user_id in - + #{item} - + and DATE_FORMAT(order_date,'${sqlDateFormat}') between #{beginTime} and #{finalTime} GROUP BY cct.owner_user_id ORDER BY money DESC @@ -234,9 +234,9 @@ left join wk_admin_dept as cad on cad.dept_id = cau.dept_id WHERE check_status in (1,10) and cct.owner_user_id in - + #{item} - + and DATE_FORMAT(return_time,'${sqlDateFormat}') between #{beginTime} and #{finalTime} GROUP BY cct.owner_user_id ORDER BY money DESC @@ -249,9 +249,9 @@ left join wk_admin_dept as cad on cad.dept_id = cau.dept_id WHERE check_status != 7 and cct.owner_user_id in - + #{item} - + and DATE_FORMAT(order_date,'${sqlDateFormat}') between #{beginTime} and #{finalTime} GROUP BY cct.owner_user_id ORDER BY count DESC @@ -265,9 +265,9 @@ left join wk_admin_dept as cad on cad.dept_id = cau.dept_id WHERE check_status = 1 and cct.owner_user_id in - + #{item} - + and DATE_FORMAT(order_date,'${sqlDateFormat}') between #{beginTime} and #{finalTime} GROUP BY cct.owner_user_id ORDER BY count DESC @@ -281,9 +281,9 @@ left join wk_admin_dept as cad on cad.dept_id = cau.dept_id WHERE cct.status != 3 and cct.owner_user_id in - + #{item} - + and DATE_FORMAT(cct.create_time,'${sqlDateFormat}') between #{beginTime} and #{finalTime} GROUP BY cct.owner_user_id ORDER BY count DESC @@ -295,9 +295,9 @@ LEFT JOIN wk_admin_user as cau on cau.user_id = cct.create_user_id left join wk_admin_dept as cad on cad.dept_id = cau.dept_id WHERE cct.create_user_id in - + #{item} - + and DATE_FORMAT(cct.create_time,'${sqlDateFormat}') between #{beginTime} and #{finalTime} GROUP BY cct.create_user_id ORDER BY count DESC @@ -346,9 +346,9 @@ left JOIN wk_admin_user cau on cau.user_id = v.create_user_id inner JOIN wk_admin_dept cad ON cad.dept_id = cau.dept_id WHERE cau.user_id in - + #{item} - + GROUP BY cau.user_id order by count desc @@ -362,9 +362,9 @@ WHERE if(ccr.activity_type = 2,c.status != 3,1=1) and ccr.type = 1 and ccr.create_user_id in - + #{item} - + and DATE_FORMAT(ccr.create_time,'${sqlDateFormat}') between #{beginTime} and #{finalTime} GROUP BY ccr.create_user_id ORDER BY count DESC @@ -379,9 +379,9 @@ left join wk_admin_dept as cad on cad.dept_id = cau.dept_id WHERE a.type = 3 and coe.create_user_id in - + #{item} - + and coe.examine_status = 1 and DATE_FORMAT(coet.start_time,'${sqlDateFormat}') between #{beginTime} and #{finalTime} GROUP BY coe.create_user_id @@ -393,18 +393,18 @@ FROM (select sum(money) as money, owner_user_id from wk_crm_contract where check_status in ('1','10') and owner_user_id in - + #{item} - + and DATE_FORMAT(order_date,'${data.sqlDateFormat}') between #{data.beginTime} and #{data.finalTime} group by owner_user_id) as cct LEFT JOIN wk_admin_user as cau on cau.user_id = cct.owner_user_id left join wk_admin_dept as cad on cad.dept_id = cau.dept_id left join ( select sum(x.achievement) as achievement,x.user_id from ( select ${x.month} as achievement,obj_id as user_id from wk_crm_achievement where obj_id in - + #{item} - + and year = #{x.year} and type = 3 and status = 1 ) as x group by user_id) as y ON y.user_id = cct.owner_user_id @@ -419,18 +419,18 @@ FROM (select sum(money) as money, owner_user_id from wk_crm_receivables where check_status in ('1','10') and owner_user_id in - + #{item} - + and DATE_FORMAT(return_time,'${data.sqlDateFormat}') between #{data.beginTime} and #{data.finalTime} group by owner_user_id) as cct LEFT JOIN wk_admin_user as cau on cau.user_id = cct.owner_user_id left join wk_admin_dept as cad on cad.dept_id = cau.dept_id left join ( select sum(x.achievement) as achievement,x.user_id from ( select ${x.month} as achievement,obj_id as user_id from wk_crm_achievement where obj_id in - + #{item} - + and year = #{x.year} and type = 3 and status = 2 ) as x group by user_id) as y ON y.user_id = cct.owner_user_id diff --git a/bi/src/main/java/com/kakarote/bi/mapper/xml/BiWorkMapper.xml b/bi/src/main/java/com/kakarote/bi/mapper/xml/BiWorkMapper.xml index 0de47f8..6dda7ea 100644 --- a/bi/src/main/java/com/kakarote/bi/mapper/xml/BiWorkMapper.xml +++ b/bi/src/main/java/com/kakarote/bi/mapper/xml/BiWorkMapper.xml @@ -1,5 +1,5 @@ - + diff --git a/core/src/main/java/com/kakarote/core/entity/PageEntity.java b/core/src/main/java/com/kakarote/core/entity/PageEntity.java index 162ef97..7f445ac 100644 --- a/core/src/main/java/com/kakarote/core/entity/PageEntity.java +++ b/core/src/main/java/com/kakarote/core/entity/PageEntity.java @@ -20,6 +20,8 @@ public class PageEntity { @ApiModelProperty(value = "是否分页,0:不分页 1 分页", allowableValues = "0,1") private Integer pageType = 1; + private Integer offset = 0; + public BasePage parse() { BasePage page = new BasePage<>(getPage(), getLimit()); if (Objects.equals(0, pageType)) { diff --git a/core/src/main/java/com/kakarote/core/security/util/EsDataEncryptUtil.java b/core/src/main/java/com/kakarote/core/security/util/EsDataEncryptUtil.java index 888d3f2..3741e08 100644 --- a/core/src/main/java/com/kakarote/core/security/util/EsDataEncryptUtil.java +++ b/core/src/main/java/com/kakarote/core/security/util/EsDataEncryptUtil.java @@ -30,6 +30,29 @@ public class EsDataEncryptUtil { return encryptionService; } + /** + * 收集不需要加密的查询字段 + * @param field + * @return + */ + public static Boolean notRequireEncryptionFields(String field){ + + // 初始化一个Set,包含所有不需要加密的字段 + final Set NOT_ENCRYPTION_FIELDS = new HashSet<>(Arrays.asList( + "customerId", + "followup", + "ownerUserId", + "isReceive", + "status", + "planNum", + "checkStatus", + "_id" + )); + + // 检查传入的字段是否不在上述集合中 + return !NOT_ENCRYPTION_FIELDS.contains(field); + } + /** * 加密Map中的所有String类型字段,但跳过日期类型字段 */ @@ -42,8 +65,8 @@ public class EsDataEncryptUtil { for (Map.Entry entry : map.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); - // 检查是否为日期类型字段,如果是则不加密 - if (isDateField(key) && value instanceof String) { + // 日期字段和planNum加密 + if ((isDateField(key) && value instanceof String) || !notRequireEncryptionFields(key)) { encryptedMap.put(key, value); } else { encryptedMap.put(key, encryptValue(value)); diff --git a/crm/src/main/java/com/kakarote/crm/common/ElasticUtil.java b/crm/src/main/java/com/kakarote/crm/common/ElasticUtil.java index 8ab4403..a07bd66 100644 --- a/crm/src/main/java/com/kakarote/crm/common/ElasticUtil.java +++ b/crm/src/main/java/com/kakarote/crm/common/ElasticUtil.java @@ -254,7 +254,9 @@ public class ElasticUtil { Map map = new HashMap<>(); if (value instanceof String) { String strValue = (String) value; - if (!strValue.isEmpty() && !strValue.startsWith(Const.ENCRYPTED_PREFIX)) { + if (!strValue.isEmpty() + && !strValue.startsWith(Const.ENCRYPTED_PREFIX) + && EsDataEncryptUtil.notRequireEncryptionFields(fieldName)) { map.put(fieldName, Const.ENCRYPTED_PREFIX + ApplicationContextHolder.getBean(EncryptionService.class).deterministicEncryptAes(strValue)); } else { map.put(fieldName, value); @@ -306,15 +308,17 @@ public class ElasticUtil { // 对需要加密的字段值进行加密处理 List encryptedValues = new ArrayList<>(); - for (String value : search.getValues()) { - if (!value.isEmpty() && !value.startsWith(Const.ENCRYPTED_PREFIX)) { - // 添加加密前缀并进行AES加密 - encryptedValues.add(Const.ENCRYPTED_PREFIX + ApplicationContextHolder.getBean(EncryptionService.class).deterministicEncryptAes(value)); - } else { - encryptedValues.add(value); + if (EsDataEncryptUtil.notRequireEncryptionFields(search.getName())){ + for (String value : search.getValues()) { + if (!value.isEmpty() && !value.startsWith(Const.ENCRYPTED_PREFIX)) { + // 添加加密前缀并进行AES加密 + encryptedValues.add(Const.ENCRYPTED_PREFIX + ApplicationContextHolder.getBean(EncryptionService.class).deterministicEncryptAes(value)); + } else { + encryptedValues.add(value); + } } + search.setValues(encryptedValues); } - search.setValues(encryptedValues); switch (search.getSearchEnum()) { case IS: queryBuilder.filter(QueryBuilders.termsQuery(search.getName(), search.getValues())); diff --git a/crm/src/main/java/com/kakarote/crm/controller/CrmCustomerPoolController.java b/crm/src/main/java/com/kakarote/crm/controller/CrmCustomerPoolController.java index b50048a..2bd67ce 100644 --- a/crm/src/main/java/com/kakarote/crm/controller/CrmCustomerPoolController.java +++ b/crm/src/main/java/com/kakarote/crm/controller/CrmCustomerPoolController.java @@ -269,5 +269,11 @@ public class CrmCustomerPoolController { JSONObject object = crmCustomerPoolService.queryAuthByPoolId(poolId); return Result.ok(object); } + + @PostMapping("/uploadExcelForZdfddwmd") + @ApiOperation("根据导入的Excel,返回重点辅导单位名单公海") + public void uploadExcelForZdfddwmd(@RequestParam("file") MultipartFile file) throws IOException { + crmCustomerPoolService.uploadExcelForZdfddwmd(file); + } } diff --git a/crm/src/main/java/com/kakarote/crm/controller/CrmGsdjxxController.java b/crm/src/main/java/com/kakarote/crm/controller/CrmGsdjxxController.java index a828688..649c7e0 100644 --- a/crm/src/main/java/com/kakarote/crm/controller/CrmGsdjxxController.java +++ b/crm/src/main/java/com/kakarote/crm/controller/CrmGsdjxxController.java @@ -24,7 +24,7 @@ public class CrmGsdjxxController { private ICrmGsdjxxService iCrmGsdjxxService; @PostMapping("/queryByMonthAndXzqhDm") - @ApiOperation("根据月份和行政区划代码查询工商登记信息") + @ApiOperation("根据月份和行政区划代码同步工商登记信息") public Result> queryByMonthAndXzqhDm(@RequestBody CrmQueryGsdjxxDTO crmQueryGsdjxxDTO) throws Exception { List crmQueryGsdjxxVOList = iCrmGsdjxxService.queryByMonthAndXzqhDm(crmQueryGsdjxxDTO); return R.ok(crmQueryGsdjxxVOList); @@ -40,6 +40,7 @@ public class CrmGsdjxxController { @PostMapping("/queryGsdjxxByDate") @ApiOperation("根据日期查询(默认是当天)") public Result>> queryGsdjxxByDate(@RequestBody CrmQueryGsdjxxDTO crmQueryGsdjxxDTO) { + crmQueryGsdjxxDTO.setPage(1); BasePage> basePage = iCrmGsdjxxService.queryGsdjxxByDate(crmQueryGsdjxxDTO); return R.ok(basePage); } diff --git a/crm/src/main/java/com/kakarote/crm/controller/CrmSbzjjgController.java b/crm/src/main/java/com/kakarote/crm/controller/CrmSbzjjgController.java new file mode 100644 index 0000000..129e8e3 --- /dev/null +++ b/crm/src/main/java/com/kakarote/crm/controller/CrmSbzjjgController.java @@ -0,0 +1,93 @@ +package com.kakarote.crm.controller; + + +import com.kakarote.core.common.R; +import com.kakarote.core.common.Result; +import com.kakarote.core.entity.BasePage; +import com.kakarote.crm.entity.DTO.ZjzbSwjgDTO; +import com.kakarote.crm.entity.PO.CrmSbzjjg; +import com.kakarote.crm.entity.VO.*; +import com.kakarote.crm.service.ICrmSbzjjgService; +import com.kakarote.crm.service.IZjzbSwjgVoService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/crmSbzjjg") +@Api(tags = "申报智能自检数据查询模块") +public class CrmSbzjjgController { + + @Autowired + private ICrmSbzjjgService crmSbzjjgService; + + + @PostMapping("/accountQuery") + @ApiOperation("户次查询") + public Result accountQuery(@RequestBody CrmAccountQueryRequestVO crmAccountQueryRequestVO) { + CrmAccountQueryResponseVO crmAccountQueryResponseVO = crmSbzjjgService.accountQuery(crmAccountQueryRequestVO); + return R.ok(crmAccountQueryResponseVO); + } + + @PostMapping("/accountQueryDetail") + @ApiOperation("户次查询明细") + public Result> accountQueryDetail(@RequestBody CrmAccountQueryRequestVO crmAccountQueryRequestVO) { + BasePage basepage = crmSbzjjgService.accountQueryDetail(crmAccountQueryRequestVO); + return R.ok(basepage); + } + + @PostMapping("/rankByEnterpriseRisk") + @ApiOperation("企业风险排名") + public Result>> rankByEnterpriseRisk(@RequestBody CrmRankByEnterpriseRiskRequestVO crmRankByEnterpriseRiskRequestVO) { + BasePage> basepage = crmSbzjjgService.rankByEnterpriseRisk(crmRankByEnterpriseRiskRequestVO); + return R.ok(basepage); + } + + @PostMapping("/rankByEnterpriseRiskDetail") + @ApiOperation("企业风险排名明细") + public Result>> rankByEnterpriseRiskDetail(@RequestBody CrmRankByEnterpriseRiskRequestVO crmRankByEnterpriseRiskRequestVO) { + BasePage> basepage = crmSbzjjgService.rankByEnterpriseRiskDetail(crmRankByEnterpriseRiskRequestVO); + return R.ok(basepage); + } + + @PostMapping("/rankByPointerType") + @ApiOperation("指标类别排名") + public Result>> rankByPointerType(@RequestBody CrmRankByPointerTypeRequestVO crmRankByPointerTypeRequestVO) { + BasePage> basepage = crmSbzjjgService.rankByPointerType(crmRankByPointerTypeRequestVO); + return R.ok(basepage); + } + + @PostMapping("/rankByPointerTypeDetail") + @ApiOperation("指标类别排名明细") + public Result>> rankByPointerTypeDetail(@RequestBody CrmRankByPointerTypeRequestVO crmRankByPointerTypeRequestVO) { + BasePage> basepage = crmSbzjjgService.rankByPointerTypeDetail(crmRankByPointerTypeRequestVO); + return R.ok(basepage); + } + + @PostMapping("/importExcelForSbzjjg") + @ApiOperation("根据Excel导入申报自检结果信息") + public Result> importExcelForSbzjjg(@RequestParam("file") MultipartFile file) throws IOException { + Map importResult = crmSbzjjgService.importExcelForSbzjjg(file); + return R.ok(importResult); + } + + @PostMapping("/exportExcelForSbzjjg") + @ApiOperation("导出成Excel") + public void importExcelForSbzjjg(@RequestBody CrmAccountQueryRequestVO crmAccountQueryRequestVO, HttpServletResponse response){ + crmSbzjjgService.exportExcelForSbzjjg(crmAccountQueryRequestVO, response); + } + + @PostMapping("/fuzzyQueryByKeyWord") + @ApiOperation("模糊查询税收管理员") + public Result> fuzzyQueryByKeyWord(@RequestParam("keyword") String keyword){ + return R.ok(crmSbzjjgService.fuzzyQueryByKeyWord(keyword)); + } +} diff --git a/crm/src/main/java/com/kakarote/crm/controller/XzqhController.java b/crm/src/main/java/com/kakarote/crm/controller/XzqhController.java index 3830b17..6ff5d64 100644 --- a/crm/src/main/java/com/kakarote/crm/controller/XzqhController.java +++ b/crm/src/main/java/com/kakarote/crm/controller/XzqhController.java @@ -41,9 +41,9 @@ public class XzqhController */ @GetMapping("/all") @ParamAspect - public Result> all(Xzqh xzqh) + public Result> all(Xzqh xzqh) { - List list = xzqhService.selectXzqhList(xzqh); + List list = xzqhService.getXzqhCjListByCode("360103"); return R.ok(list); } @@ -74,9 +74,9 @@ public class XzqhController * 获取行政区划详细信息 */ @GetMapping(value = "/{id}") - public Result getInfo(@PathVariable("id") String id) + public Result> getInfo(@PathVariable("id") String id) { - return R.ok(xzqhService.selectXzqhById(id)); + return R.ok(xzqhService.getXzqhCjListByCode(id)); } /** diff --git a/crm/src/main/java/com/kakarote/crm/controller/ZjzbdmVoController.java b/crm/src/main/java/com/kakarote/crm/controller/ZjzbdmVoController.java index 941347c..d63625f 100644 --- a/crm/src/main/java/com/kakarote/crm/controller/ZjzbdmVoController.java +++ b/crm/src/main/java/com/kakarote/crm/controller/ZjzbdmVoController.java @@ -22,7 +22,7 @@ import java.util.Objects; * @CreateTime: 2025/12/10 */ @RestController -@RequestMapping("/zjzbdmVo") +@RequestMapping("/crmZjzbdmVo") @Api(tags = "自检指标代码") @Slf4j public class ZjzbdmVoController { @@ -59,6 +59,14 @@ public class ZjzbdmVoController { return R.ok(zjzbdmVoIPage); } + @GetMapping("/list") + @ApiOperation("查询全部") + public Result> getZjzbdmVoList(){ + List list = zjzbdmVoService.lambdaQuery() + .select(ZjzbdmVo::getZbDm, ZjzbdmVo::getZbmc) + .list(); + return R.ok(list); + } @PostMapping("/insert") diff --git a/crm/src/main/java/com/kakarote/crm/entity/DTO/CrmQueryGsdjxxDTO.java b/crm/src/main/java/com/kakarote/crm/entity/DTO/CrmQueryGsdjxxDTO.java index 8ad7d18..9dba6ce 100644 --- a/crm/src/main/java/com/kakarote/crm/entity/DTO/CrmQueryGsdjxxDTO.java +++ b/crm/src/main/java/com/kakarote/crm/entity/DTO/CrmQueryGsdjxxDTO.java @@ -24,6 +24,9 @@ public class CrmQueryGsdjxxDTO implements Serializable { // 地址 private String xzqhMc; + // 页码 + private Integer page; + @Override public String toString() { return "{" + diff --git a/crm/src/main/java/com/kakarote/crm/entity/PO/CrmQyfxmx.java b/crm/src/main/java/com/kakarote/crm/entity/PO/CrmQyfxmx.java index 02e8dc4..0e345a4 100644 --- a/crm/src/main/java/com/kakarote/crm/entity/PO/CrmQyfxmx.java +++ b/crm/src/main/java/com/kakarote/crm/entity/PO/CrmQyfxmx.java @@ -37,6 +37,31 @@ public class CrmQyfxmx implements Serializable { /** * 风险指标代码 + * SBH02(疑似三无企业风险) + * SBQ01 (行业认定疑点监控) + * SBQ02(有增值税无所得税) + * SBQ03(有增值税无附加税) + * SBQ04(特定行业消费税及附加未认定) + * SBQ05(广告娱乐服务类征收主体是否认定文化事业建设费税费种) + * SBQ06(税费种认定是否漏项指标) + * SBQ07(对经营地址进行分析,对不含“乡”、“镇”、“号”、“数字”的企业进行取数) + * SBQ09(企业未认定残疾人就业保障金提醒) + * SBQ10(企业未认定工会经费) + * SBQ11(用人单位缴费工资基数不一致) + * SBQ12(新登记企业参保监控) + * SBQ13 (个体工商户不属于残保金缴费人) + * SBQ14 (工会经费认定级次错误) + * SBQ15 (文化事业建设费认定期限错误) + * SBQ16 (采矿业企业未认定水土保持补偿费) + * SBZ04 (重点群体违规享受优惠指标) + * SBZ06(工业、商贸企业取得服务费发票异常) + * SBZ07 (蔬菜、鲜活肉蛋禽等发票流通环节用于进项抵扣) + * SBZ08 (消费服务发票异常抵扣疑点筛查。用于消费的餐饮服务、居民日常服务、娱乐服务类专用发票违规勾选抵扣。) + * SBZ14 (印花税与财务报表申报不一致疑点筛查) + * SBZ21 (当月未申报明细监控) + * SBZ22 (当月未缴费明细监控) + * SBZ23 (30天内未申报缴费工资职工明细监控) + * 宜春风险 */ @TableField(typeHandler = SensitiveDataConverter.class, jdbcType = JdbcType.VARCHAR) private String fxzbDm; diff --git a/crm/src/main/java/com/kakarote/crm/entity/PO/CrmQyjbxx.java b/crm/src/main/java/com/kakarote/crm/entity/PO/CrmQyjbxx.java index 356033e..ee67997 100644 --- a/crm/src/main/java/com/kakarote/crm/entity/PO/CrmQyjbxx.java +++ b/crm/src/main/java/com/kakarote/crm/entity/PO/CrmQyjbxx.java @@ -37,7 +37,6 @@ public class CrmQyjbxx implements Serializable { /** * 企业登记序号 */ - @TableField(typeHandler = SensitiveDataConverter.class, jdbcType = JdbcType.VARCHAR) private String djxh; /** @@ -135,7 +134,7 @@ public class CrmQyjbxx implements Serializable { private String zgswskfjDm; /** - * shxydm + * 社会信用代码 */ @TableField(typeHandler = SensitiveDataConverter.class, jdbcType = JdbcType.VARCHAR) private String shxydm; diff --git a/crm/src/main/java/com/kakarote/crm/entity/PO/CrmSbzjjg.java b/crm/src/main/java/com/kakarote/crm/entity/PO/CrmSbzjjg.java new file mode 100644 index 0000000..8371484 --- /dev/null +++ b/crm/src/main/java/com/kakarote/crm/entity/PO/CrmSbzjjg.java @@ -0,0 +1,190 @@ +package com.kakarote.crm.entity.PO; + + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.kakarote.core.entity.PageEntity; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("wk_crm_sbzjjg") +@ApiModel(value="CrmSbzjjg对象", description="申报自检结果") +public class CrmSbzjjg implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "info_id", type = IdType.AUTO) + /** + * 申报自检结果ID primary key + */ + private Integer infoId; + + /** + * 指标id + */ + private Integer zbId; + + /** + * 纳税人名称 + */ + private String nsrmc; + + /** + * 统一社会信用代码(纳税人识别号) + */ + private String nsrsbh; + + /** + * 登记注册类型 + */ + private String djzclxmc; + + /** + * 登记注册类型代码 + */ + private String djzclxDm; + + /** + * 课征主体登记类型 + */ + private String kzztdjlxmc; + + /** + * 课征主体登记类型代码 + */ + private String kzztdjlxDm; + + /** + * 行业 + */ + private String hymc; + + /** + * 行业代码 + */ + private String hyDm; + + /** + * 主管税务机关 + */ + private String zgswjgmc; + + /** + * 主管税务机关代码 + */ + private String zgswjgDm; + + /** + * 主管税务所(分局) + */ + private String zgswjgkfjmc; + + /** + * 主管税务所(分局)代码 + */ + private String zgswjgkfjDm; + + /** + * 征收项目 + */ + private String zsxmmc; + + /** + * 征收项目代码 + */ + private String zsxmDm; + + /** + * 应征凭证类型 + */ + private String yzpzzl; + + /** + * 应征凭证类型代码 + */ + private String yzpzzlDm; + + /** + * 自检指标名称 + */ + private String zjzbmc; + + /** + * 税收管理员 + */ + private String ssgly; + + /** + * 税款所属期起 + */ + private String skssqq; + + /** + * 税款所属期止 + */ + private String skssqz; + + /** + * 首次申报日期 + */ + private String scsbrq; + + /** + * 最新申报日期 + */ + private String zxsbrq; + + /** + * 自检结果提示信息 + */ + private String zjjgts; + + /** + * 历史提示信息 + */ + private String lstsxx; + + /** + * 自检日期 + */ + private String zjrq; + + /** + * 自检出问题时申报应补(退)税额 + */ + private Double ybtse1; + + /** + * 问题已解决后的申报应补(退)税额 + */ + private Double ybtse2; + + /** + * 补正税款金额 + */ + private Double bzskje; + + /** + * 自检问题处理状态 + */ + private String zjztmc; + + /** + * 自检问题处理状态代码 + */ + private String zjztDm; + + /** + * 创建事件 + */ + private Date createTime; +} diff --git a/crm/src/main/java/com/kakarote/crm/entity/PO/CrmSwjg.java b/crm/src/main/java/com/kakarote/crm/entity/PO/CrmSwjg.java index e59ebc8..8aa5db3 100644 --- a/crm/src/main/java/com/kakarote/crm/entity/PO/CrmSwjg.java +++ b/crm/src/main/java/com/kakarote/crm/entity/PO/CrmSwjg.java @@ -23,29 +23,26 @@ public class CrmSwjg implements Serializable { private static final long serialVersionUID = 1L; - @TableId(value = "swjg_id", type = IdType.AUTO) /** - * 税务机关Id primary key - */ - private Integer swjgId; - - /** - * 税务机关名称 - */ - @TableField(typeHandler = SensitiveDataConverter.class, jdbcType = JdbcType.VARCHAR) - private String swjgmc; - - /** - * 税务机关代码 + * 税务机关代码 primary key */ private String swjgDm; + /** + * 税务机关名称 + */ + private String swjgmc; + /** * 税务机关简称 */ - @TableField(typeHandler = SensitiveDataConverter.class, jdbcType = JdbcType.VARCHAR) private String swjgjc; + /** + * 税务机关标志 + */ + private String swjgbz; + /** * 上级税务机关代码 */ @@ -54,60 +51,45 @@ public class CrmSwjg implements Serializable { /** * 机构级次代码 */ - @TableField(typeHandler = SensitiveDataConverter.class, jdbcType = JdbcType.VARCHAR) private String jgjcDm; /** * 行政区划数字代码 */ - @TableField(typeHandler = SensitiveDataConverter.class, jdbcType = JdbcType.VARCHAR) private String xzqhszDm; /** * 选用标志 */ - @TableField(typeHandler = SensitiveDataConverter.class, jdbcType = JdbcType.VARCHAR) private String xybz; /** * 有效标志 */ - @TableField(typeHandler = SensitiveDataConverter.class, jdbcType = JdbcType.VARCHAR) private String yxbz; + /** + * + */ + private String gdslxDm; + /** * 办税服务厅标志 */ - @TableField(typeHandler = SensitiveDataConverter.class, jdbcType = JdbcType.VARCHAR) private String bsfwtbz; /** - * 客户标志 + * 管户标志 */ - @TableField(typeHandler = SensitiveDataConverter.class, jdbcType = JdbcType.VARCHAR) private String ghbz; /** - * 创建时间 + * */ - @TableField(typeHandler = SensitiveDataConverter.class, jdbcType = JdbcType.VARCHAR) - private Date createTime; + private String xsxh; /** - * 创建人 + * 管户税务机关名称 */ - @TableField(typeHandler = SensitiveDataConverter.class, jdbcType = JdbcType.VARCHAR) - private String createBy; - - /** - * 更新时间 - */ - @TableField(typeHandler = SensitiveDataConverter.class, jdbcType = JdbcType.VARCHAR) - private Date updateTime; - - /** - * 更新人 - */ - @TableField(typeHandler = SensitiveDataConverter.class, jdbcType = JdbcType.VARCHAR) - private String updateBy; + private String ghswjgmc; } diff --git a/crm/src/main/java/com/kakarote/crm/entity/VO/CrmAccountQueryRequestVO.java b/crm/src/main/java/com/kakarote/crm/entity/VO/CrmAccountQueryRequestVO.java new file mode 100644 index 0000000..5bc529d --- /dev/null +++ b/crm/src/main/java/com/kakarote/crm/entity/VO/CrmAccountQueryRequestVO.java @@ -0,0 +1,52 @@ +package com.kakarote.crm.entity.VO; + + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.kakarote.core.entity.PageEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +@Data +@EqualsAndHashCode(callSuper = false) +public class CrmAccountQueryRequestVO extends PageEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + // 主管税务机关代码(必填) + private String zgswjg; + + // 主管税务所(分局)代码 + private String zgsws; + + // 征收项目 + private String zsxm; + + // 应征凭证类型 + private String yzpzlx; + + // 自检指标 + private String zjzbmc; + + // 税收管理员 + private String ssgly; + + // 申报日期起 + private String sbrqq; + + // 申报日期止 + private String sbrqz; + + // 自检日期起 + private String zjrqq; + + // 自检日期止 + private String zjrqz; + + // 类型(用于查询明细) + private String detailType; +} diff --git a/crm/src/main/java/com/kakarote/crm/entity/VO/CrmAccountQueryResponseVO.java b/crm/src/main/java/com/kakarote/crm/entity/VO/CrmAccountQueryResponseVO.java new file mode 100644 index 0000000..2305236 --- /dev/null +++ b/crm/src/main/java/com/kakarote/crm/entity/VO/CrmAccountQueryResponseVO.java @@ -0,0 +1,68 @@ +package com.kakarote.crm.entity.VO; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + + +@Data +public class CrmAccountQueryResponseVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 税务机关:1.主管税务局,2.主管税务所 + */ + private String swjg; + + /** + * 税务机关代码 + */ + private String swjgDm; + + /** + * 上级税务机关代码 + */ + private String sjSwjgDm; + + /** + * 申报自检户次 + */ + private Integer sbzjhc; + + /** + * 无需处理户次 + */ + private Integer wxclhc; + + /** + * 检测通过户次 + */ + private Integer jctghc; + + /** + * 未更正户次 + */ + private Integer wgzhc; + + /** + * 已更正(问题未解决)户次 + */ + private Integer ybtse1; + + /** + * 已更正(问题已解决)户次 + */ + private Integer ybtse2; + + /** + * 补正税款金额 + */ + private Double bzskje; + + /** + * 税务所的统计结果 + */ + List children; +} diff --git a/crm/src/main/java/com/kakarote/crm/entity/VO/CrmRankByEnterpriseRiskRequestVO.java b/crm/src/main/java/com/kakarote/crm/entity/VO/CrmRankByEnterpriseRiskRequestVO.java new file mode 100644 index 0000000..5c82b0c --- /dev/null +++ b/crm/src/main/java/com/kakarote/crm/entity/VO/CrmRankByEnterpriseRiskRequestVO.java @@ -0,0 +1,35 @@ +package com.kakarote.crm.entity.VO; + + +import com.kakarote.core.entity.PageEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +@Data +@EqualsAndHashCode(callSuper = false) +public class CrmRankByEnterpriseRiskRequestVO extends PageEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + // 主管税务机关 + private String zgswjg; + + // 自检日期起 + private String zjrqq; + + // 自检日期止 + private String zjrqz; + + // 网格员 + private String wgy; + + // 同时预警风险指标(查询前fxzbNnum个企业) + private Integer yjzb = 100; + + // 单位名称(纳税人名称),查询明细的查询条件 + private String dwmc; + + +} diff --git a/crm/src/main/java/com/kakarote/crm/entity/VO/CrmRankByPointerTypeRequestVO.java b/crm/src/main/java/com/kakarote/crm/entity/VO/CrmRankByPointerTypeRequestVO.java new file mode 100644 index 0000000..6c7b936 --- /dev/null +++ b/crm/src/main/java/com/kakarote/crm/entity/VO/CrmRankByPointerTypeRequestVO.java @@ -0,0 +1,35 @@ +package com.kakarote.crm.entity.VO; + +import com.kakarote.core.entity.PageEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +@Data +@EqualsAndHashCode(callSuper = false) +public class CrmRankByPointerTypeRequestVO extends PageEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + // 指标大类代码 + private String zbdl; + + // 指标小类代码 + private String zbxl; + + // 自检日期起 + private String zjrqq; + + // 自检日期止 + private String zjrqz; + + // 网格员 + private String wgy; + + // 同时预警风险指标(查询前X个企业) + private Integer yjzb = 100; + + // 自检指标,查询企业明细需要的条件 + private String zjzb; +} diff --git a/crm/src/main/java/com/kakarote/crm/entity/VO/ZjzbSwjgVo.java b/crm/src/main/java/com/kakarote/crm/entity/VO/ZjzbSwjgVo.java index a507fc8..a0940b1 100644 --- a/crm/src/main/java/com/kakarote/crm/entity/VO/ZjzbSwjgVo.java +++ b/crm/src/main/java/com/kakarote/crm/entity/VO/ZjzbSwjgVo.java @@ -17,7 +17,7 @@ import java.io.Serializable; */ @Setter @Getter -@TableName("tax_swjg") +@TableName("wk_crm_swjg") public class ZjzbSwjgVo implements Serializable { private static final long serialVersionUID = 1L; diff --git a/crm/src/main/java/com/kakarote/crm/mapper/CrmSbzjjgMapper.java b/crm/src/main/java/com/kakarote/crm/mapper/CrmSbzjjgMapper.java new file mode 100644 index 0000000..e9d0647 --- /dev/null +++ b/crm/src/main/java/com/kakarote/crm/mapper/CrmSbzjjgMapper.java @@ -0,0 +1,44 @@ +package com.kakarote.crm.mapper; + +import com.kakarote.core.servlet.BaseMapper; +import com.kakarote.crm.entity.PO.CrmSbzjjg; +import com.kakarote.crm.entity.VO.*; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CrmSbzjjgMapper extends BaseMapper { + + CrmAccountQueryResponseVO accountQuery(@Param("vo") CrmAccountQueryRequestVO crmAccountQueryRequestVO); + + List accountQueryDetail(@Param("vo") CrmAccountQueryRequestVO crmAccountQueryRequestVO, + @Param("offset") Integer offset, + @Param("limit") Integer limit); + + List> rankByEnterpriseRisk(@Param("vo") CrmRankByEnterpriseRiskRequestVO crmRankByEnterpriseRiskRequestVO, + @Param("offset") Integer offset, + @Param("limit") Integer limit); + + List rankByEnterpriseRiskDetail(@Param("vo") CrmRankByEnterpriseRiskRequestVO crmRankByEnterpriseRiskRequestVO, + @Param("offset") Integer offset, + @Param("limit") Integer limit); + + List> rankByPointerType(@Param("vo") CrmRankByPointerTypeRequestVO crmRankByPointerTypeRequestVO, + @Param("offset") Integer offset, + @Param("limit") Integer limit); + + List rankByPointerTypeDetail(@Param("vo") CrmRankByPointerTypeRequestVO crmRankByPointerTypeRequestVO, + @Param("offset") Integer offset, + @Param("limit") Integer limit + ); + + int batchInsert(@Param("batchEntities") List batchEntities); + + List fuzzyQueryByKeyWord(@Param("keyword") String keyword); + + List> batchCheckExists(@Param("batchEntities") List batchEntities); +} diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CallRecordMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CallRecordMapper.xml index ab1d669..1b6686d 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CallRecordMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CallRecordMapper.xml @@ -1,5 +1,5 @@ - + diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmActionRecordMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmActionRecordMapper.xml index dc0d079..f451301 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmActionRecordMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmActionRecordMapper.xml @@ -1,5 +1,5 @@ - + select count(*) from ${tableName} where ${conditions} diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmBackLogDealMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmBackLogDealMapper.xml index 3bdbf85..72cb4ac 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmBackLogDealMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmBackLogDealMapper.xml @@ -1,5 +1,5 @@ - + diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmBackLogMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmBackLogMapper.xml index 677613f..d24f92a 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmBackLogMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmBackLogMapper.xml @@ -1,5 +1,5 @@ - + select a.*,b.customer_id,b.customer_name,c.name as type_name,d.name as status_name, diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmBusinessProductMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmBusinessProductMapper.xml index 1d3640c..21f06a0 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmBusinessProductMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmBusinessProductMapper.xml @@ -1,5 +1,5 @@ - + diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmBusinessUserStarMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmBusinessUserStarMapper.xml index d4618b3..eee7457 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmBusinessUserStarMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmBusinessUserStarMapper.xml @@ -1,5 +1,5 @@ - + diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmContactsBusinessMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmContactsBusinessMapper.xml index 480434c..e7118b7 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmContactsBusinessMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmContactsBusinessMapper.xml @@ -1,5 +1,5 @@ - + diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmContactsDataMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmContactsDataMapper.xml index a4d1eca..2d76be4 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmContactsDataMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmContactsDataMapper.xml @@ -1,5 +1,5 @@ - + diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmContactsMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmContactsMapper.xml index 147e4db..349c0db 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmContactsMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmContactsMapper.xml @@ -1,5 +1,5 @@ - + select crt.*,ccc.customer_id,ccc.customer_name,ccb.business_name,a.name as contacts_name, diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmContractProductMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmContractProductMapper.xml index fbe3940..90a7b1c 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmContractProductMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmContractProductMapper.xml @@ -1,5 +1,5 @@ - + select a.*,(if(a.owner_user_id is null,1,0)) as is_pool, diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmCustomerPoolFieldSettingMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmCustomerPoolFieldSettingMapper.xml index bba14f8..c90f143 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmCustomerPoolFieldSettingMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmCustomerPoolFieldSettingMapper.xml @@ -1,5 +1,5 @@ - + diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmCustomerPoolFieldSortMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmCustomerPoolFieldSortMapper.xml index 9cf5c0a..fe07d52 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmCustomerPoolFieldSortMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmCustomerPoolFieldSortMapper.xml @@ -1,5 +1,5 @@ - + diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmCustomerPoolFieldStyleMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmCustomerPoolFieldStyleMapper.xml index 6e4261e..c3b4d4f 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmCustomerPoolFieldStyleMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmCustomerPoolFieldStyleMapper.xml @@ -1,5 +1,5 @@ - + diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmCustomerPoolMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmCustomerPoolMapper.xml index ad1d5e4..336cdd7 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmCustomerPoolMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmCustomerPoolMapper.xml @@ -1,5 +1,5 @@ - + select sael.examine_time as examineTime , diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmExamineMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmExamineMapper.xml index dc9f31b..19354f4 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmExamineMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmExamineMapper.xml @@ -1,5 +1,5 @@ - + SELECT saer.* ,sau.img,sau.realname from wk_crm_examine_record as saer diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmExamineStepMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmExamineStepMapper.xml index dda0d82..c049a3c 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmExamineStepMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmExamineStepMapper.xml @@ -1,5 +1,5 @@ - + diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmFieldConfigMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmFieldConfigMapper.xml index 60f8fb5..482d248 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmFieldConfigMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmFieldConfigMapper.xml @@ -1,5 +1,5 @@ - + diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmFieldMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmFieldMapper.xml index d3cef38..f97a598 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmFieldMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmFieldMapper.xml @@ -1,5 +1,5 @@ - + SELECT diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmInstrument.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmInstrument.xml index 485a663..5a5722d 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmInstrument.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmInstrument.xml @@ -1,5 +1,5 @@ - + @@ -43,9 +43,9 @@ and ccb.status_id = #{statusId} and ccb.is_end = 0 and ccb.owner_user_id in - + #{item} - + and DATE_FORMAT(create_time,#{sqlDateFormat}) between #{beginTime} and #{finalTime} @@ -63,9 +63,9 @@ AND owner_user_id in - + #{id} - + ) as businessCount, COUNT(*) as contractCount, IFNULL(SUM(a.money),0) as contractMoney, @@ -79,9 +79,9 @@ AND owner_user_id in - + #{id} - ) as contactsCount, + ) as contactsCount, (SELECT COUNT(*) FROM wk_crm_customer as c WHERE status != 3 and DATE_FORMAT(c.create_time,#{time.sqlDateFormat}) @@ -93,9 +93,9 @@ AND owner_user_id in - + #{id} - ) as customerCount, + ) as customerCount, (SELECT IFNULL(SUM(money),0) FROM wk_crm_receivables as c WHERE check_status in ('1','10') and DATE_FORMAT(c.return_time,#{time.sqlDateFormat}) @@ -107,9 +107,9 @@ AND owner_user_id in - + #{id} - ) as receivablesMoney, + ) as receivablesMoney, (SELECT COUNT(*) FROM wk_crm_activity as c WHERE c.status = 1 and type in (1,4) and DATE_FORMAT(c.create_time,#{time.sqlDateFormat}) @@ -121,9 +121,9 @@ AND create_user_id in - + #{id} - + ) as recordCount, (SELECT IFNULL(SUM(c.money),0) FROM wk_crm_business as c WHERE c.status =1 and DATE_FORMAT(c.create_time,#{time.sqlDateFormat}) @@ -136,9 +136,9 @@ AND owner_user_id in - + #{id} - ) as businessMoney + ) as businessMoney from wk_crm_contract as a WHERE a.check_status in ('1','10') and DATE_FORMAT(a.order_date,#{time.sqlDateFormat}) @@ -151,9 +151,9 @@ AND owner_user_id in - + #{id} - and check_status != 7 + and check_status != 7 select a.*,b.customer_name,c.num as contract_num,c.money as contract_money,d.realname as diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmLeadsDataMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmLeadsDataMapper.xml index d55a976..e06eeaf 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmLeadsDataMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmLeadsDataMapper.xml @@ -1,5 +1,5 @@ - + diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmLeadsMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmLeadsMapper.xml index 531f6ff..e0248d3 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmLeadsMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmLeadsMapper.xml @@ -1,5 +1,5 @@ - + select ccp.*, sc.name as category_name diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmProductUserMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmProductUserMapper.xml index 6eb7bbe..a2a3846 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmProductUserMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmProductUserMapper.xml @@ -1,5 +1,5 @@ - + diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmReceivablesDataMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmReceivablesDataMapper.xml index d233b37..8af8743 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmReceivablesDataMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmReceivablesDataMapper.xml @@ -1,5 +1,5 @@ - + diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmReceivablesMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmReceivablesMapper.xml index bc407c6..21c3da9 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmReceivablesMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmReceivablesMapper.xml @@ -1,5 +1,5 @@ - + SELECT diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmReturnVisitDataMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmReturnVisitDataMapper.xml index a7b9d47..d188d08 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmReturnVisitDataMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmReturnVisitDataMapper.xml @@ -1,5 +1,5 @@ - + diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmReturnVisitMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmReturnVisitMapper.xml index 46621d4..6cd5a7a 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmReturnVisitMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmReturnVisitMapper.xml @@ -1,5 +1,5 @@ - + diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmSbzjjgMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmSbzjjgMapper.xml new file mode 100644 index 0000000..87e7e6d --- /dev/null +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmSbzjjgMapper.xml @@ -0,0 +1,287 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO wk_crm_sbzjjg + (nsrmc, nsrsbh, djzclxmc, kzztdjlxmc, hymc, zgswjgmc, + zgswjgkfjmc, zsxmmc, yzpzzl, zjzbmc, ssgly, skssqq, + skssqz, scsbrq, zxsbrq, zjjgts, lstsxx, zjrq, ybtse1, + ybtse2, bzskje, zjztmc, zb_id, djzclx_dm, hy_dm, + zgswjg_dm, zgswjgkfj_dm, zsxm_dm, yzpzzl_dm, zjzt_dm,kzztdjlx_dm) + VALUES + + ( + #{item.nsrmc}, + #{item.nsrsbh}, + #{item.djzclxmc}, + #{item.kzztdjlxmc}, + #{item.hymc}, + #{item.zgswjgmc}, + #{item.zgswjgkfjmc}, + #{item.zsxmmc}, + #{item.yzpzzl}, + #{item.zjzbmc}, + #{item.ssgly}, + #{item.skssqq}, + #{item.skssqz}, + #{item.scsbrq}, + #{item.zxsbrq}, + #{item.zjjgts}, + #{item.lstsxx}, + #{item.zjrq}, + #{item.ybtse1}, + #{item.ybtse2}, + #{item.bzskje}, + #{item.zjztmc}, + #{item.zbId}, + #{item.djzclxDm}, + #{item.hyDm}, + #{item.zgswjgDm}, + #{item.zgswjgkfjDm}, + #{item.zsxmDm}, + #{item.yzpzzlDm}, + #{item.zjztDm}, + #{item.kzztdjlxDm} + ) + + + + + + + + diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmSceneDefaultMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmSceneDefaultMapper.xml index 0dd13ae..8366e8c 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmSceneDefaultMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmSceneDefaultMapper.xml @@ -1,5 +1,5 @@ - + diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmSceneMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmSceneMapper.xml index cc96c36..c7b8735 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmSceneMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmSceneMapper.xml @@ -1,5 +1,5 @@ - + diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmSwjgMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmSwjgMapper.xml index 074ce93..15d2fb9 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmSwjgMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmSwjgMapper.xml @@ -2,20 +2,19 @@ - - + + + - - - - + + diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/XzqhMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/XzqhMapper.xml index 8036240..7d041a3 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/XzqhMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/XzqhMapper.xml @@ -42,6 +42,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" swjg_dm, xzqhlx_dm, xzqh_dm, + xzqh_cj, yxj from xzqh diff --git a/crm/src/main/java/com/kakarote/crm/service/ICrmCustomerPoolService.java b/crm/src/main/java/com/kakarote/crm/service/ICrmCustomerPoolService.java index 04a7a43..6deee1d 100644 --- a/crm/src/main/java/com/kakarote/crm/service/ICrmCustomerPoolService.java +++ b/crm/src/main/java/com/kakarote/crm/service/ICrmCustomerPoolService.java @@ -9,7 +9,9 @@ import com.kakarote.crm.entity.PO.CrmCustomerPool; import com.kakarote.crm.entity.PO.CrmCustomerPoolFieldSort; import com.kakarote.crm.entity.VO.CrmCustomerPoolVO; import com.kakarote.crm.entity.VO.CrmModelFiledVO; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; import java.util.Map; @@ -134,4 +136,6 @@ public interface ICrmCustomerPoolService extends BaseService { public List queryPoolIdByUserId(); + void uploadExcelForZdfddwmd(MultipartFile file) throws IOException; + } diff --git a/crm/src/main/java/com/kakarote/crm/service/ICrmDjzclxService.java b/crm/src/main/java/com/kakarote/crm/service/ICrmDjzclxService.java index ec66430..95796e5 100644 --- a/crm/src/main/java/com/kakarote/crm/service/ICrmDjzclxService.java +++ b/crm/src/main/java/com/kakarote/crm/service/ICrmDjzclxService.java @@ -11,6 +11,11 @@ public interface ICrmDjzclxService extends BaseService { */ CrmDjzclx queryByDjzclxDm(String djzclxDm); + /** + * 通过登记注册类型名称获得对应的代码 + */ + String queryCodeByName(String name); + /** * 更新 */ diff --git a/crm/src/main/java/com/kakarote/crm/service/ICrmHyDmService.java b/crm/src/main/java/com/kakarote/crm/service/ICrmHyDmService.java index aaa05b5..ea2974e 100644 --- a/crm/src/main/java/com/kakarote/crm/service/ICrmHyDmService.java +++ b/crm/src/main/java/com/kakarote/crm/service/ICrmHyDmService.java @@ -12,4 +12,10 @@ public interface ICrmHyDmService extends BaseService { * @return CrmHyDm */ CrmHyDm queryByHyDm(String hyDm); + + + /** + * 根据行业名称查询代码 + */ + String queryCodeByName(String name); } diff --git a/crm/src/main/java/com/kakarote/crm/service/ICrmSbzjjgService.java b/crm/src/main/java/com/kakarote/crm/service/ICrmSbzjjgService.java new file mode 100644 index 0000000..7f118a4 --- /dev/null +++ b/crm/src/main/java/com/kakarote/crm/service/ICrmSbzjjgService.java @@ -0,0 +1,61 @@ +package com.kakarote.crm.service; + +import com.kakarote.core.entity.BasePage; +import com.kakarote.core.servlet.BaseService; +import com.kakarote.crm.entity.PO.CrmSbzjjg; +import com.kakarote.crm.entity.VO.*; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; +import java.util.Map; + + +public interface ICrmSbzjjgService extends BaseService { + + /** + * 户次查询 + */ + CrmAccountQueryResponseVO accountQuery(CrmAccountQueryRequestVO crmAccountQueryRequestVO); + + /** + * 户次查询明细 + */ + BasePage accountQueryDetail(CrmAccountQueryRequestVO crmAccountQueryRequestVO); + + + /** + * 企业风险排名 + */ + BasePage> rankByEnterpriseRisk(CrmRankByEnterpriseRiskRequestVO crmRankByEnterpriseRiskRequestVO); + + /** + * 企业风险排名明细 + */ + BasePage> rankByEnterpriseRiskDetail(CrmRankByEnterpriseRiskRequestVO crmRankByEnterpriseRiskRequestVO); + + /** + * 指标统计排名 + */ + BasePage> rankByPointerType(CrmRankByPointerTypeRequestVO crmRankByPointerTypeRequestVO); + + /** + * 指标统计排名明细 + */ + BasePage> rankByPointerTypeDetail(CrmRankByPointerTypeRequestVO crmRankByPointerTypeRequestVO); + + + /** + * 根据Excel导入申报自检结果信息 + */ + Map importExcelForSbzjjg(MultipartFile file); + + /** + * 导出数据为Excel + */ + void exportExcelForSbzjjg(CrmAccountQueryRequestVO crmAccountQueryRequestVO, HttpServletResponse response); + + List fuzzyQueryByKeyWord(String keyword); + +} diff --git a/crm/src/main/java/com/kakarote/crm/service/ICrmSwjgDmService.java b/crm/src/main/java/com/kakarote/crm/service/ICrmSwjgDmService.java index ecb5654..b1fe9c9 100644 --- a/crm/src/main/java/com/kakarote/crm/service/ICrmSwjgDmService.java +++ b/crm/src/main/java/com/kakarote/crm/service/ICrmSwjgDmService.java @@ -25,4 +25,10 @@ public interface ICrmSwjgDmService extends BaseService { */ int insertSwjgDm(CrmSwjgDm swjgDm); + + /** + * 通过税务机关名称查询代码 + */ + String queryCodeByName(String name); + } diff --git a/crm/src/main/java/com/kakarote/crm/service/IZjzbDzbzdszlVoService.java b/crm/src/main/java/com/kakarote/crm/service/IZjzbDzbzdszlVoService.java index bc9cf07..4ead3e0 100644 --- a/crm/src/main/java/com/kakarote/crm/service/IZjzbDzbzdszlVoService.java +++ b/crm/src/main/java/com/kakarote/crm/service/IZjzbDzbzdszlVoService.java @@ -9,4 +9,9 @@ import com.kakarote.crm.entity.VO.ZjzbDzbzdszlVo; * @CreateTime: 2025/12/11 */ public interface IZjzbDzbzdszlVoService extends BaseService { + + /** + * 根据应征凭证种类名称获取代码 + */ + String queryCodeByName(String name); } diff --git a/crm/src/main/java/com/kakarote/crm/service/IZjzbZsxmVoService.java b/crm/src/main/java/com/kakarote/crm/service/IZjzbZsxmVoService.java index dc8d20e..b692322 100644 --- a/crm/src/main/java/com/kakarote/crm/service/IZjzbZsxmVoService.java +++ b/crm/src/main/java/com/kakarote/crm/service/IZjzbZsxmVoService.java @@ -2,6 +2,8 @@ package com.kakarote.crm.service; import com.kakarote.core.servlet.BaseService; import com.kakarote.crm.entity.VO.ZjzbZsxmVo; +import com.kakarote.crm.mapper.ZjzbZsxmVoMapper; +import org.springframework.beans.factory.annotation.Autowired; /** * @description: 自检指标征收项目 @@ -9,4 +11,11 @@ import com.kakarote.crm.entity.VO.ZjzbZsxmVo; * @CreateTime: 2025/12/11 */ public interface IZjzbZsxmVoService extends BaseService { + + /** + * 通过征收项目名称获取相关代码 + * @param name + * @return + */ + String queryCodeByName(String name); } diff --git a/crm/src/main/java/com/kakarote/crm/service/IZjzbdmVoService.java b/crm/src/main/java/com/kakarote/crm/service/IZjzbdmVoService.java index be037ed..2695c64 100644 --- a/crm/src/main/java/com/kakarote/crm/service/IZjzbdmVoService.java +++ b/crm/src/main/java/com/kakarote/crm/service/IZjzbdmVoService.java @@ -24,4 +24,9 @@ public interface IZjzbdmVoService extends BaseService { Result insert(ZjzbdmVo entity); + /** + * 通过指标名称获取指标id + */ + Integer queryZbIdByName(String name); + } diff --git a/crm/src/main/java/com/kakarote/crm/service/impl/CrmBackLogServiceImpl.java b/crm/src/main/java/com/kakarote/crm/service/impl/CrmBackLogServiceImpl.java index 7a91a0c..60badba 100644 --- a/crm/src/main/java/com/kakarote/crm/service/impl/CrmBackLogServiceImpl.java +++ b/crm/src/main/java/com/kakarote/crm/service/impl/CrmBackLogServiceImpl.java @@ -29,6 +29,7 @@ import com.kakarote.crm.entity.BO.CrmSearchBO; import com.kakarote.crm.entity.PO.*; import com.kakarote.crm.mapper.CrmBackLogMapper; import com.kakarote.crm.service.*; +import com.kakarote.crm.util.JsonUtil; import lombok.extern.slf4j.Slf4j; import org.elasticsearch.script.Script; import org.elasticsearch.script.ScriptType; @@ -98,12 +99,15 @@ public class CrmBackLogServiceImpl implements ICrmBackLogService { Long userId = UserUtil.getUserId(); JSONObject kv = redis.get(CrmCacheKey.CRM_BACKLOG_NUM_CACHE_KEY + userId.toString()); if (kv != null) { + // 缓存命中则直接返回 return kv; } else { + // 无缓存则初始化空对象 kv = new JSONObject(); } log.info("kv:{}",kv); log.info("userId:{}",userId); + /* 定义系统中存在的权限模块(即“系统能做什么”),而非用户实际拥有的权限。*/ List authList = UserUtil.getUser().getAuthoritiesUrlList(); log.info("authList:{}",authList); authList.add("crm:customer:index"); @@ -114,6 +118,7 @@ public class CrmBackLogServiceImpl implements ICrmBackLogService { authList.add("crm:invoice:index"); Map paras = new HashMap<>(); paras.put("userId", userId); + // 统计今日线索数、今日客户数、今日商机数、待跟进客户数: if (authList.contains("crm:customer:index")) { log.info("customer:index"); Integer todayLeads = mapper.todayLeadsNum(paras); @@ -159,10 +164,12 @@ public class CrmBackLogServiceImpl implements ICrmBackLogService { kv.put("putInPoolRemind", customerIdSet.size()); } } + // 统计线索跟进与否的数量 if (authList.contains("crm:leads:index")) { Integer followLeads = mapper.followLeadsNum(paras); kv.put("followLeads", followLeads); } + // 统计到期合同数、待审核合同数、回访提醒数: if (authList.contains("crm:contract:index")) { AdminConfig adminConfig = adminService.queryFirstConfigByName("expiringContractDays").getData(); if (1 == adminConfig.getStatus()) { @@ -196,7 +203,7 @@ public class CrmBackLogServiceImpl implements ICrmBackLogService { kv.put("returnVisitRemind", returnVisitRemind); } } - + // 处理回款计划提醒及待审核回款单。 if (authList.contains("crm:receivables:index")) { Integer remindReceivablesPlan = mapper.remindReceivablesPlanNum(paras); List ids = examineService.queryCrmExamineIdList(2, 1).getData(); @@ -219,7 +226,7 @@ public class CrmBackLogServiceImpl implements ICrmBackLogService { kv.put("checkReceivables", checkReceivables); kv.put("remindReceivablesPlan", remindReceivablesPlan); } - + // 统计待审核发票数量。 if (authList.contains("crm:invoice:index")) { List ids = examineService.queryCrmExamineIdList(3, 1).getData(); Integer checkInvoice = null; @@ -568,6 +575,10 @@ public class CrmBackLogServiceImpl implements ICrmBackLogService { if (type == 1) { ids.addAll(backLogDealService.queryTypeId(7, 8, userId)); } + // 如果ids为空,可以设置为一个不可能存在的值,避免SQL语法错误 + if (ids.isEmpty()) { + ids.add("-1L"); + } BasePage basePage = mapper.remindReceivables(crmBackLogBO.parse(), type, ids, userId); basePage.getList().forEach(record -> { record.setCustomerName(crmCustomerService.getCustomerName(record.getCustomerId())); @@ -590,18 +601,23 @@ public class CrmBackLogServiceImpl implements ICrmBackLogService { CrmEnum crmEnum = CrmEnum.CONTRACT; ICrmContractService crmContractService = ApplicationContextHolder.getBean(ICrmContractService.class); if (type == 1) { + // 即将到期合同:结束时间在 [今天, 今天+预警天数] 范围内 crmBackLogBO.getData().add(new CrmSearchBO.Search("endTime", "date", CrmSearchBO.FieldSearchEnum.EGT, Collections.singletonList(DateUtil.formatDate(new Date())))); crmBackLogBO.getData().add(new CrmSearchBO.Search("endTime", "date", CrmSearchBO.FieldSearchEnum.ELT, Collections.singletonList(DateUtil.formatDate(new Date(System.currentTimeMillis() + Integer.valueOf(adminConfig.getValue()) * 86400000L))))); } else if (type == 2) { + // 已过期合同:结束时间早于今天 crmBackLogBO.getData().add(new CrmSearchBO.Search("endTime", "date", CrmSearchBO.FieldSearchEnum.LT, Collections.singletonList(DateUtil.formatDate(new Date())))); } else { throw new CrmException(SystemCodeEnum.SYSTEM_NO_VALID); } - crmBackLogBO.getData().add(new CrmSearchBO.Search("ownerUserId", "text", CrmSearchBO.FieldSearchEnum.IS, Collections.singletonList(UserUtil.getUserId().toString()))); - crmBackLogBO.getData().add(new CrmSearchBO.Search("checkStatus", "text", CrmSearchBO.FieldSearchEnum.IS, Collections.singletonList("1"))); + // 必须条件:负责人为当前用户 + 合同审核状态为“通过”(checkStatus=1) + crmBackLogBO.getData().add(new CrmSearchBO.Search("ownerUserId", "keyword", CrmSearchBO.FieldSearchEnum.IS, Collections.singletonList(UserUtil.getUserId().toString()))); + crmBackLogBO.getData().add(new CrmSearchBO.Search("checkStatus", "keyword", CrmSearchBO.FieldSearchEnum.IS, Collections.singletonList("1"))); if (type == 1) { + // 过滤已处理的待办事项 List dealIdList = backLogDealService.queryTypeId(8, crmEnum.getType(), UserUtil.getUserId()); crmBackLogBO.getData().add(new CrmSearchBO.Search("_id", "text", CrmSearchBO.FieldSearchEnum.IS_NOT, dealIdList)); + log.info("Excluded IDs: {}", dealIdList); } CrmSearchBO searchBO = new CrmSearchBO(); searchBO.setLabel(crmEnum.getType()); diff --git a/crm/src/main/java/com/kakarote/crm/service/impl/CrmContractServiceImpl.java b/crm/src/main/java/com/kakarote/crm/service/impl/CrmContractServiceImpl.java index e33f129..bc5b2ec 100644 --- a/crm/src/main/java/com/kakarote/crm/service/impl/CrmContractServiceImpl.java +++ b/crm/src/main/java/com/kakarote/crm/service/impl/CrmContractServiceImpl.java @@ -50,6 +50,7 @@ import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.index.query.BoolQueryBuilder; +import org.elasticsearch.index.query.IdsQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.Aggregations; @@ -267,6 +268,7 @@ public class CrmContractServiceImpl extends BaseServiceImpl @@ -99,6 +105,21 @@ public class CrmCustomerPoolServiceImpl extends BaseServiceImpl queryDefaultField() { return ApplicationContextHolder.getBean(CrmCustomerServiceImpl.class).queryDefaultField(); } + + /** + * 构建查询条件 + * @param qyjbxx + * @return + */ + private CrmBusinessSaveBO getCrmBusinessSaveBO(CrmQyjbxx qyjbxx) { + CrmBusinessSaveBO crmModel = new CrmBusinessSaveBO(); + Map entity = new HashMap<>(); + entity.put("customerName", qyjbxx.getNsrmc()); + entity.put("telephone", ""); + entity.put("mobile", ""); + entity.put("email", ""); + entity.put("website", ""); + entity.put("remark", ""); + entity.put("address", ""); + crmModel.setEntity(entity); + List list = new ArrayList<>(); + List customerFields = crmFieldService.list(CrmEnum.CUSTOMER.getType(), true); + customerFields.forEach(crmField -> { + CrmModelFiledVO field = new CrmModelFiledVO(); + field.setFieldId(crmField.getFieldId()); + field.setFieldName(crmField.getFieldName()); + field.setName(crmField.getName()); + field.setFieldType(crmField.getFieldType()); + field.setType(crmField.getType()); + if ("金财云联客户".equals(crmField.getName())){ + field.setValue("否"); + }else if ("客户详细地址".equals(crmField.getName())){ + field.setValue(qyjbxx.getScjydz()); + }else if ("客户名称".equals(crmField.getName())){ + field.setValue(qyjbxx.getNsrmc()); + }else if ("客户所在地区".equals(crmField.getName())){ + String xzqhName = xzqhService.getXzqhName(qyjbxx.getScjydzxzqhszDm()); + field.setValue(xzqhName); + }else if("登记注册类型".equals(crmField.getName())){ + CrmDjzclx crmDjzclx = crmDjzclxService.queryByDjzclxDm(qyjbxx.getDjzclxDm()); + field.setValue(crmDjzclx.getDjzclxmc()); + }else { + field.setValue(""); + } + list.add(field); + }); + crmModel.setField(list); + + return crmModel; + } + + /** + * @param customerId 客户id + * @param name 联系人名称 + * @param position 联系人职位 + * @param mobile 联系人电话 + * @param tele 联系人号码 + * @param email 联系人邮箱 + */ + private void addContacts(Integer customerId, String name, String position, String mobile, String tele, String email) { + CrmContactsSaveBO crmModel = new CrmContactsSaveBO(); + Map entity = new LinkedHashMap<>(); + entity.put("customerId", customerId); + entity.put("name", name); + entity.put("post", position); + entity.put("mobile", mobile); + entity.put("telephone", tele); + entity.put("email", email); + entity.put("address", ""); + entity.put("nextTime", ""); + entity.put("remark", ""); + List field = new ArrayList<>(); + CrmModelFiledVO crmModelFiled = new CrmModelFiledVO(); + crmModelFiled.setFieldId(1101853); + crmModelFiled.setFieldName("policymakers"); + crmModelFiled.setName("是否关键决策人"); + crmModelFiled.setType(3); + crmModelFiled.setFieldType(2); + crmModelFiled.setSetting(new ArrayList<>()); + field.add(crmModelFiled); + + CrmModelFiledVO crmModelFiled2 = new CrmModelFiledVO(); + crmModelFiled2.setFieldId(1101857); + crmModelFiled2.setFieldName("sex"); + crmModelFiled2.setName("性别"); + crmModelFiled2.setType(3); + crmModelFiled2.setFieldType(2); + crmModelFiled2.setSetting(new ArrayList<>()); + field.add(crmModelFiled2); + + crmModel.setEntity(entity); + crmModel.setField(field); + + contactsService.addOrUpdate(crmModel, false); + } + + /** + * 通过企业基本信息添加客户 + */ + private void addCustomerByQyjbxx(CrmQyjbxx qyjbxx) { + CrmBusinessSaveBO crmModel = getCrmBusinessSaveBO(qyjbxx); + //添加客户数据 + crmOpenApiService.crmAddCustomer(crmModel, "重点辅导单位名单"); + } + + /** + * 根据导入的Excel,获取重点辅导单位名单公海 + * @param file + */ + @Override + public void uploadExcelForZdfddwmd(MultipartFile file) throws IOException { + List> excelData = parseExcelToMap(file); + + for (int i = 0; i < excelData.size(); i++) { + HashMap row = excelData.get(i); + for (Map.Entry entry : row.entrySet()) { + // System.out.println(entry.getKey() + ": " + entry.getValue()); + if ("登记序号".equals(entry.getKey())) { + CrmQyjbxx qyjbxx = crmQyjbxxService.lambdaQuery().eq(CrmQyjbxx::getDjxh, entry.getValue()).one(); + if (qyjbxx != null) { + CrmCustomer customer = crmCustomerService.lambdaQuery().eq(CrmCustomer::getCustomerName, qyjbxx.getNsrmc()).one(); + // 如果customer不存在,则新增 + if (customer == null) { + addCustomerByQyjbxx(qyjbxx); + } + // 如果customer的status为3,表示已被删除,则更新数据 + if (customer != null && customer.getStatus().equals(3)) { + //加工crmModel + CrmBusinessSaveBO crmModel = getCrmBusinessSaveBO(qyjbxx); + Map entity = crmModel.getEntity(); + entity.put("status", 1); + entity.put("customerId", customer.getCustomerId()); + crmModel.setEntity(entity); + //放入es,并更新数据库 + Map stringObjectMap = crmCustomerService.addOrUpdate(crmModel, false, null); + Integer customerId = Integer.parseInt(stringObjectMap.get("customerId").toString()); + //转入公海 + CrmCustomerPoolBO poolBO = new CrmCustomerPoolBO(); + poolBO.setIds(Arrays.asList(customerId)); + poolBO.setPoolId(ZDFDDWMDPOOL.getId()); + crmCustomerService.updateCustomerByIds(poolBO); + } + } + } + } + // System.out.println("------"); // 每行数据后打印分隔线,以便区分不同行 + } + } + + /** + * 解析Excel文件并将其内容转换为List> + * @param file 上传的Excel文件 + * @return 包含Excel数据的Map列表 + */ + private List> parseExcelToMap(MultipartFile file) throws IOException { + List> result = new ArrayList<>(); + List headers = new ArrayList<>(); + // 使用Apache POI解析Excel + Workbook workbook = WorkbookFactory.create(file.getInputStream()); + Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表 + // 遍历行 + for (Row row : sheet) { + // 第一行作为表头 + if (row.getRowNum() == 0) { + for (Cell cell : row) { + headers.add(getCellValueAsString(cell)); + } + continue; + } + // 数据行:创建HashMap存储当前行数据 + HashMap rowMap = new HashMap<>(); + for (int i = 0; i < headers.size(); i++) { + Cell cell = row.getCell(i, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK); + rowMap.put(headers.get(i), getCellValueAsString(cell)); + } + result.add(rowMap); + } + workbook.close(); + return result; + } + + private String getCellValueAsString(Cell cell) { + if (cell == null) { + return ""; + } + switch (cell.getCellType()) { + case STRING: + return cell.getStringCellValue().trim(); + case NUMERIC: + if (org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(cell)) { + return cell.getDateCellValue().toString(); + } else { + // 避免科学计数法,转为字符串 + return String.valueOf(cell.getNumericCellValue()); + } + case BOOLEAN: + return String.valueOf(cell.getBooleanCellValue()); + case FORMULA: + return cell.getCellFormula(); + default: + return ""; + } + } } diff --git a/crm/src/main/java/com/kakarote/crm/service/impl/CrmCustomerServiceImpl.java b/crm/src/main/java/com/kakarote/crm/service/impl/CrmCustomerServiceImpl.java index a0f7f97..a6a5ecd 100644 --- a/crm/src/main/java/com/kakarote/crm/service/impl/CrmCustomerServiceImpl.java +++ b/crm/src/main/java/com/kakarote/crm/service/impl/CrmCustomerServiceImpl.java @@ -154,6 +154,9 @@ public class CrmCustomerServiceImpl extends BaseServiceImpl(djzclxMapper) + .select(CrmDjzclx::getDjzclxDm) + .eq(CrmDjzclx::getDjzclxmc, name) + .last("limit 1") + .one() + .getDjzclxDm(); + } } diff --git a/crm/src/main/java/com/kakarote/crm/service/impl/CrmGsdjxxServiceImpl.java b/crm/src/main/java/com/kakarote/crm/service/impl/CrmGsdjxxServiceImpl.java index 5278786..768b0bc 100644 --- a/crm/src/main/java/com/kakarote/crm/service/impl/CrmGsdjxxServiceImpl.java +++ b/crm/src/main/java/com/kakarote/crm/service/impl/CrmGsdjxxServiceImpl.java @@ -6,30 +6,34 @@ import cn.hutool.log.LogFactory; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.fasterxml.jackson.core.type.TypeReference; -import com.kakarote.core.common.Result; import com.kakarote.core.entity.BasePage; import com.kakarote.core.servlet.BaseServiceImpl; - +import com.kakarote.crm.constant.CrmEnum; import com.kakarote.crm.constant.CrmTaxServiceIdEnum; +import com.kakarote.crm.entity.BO.CrmBusinessSaveBO; +import com.kakarote.crm.entity.BO.CrmContactsSaveBO; +import com.kakarote.crm.entity.BO.CrmCustomerPoolBO; import com.kakarote.crm.entity.BO.CrmSearchBO; import com.kakarote.crm.entity.DTO.CrmQueryGsdjxxDTO; import com.kakarote.crm.entity.DTO.CrmWebServiceResponseDTO; +import com.kakarote.crm.entity.PO.CrmCustomer; +import com.kakarote.crm.entity.PO.CrmDjzclx; +import com.kakarote.crm.entity.PO.CrmField; import com.kakarote.crm.entity.PO.CrmGsdjxx; +import com.kakarote.crm.entity.VO.CrmModelFiledVO; import com.kakarote.crm.entity.VO.CrmQueryGsdjxxVO; +import com.kakarote.crm.mapper.CrmCustomerMapper; import com.kakarote.crm.mapper.CrmGsdjxxMapper; -import com.kakarote.crm.service.ICrmCustomerPoolService; -import com.kakarote.crm.service.ICrmCustomerService; -import com.kakarote.crm.service.ICrmGsdjxxService; -import com.kakarote.crm.service.IXzqhService; +import com.kakarote.crm.service.*; import com.kakarote.crm.util.JsonUtil; import com.kakarote.crm.util.WebServiceHandlerUtil; import com.kakarote.crm.webService.config.TaxWebServiceConfig; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - import java.util.*; - import java.util.stream.Collectors; +import static com.kakarote.crm.constant.CrmPoolEnum.*; + @Service public class CrmGsdjxxServiceImpl extends BaseServiceImpl implements ICrmGsdjxxService { @@ -37,6 +41,10 @@ public class CrmGsdjxxServiceImpl extends BaseServiceImpl queryByMonthAndXzqhDm(CrmQueryGsdjxxDTO crmQueryGsdjxxDTO) throws Exception { //处理请求参数 @@ -95,11 +112,9 @@ public class CrmGsdjxxServiceImpl extends BaseServiceImpl processAndSaveData(List crmGsdjxxList,CrmQueryGsdjxxDTO crmQueryGsdjxxDTO) { log.info(crmGsdjxxList.toString()); + // 如果从税局拉来的数据是新的,就放在这个集合 List crmGsdjxxesNew = new ArrayList<>(); + // 否则放进这个集合 + List crmGsdjxxesExited = new ArrayList<>(); + + // 处理税局数据 crmGsdjxxList.forEach(crmGsdjxx -> { CrmGsdjxx one = new LambdaQueryChainWrapper<>(crmGsdjxxMapper) .eq(CrmGsdjxx::getNsrmc, crmGsdjxx.getNsrmc()) .last("limit 1").one(); if (one == null) { + /* 处理新数据 */ crmGsdjxx.setYf(crmQueryGsdjxxDTO.getYf()); crmGsdjxx.setXzqhDm(crmQueryGsdjxxDTO.getXzqhDm()); crmGsdjxx.setDz(crmQueryGsdjxxDTO.getXzqhMc()); + // 插入新数据集合 crmGsdjxxesNew.add(crmGsdjxx); + // 插入es以及客户表 customerService.addCustomerByGsdjxx(crmGsdjxx); + } else { + crmGsdjxxesExited.add(crmGsdjxx); } }); - new Thread(() -> { - int inserted = crmGsdjxxMapper.insertBatch(crmGsdjxxesNew); - log.info("成功插入了" + inserted + "条数据"); - }).start(); + if (!crmGsdjxxesNew.isEmpty()) { + new Thread(() -> { + int inserted = crmGsdjxxMapper.insertBatch(crmGsdjxxesNew); + log.info("成功插入了" + inserted + "条数据"); + }).start(); + } + // 处理数据库中已存在,但又被逻辑删除的数据 + if (!crmGsdjxxesExited.isEmpty()) { + crmGsdjxxesExited.forEach(crmGsdjxx -> { + CrmCustomer one = new LambdaQueryChainWrapper<>(crmCustomerMapper) + .eq(CrmCustomer::getCustomerName, crmGsdjxx.getNsrmc()) + .last("limit 1") + .one(); + // 如果这条数据处于逻辑删除状态时,执行更新操作 + if (one.getStatus().equals(3)) { + CrmBusinessSaveBO crmModel = getCrmBusinessSaveBO(crmGsdjxx); + //放入es,并更新数据库 + Map stringObjectMap = customerService.addOrUpdate(crmModel,false,null); + Integer customerId = Integer.parseInt(stringObjectMap.get("customerId").toString()); + //添加联系人数据;税局信息和法定代表人 + if (StrUtil.isNotEmpty(crmGsdjxx.getFddbrxm()) && StrUtil.isNotEmpty(crmGsdjxx.getFddbryddh())) { + addContacts(customerId, crmGsdjxx.getFddbrxm(), "法定代表人", crmGsdjxx.getFddbryddh(), crmGsdjxx.getFddbrgddh(), ""); + } + // 财务负责人 + if (StrUtil.isNotEmpty(crmGsdjxx.getCwfzrxm()) && StrUtil.isNotEmpty(crmGsdjxx.getCwfzryddh())) { + addContacts(customerId, crmGsdjxx.getCwfzrxm(), "财务负责人", crmGsdjxx.getCwfzryddh(), crmGsdjxx.getCwfzrgddh(), ""); + } + //转入公海 + CrmCustomerPoolBO poolBO = new CrmCustomerPoolBO(); + poolBO.setIds(Arrays.asList(customerId)); + poolBO.setPoolId(GSXKYDJXX.getId()); + customerService.updateCustomerByIds(poolBO); + } + }); + } return convertListToVO(crmGsdjxxesNew); } + /** + * @param customerId 客户id + * @param name 联系人名称 + * @param position 联系人职位 + * @param mobile 联系人电话 + * @param tele 联系人号码 + * @param email 联系人邮箱 + */ + private void addContacts(Integer customerId, String name, String position, String mobile, String tele, String email) { + CrmContactsSaveBO crmModel = new CrmContactsSaveBO(); + Map entity = new LinkedHashMap<>(); + entity.put("customerId", customerId); + entity.put("name", name); + entity.put("post", position); + entity.put("mobile", mobile); + entity.put("telephone", tele); + entity.put("email", email); + entity.put("address", ""); + entity.put("nextTime", ""); + entity.put("remark", ""); + List field = new ArrayList<>(); + CrmModelFiledVO crmModelFiled = new CrmModelFiledVO(); + crmModelFiled.setFieldId(1101853); + crmModelFiled.setFieldName("policymakers"); + crmModelFiled.setName("是否关键决策人"); + crmModelFiled.setType(3); + crmModelFiled.setFieldType(2); + crmModelFiled.setSetting(new ArrayList<>()); + field.add(crmModelFiled); + + CrmModelFiledVO crmModelFiled2 = new CrmModelFiledVO(); + crmModelFiled2.setFieldId(1101857); + crmModelFiled2.setFieldName("sex"); + crmModelFiled2.setName("性别"); + crmModelFiled2.setType(3); + crmModelFiled2.setFieldType(2); + crmModelFiled2.setSetting(new ArrayList<>()); + field.add(crmModelFiled2); + + crmModel.setEntity(entity); + crmModel.setField(field); + contactsService.addOrUpdate(crmModel, false); + } + + // 组装CrmBusinessSaveBO,处理已经存在,但被逻辑删除的数据 + private CrmBusinessSaveBO getCrmBusinessSaveBO(CrmGsdjxx gsdjxx) { + CrmBusinessSaveBO crmModel = new CrmBusinessSaveBO(); + Map entity = new HashMap<>(); + entity.put("customerName", gsdjxx.getNsrmc()); + entity.put("telephone", ""); + entity.put("mobile", ""); + entity.put("email", ""); + entity.put("website", ""); + entity.put("remark", ""); + entity.put("address", ""); + // 修改客户状态,这里的初始值null,数据库中的值为3,代表已经被删除,我们将其设置为1,代表正常 + entity.put("status", 1); + // 设置customerId + CrmCustomer customer = new LambdaQueryChainWrapper<>(crmCustomerMapper) + .eq(CrmCustomer::getCustomerName, gsdjxx.getNsrmc()) + .last("limit 1") + .one(); + entity.put("customerId", customer.getCustomerId()); + crmModel.setEntity(entity); + // 处理拓展字段 + List list = new ArrayList<>(); + List customerFields = crmFieldService.list(CrmEnum.CUSTOMER.getType(), true); + customerFields.forEach(crmField -> { + CrmModelFiledVO field = new CrmModelFiledVO(); + field.setFieldId(crmField.getFieldId()); + field.setFieldName(crmField.getFieldName()); + field.setName(crmField.getName()); + field.setFieldType(crmField.getFieldType()); + field.setType(crmField.getType()); + if ("金财云联客户".equals(crmField.getName())){ + field.setValue("否"); + }else if ("客户详细地址".equals(crmField.getName())){ + field.setValue(gsdjxx.getScjydz()); + }else if ("客户所在地区".equals(crmField.getName())){ + String xzqhName = xzqhService.getXzqhName(gsdjxx.getScjydzxzqhszDm()); + field.setValue(xzqhName); + }else if ("开业日期".equals(crmField.getName())){ + field.setValue(gsdjxx.getKyrq()); + }else if ("客户名称".equals(crmField.getName())){ + field.setValue(gsdjxx.getNsrmc()); + }else if("登记注册类型".equals(crmField.getName())){ + CrmDjzclx crmDjzclx = crmDjzclxService.queryByDjzclxDm(gsdjxx.getDjzclxDm()); + field.setValue(crmDjzclx.getDjzclxmc()); + }else { + field.setValue(""); + } + list.add(field); + }); + crmModel.setField(list); + return crmModel; + } + + @Override public BasePage> queryGsdjxxByDate(CrmQueryGsdjxxDTO crmQueryGsdjxxDTO) { - - //通过行政区划代码回去 List xzqhMc = xzqhService.getXzqhCjListByCode(crmQueryGsdjxxDTO.getXzqhDm()); List searchList = new ArrayList<>(); @@ -187,13 +339,12 @@ public class CrmGsdjxxServiceImpl extends BaseServiceImpl> basePage = crmCustomerPoolService.queryPageList(searchBO, false); diff --git a/crm/src/main/java/com/kakarote/crm/service/impl/CrmHyDmServiceImpl.java b/crm/src/main/java/com/kakarote/crm/service/impl/CrmHyDmServiceImpl.java index fc339fc..de8883d 100644 --- a/crm/src/main/java/com/kakarote/crm/service/impl/CrmHyDmServiceImpl.java +++ b/crm/src/main/java/com/kakarote/crm/service/impl/CrmHyDmServiceImpl.java @@ -1,6 +1,7 @@ package com.kakarote.crm.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.kakarote.core.servlet.BaseServiceImpl; import com.kakarote.crm.entity.PO.CrmHyDm; import com.kakarote.crm.mapper.CrmHyDmMapper; @@ -20,4 +21,15 @@ public class CrmHyDmServiceImpl extends BaseServiceImpl queryWrapper.eq(CrmHyDm::getHyDm, hyDm); return crmHyDmMapper.selectOne(queryWrapper); } + + @Override + public String queryCodeByName(String name) { + + return new LambdaQueryChainWrapper<>(crmHyDmMapper) + .select(CrmHyDm::getHyDm) + .eq(CrmHyDm::getHymc, name) + .last("limit 1") + .one() + .getHyDm(); + } } diff --git a/crm/src/main/java/com/kakarote/crm/service/impl/CrmOpenApiServiceImpl.java b/crm/src/main/java/com/kakarote/crm/service/impl/CrmOpenApiServiceImpl.java index 3dbed2c..e1fab7f 100644 --- a/crm/src/main/java/com/kakarote/crm/service/impl/CrmOpenApiServiceImpl.java +++ b/crm/src/main/java/com/kakarote/crm/service/impl/CrmOpenApiServiceImpl.java @@ -231,6 +231,8 @@ public class CrmOpenApiServiceImpl implements ICrmOpenApiService { poolBO.setPoolId(GSMGWZKH.getId()); }else if ("工商新开业登记信息".equals(source)){ poolBO.setPoolId(GSXKYDJXX.getId()); + }else if ("重点辅导单位名单".equals(source)){ + poolBO.setPoolId(ZDFDDWMDPOOL.getId()); } customerService.updateCustomerByIds(poolBO); return customerId; diff --git a/crm/src/main/java/com/kakarote/crm/service/impl/CrmQyfxjcjgServiceImpl.java b/crm/src/main/java/com/kakarote/crm/service/impl/CrmQyfxjcjgServiceImpl.java index 2ccf796..6c54a92 100644 --- a/crm/src/main/java/com/kakarote/crm/service/impl/CrmQyfxjcjgServiceImpl.java +++ b/crm/src/main/java/com/kakarote/crm/service/impl/CrmQyfxjcjgServiceImpl.java @@ -130,7 +130,7 @@ public class CrmQyfxjcjgServiceImpl extends BaseServiceImpl implements ICrmSbzjjgService { + + @Autowired + private CrmSbzjjgMapper crmSbzjjgMapper; + + @Autowired + private CrmSwjgDmMapper crmSwjgDmMapper; + + @Autowired + private CrmSwjgMapper crmSwjgMapper; + + @Autowired + private CrmQyjbxxMapper crmQyjbxxMapper; + + @Autowired + private ICrmDjzclxService crmDjzclxService; + + @Autowired + private ICrmHyDmService crmHyDmService; + + @Autowired + private ICrmSwjgDmService crmSwjgDmService; + + @Autowired + private IZjzbDzbzdszlVoService zjzbDzbzdszlVoService; + + @Autowired + private IZjzbZsxmVoService zjzbZsxmVoService; + + @Autowired + private IZjzbdmVoService zjzbdmVoService; + + @Override + public CrmAccountQueryResponseVO accountQuery(CrmAccountQueryRequestVO crmAccountQueryRequestVO) { + CrmAccountQueryResponseVO parent = crmSbzjjgMapper.accountQuery(crmAccountQueryRequestVO); + // 如果传入了下级税务机关 + if (crmAccountQueryRequestVO.getZgsws() != null && !crmAccountQueryRequestVO.getZgsws().isEmpty()) { + CrmSwjg swjg = new LambdaQueryChainWrapper<>(crmSwjgMapper) + .eq(CrmSwjg::getSwjgDm, crmAccountQueryRequestVO.getZgsws()) + .last("limit 1") + .one(); + parent.setSwjg(swjg.getSwjgmc()); + parent.setSwjgDm(swjg.getSwjgDm()); + parent.setSjSwjgDm(swjg.getSjswjgDm()); + return parent; + } else { + // 获取主管税务机关名称 + String name = new LambdaQueryChainWrapper<>(crmSwjgDmMapper) + .eq(CrmSwjgDm::getSwjgDm, crmAccountQueryRequestVO.getZgswjg()) + .last("limit 1") + .one().getSwjgMc(); + // 设置主管税务机关 + parent.setSwjg(name); + // 设置主管税务机关代码 + parent.setSwjgDm(crmAccountQueryRequestVO.getZgswjg()); + // 获取下级税务机关信息 + List swjgs = new LambdaQueryChainWrapper<>(crmSwjgMapper) + .eq(CrmSwjg::getSjswjgDm, crmAccountQueryRequestVO.getZgswjg()) + .list(); + // 对下级税务机关进行户次查询 + swjgs.forEach(swjg -> { + crmAccountQueryRequestVO.setZgsws(swjg.getSwjgDm()); + CrmAccountQueryResponseVO child = crmSbzjjgMapper.accountQuery(crmAccountQueryRequestVO); + if (child != null && child.getSbzjhc() != 0) { + child.setSwjg(swjg.getSwjgmc()); + child.setSwjgDm(swjg.getSwjgDm()); + child.setSjSwjgDm(swjg.getSjswjgDm()); + // 确保children列表不为null + if (parent.getChildren() == null) { + parent.setChildren(new ArrayList<>()); // 初始化列表 + } + parent.getChildren().add(child); + } + }); + return parent; + } + } + + @Override + public BasePage accountQueryDetail(CrmAccountQueryRequestVO crmAccountQueryRequestVO) { + + Integer offset = (crmAccountQueryRequestVO.getPage() - 1) * crmAccountQueryRequestVO.getLimit(); + crmAccountQueryRequestVO.setOffset(offset); + + List crmSbzjjgs = crmSbzjjgMapper.accountQueryDetail(crmAccountQueryRequestVO,null,null); + + List pageList = crmSbzjjgMapper.accountQueryDetail(crmAccountQueryRequestVO, + offset, + crmAccountQueryRequestVO.getLimit()); + + BasePage basePage = new BasePage<>(); + + for (CrmSbzjjg crmSbzjjg : pageList) { + basePage.getList().add(crmSbzjjg); + } + basePage.setTotal(crmSbzjjgs.size()); + basePage.setCurrent(crmAccountQueryRequestVO.getPage()); + basePage.setSize(crmAccountQueryRequestVO.getLimit()); + + return basePage; + } + + @Override + public BasePage> rankByEnterpriseRisk(CrmRankByEnterpriseRiskRequestVO crmRankByEnterpriseRiskRequestVO) { + + List> maps = crmSbzjjgMapper.rankByEnterpriseRisk(crmRankByEnterpriseRiskRequestVO, + null, + null); + + Integer offset = (crmRankByEnterpriseRiskRequestVO.getPage() - 1) * crmRankByEnterpriseRiskRequestVO.getLimit(); + crmRankByEnterpriseRiskRequestVO.setOffset(offset); + + List> pageMap = crmSbzjjgMapper.rankByEnterpriseRisk(crmRankByEnterpriseRiskRequestVO, + offset, + crmRankByEnterpriseRiskRequestVO.getLimit()); + + BasePage> basePage = new BasePage<>(); + basePage.setList(pageMap); + basePage.setCurrent(crmRankByEnterpriseRiskRequestVO.getPage()); + basePage.setSize(crmRankByEnterpriseRiskRequestVO.getLimit()); + basePage.setTotal(maps.size()); + + return basePage; + } + + @Override + public BasePage> rankByEnterpriseRiskDetail(CrmRankByEnterpriseRiskRequestVO crmRankByEnterpriseRiskRequestVO) { + + List fxzbList = crmSbzjjgMapper.rankByEnterpriseRiskDetail(crmRankByEnterpriseRiskRequestVO,null,null); + + Integer offset = (crmRankByEnterpriseRiskRequestVO.getPage() - 1) * crmRankByEnterpriseRiskRequestVO.getLimit(); + crmRankByEnterpriseRiskRequestVO.setOffset(offset); + + List pageList = crmSbzjjgMapper.rankByEnterpriseRiskDetail(crmRankByEnterpriseRiskRequestVO, + offset, + crmRankByEnterpriseRiskRequestVO.getLimit()); + + List> mapList = new ArrayList<>(); + + Map map = new HashMap<>(); + + String swjgmc = new LambdaQueryChainWrapper<>(crmSwjgMapper) + .eq(CrmSwjg::getSwjgDm, crmRankByEnterpriseRiskRequestVO.getZgswjg()) + .last("limit 1") + .one() + .getSwjgmc(); + + map.put("dwmc", crmRankByEnterpriseRiskRequestVO.getDwmc()); + map.put("zjswjg", swjgmc); + map.put("fxzbList", pageList); + + mapList.add(map); + + BasePage> basePage = new BasePage<>(); + basePage.setList(mapList); + basePage.setCurrent(crmRankByEnterpriseRiskRequestVO.getPage()); + basePage.setSize(crmRankByEnterpriseRiskRequestVO.getLimit()); + basePage.setTotal(fxzbList.size()); + + return basePage; + } + + @Override + public BasePage> rankByPointerType(CrmRankByPointerTypeRequestVO crmRankByPointerTypeRequestVO) { + + List> maps = crmSbzjjgMapper.rankByPointerType(crmRankByPointerTypeRequestVO, + null, + null); + + Integer offset = (crmRankByPointerTypeRequestVO.getPage() - 1) * crmRankByPointerTypeRequestVO.getLimit(); + crmRankByPointerTypeRequestVO.setOffset(offset); + + List> pageMap = crmSbzjjgMapper.rankByPointerType(crmRankByPointerTypeRequestVO, + offset, + crmRankByPointerTypeRequestVO.getLimit()); + + BasePage> basePage = new BasePage<>(); + basePage.setList(pageMap); + basePage.setCurrent(crmRankByPointerTypeRequestVO.getPage()); + basePage.setSize(crmRankByPointerTypeRequestVO.getLimit()); + basePage.setTotal(maps.size()); + + return basePage; + } + + @Override + public BasePage> rankByPointerTypeDetail(CrmRankByPointerTypeRequestVO crmRankByPointerTypeRequestVO) { + + Integer offset = (crmRankByPointerTypeRequestVO.getPage() - 1) * crmRankByPointerTypeRequestVO.getLimit(); + crmRankByPointerTypeRequestVO.setOffset(offset); + + // 获取企业总数 + List qyList = crmSbzjjgMapper.rankByPointerTypeDetail(crmRankByPointerTypeRequestVO, null, null); + + // 获取分页 + List pageList = crmSbzjjgMapper.rankByPointerTypeDetail( + crmRankByPointerTypeRequestVO, + offset, + crmRankByPointerTypeRequestVO.getLimit() + ); + + // 初始化企业明细列表 + BasePage> basePage = new BasePage<>(); + basePage.setTotal(qyList.size()); + basePage.setCurrent(crmRankByPointerTypeRequestVO.getPage()); //当前页 + basePage.setSize(crmRankByPointerTypeRequestVO.getLimit()); //每页的数据量 + + List> mapList = new ArrayList<>(); + + for (String qymc : pageList) { + + CrmQyjbxx crmQyjbxx = new LambdaQueryChainWrapper<>(crmQyjbxxMapper) + .eq(CrmQyjbxx::getNsrmc, qymc) + .one(); + + Map map = new HashMap<>(); + map.put("qymc", qymc); + map.put("wgy", crmRankByPointerTypeRequestVO.getWgy()); + if (crmQyjbxx != null) { + map.put("qysh",crmQyjbxx.getNsrsbh()); + map.put("frxm",crmQyjbxx.getFddbrxm()); + map.put("frlxdh",crmQyjbxx.getFddbryddh()); + } else { + map.put("qysh",""); + map.put("frxm",""); + map.put("frlxdh",""); + } + mapList.add(map); + } + + basePage.setList(mapList); + + return basePage; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Map importExcelForSbzjjg(MultipartFile file) { + if (file == null || file.isEmpty()) { + throw new IllegalArgumentException("文件不能为空"); + } + + String filename = file.getOriginalFilename(); + if (filename != null && !filename.toLowerCase().endsWith(".xlsx") && !filename.toLowerCase().endsWith(".xls")) { + throw new IllegalArgumentException("只支持Excel文件"); + } + + // 每批1000条 + int batchSize = 1000; + // 总数据行数 + int totalCount; + // 已成功行数 + int successCount = 0; + // 跳过数量 + int skipCount = 0; + + long startTime = System.currentTimeMillis(); + + try (InputStream inputStream = file.getInputStream()) { + + ExcelReader reader = ExcelUtil.getReader(inputStream); + setTableMapping(reader); + + // 获取总行数并检查数据 + totalCount = reader.getRowCount(); + if (totalCount <= 1) { + throw new RuntimeException("Excel文件没有数据或只有表头"); + } + int dataRowCount = totalCount - 1; // 实际数据行数 + + log.info("开始导入Excel,总数据行数:{}", dataRowCount); + + // 分批读取和处理 + List batchEntities = new ArrayList<>(batchSize); + for (int startRow = 1; startRow < totalCount; startRow += batchSize) { + + int endRow = Math.min(startRow + batchSize - 1, totalCount - 1); + + // 读取当前批次的数据 + List> batchRows = reader.read(0, startRow, endRow); + + // 分批转换 + for (int i = 0; i < batchRows.size(); i++) { + Map row = batchRows.get(i); + try { + CrmSbzjjg entity = convertToEntity(row); + batchEntities.add(entity); + } catch (Exception e) { + // 计算Excel行号(从1开始) + int excelRowNum = startRow + i; + throw new RuntimeException("第" + excelRowNum + "行数据转换失败:" + e.getMessage(), e); + } + } + + // 去重 + //checkAndRemoveDuplicates(batchEntities); + + // 分批插入 + // 插入当前批次 + batchInsert(batchEntities); + successCount += batchEntities.size(); + + // 记录进度 + log.info("已处理 {}/{} 条数据", Math.min(endRow, dataRowCount), dataRowCount); + + // 清理当前批次,帮助GC + batchRows.clear(); + batchEntities.clear(); + } + } catch (IOException e) { + throw new RuntimeException("读取文件失败:" + e.getMessage(), e); + } catch (Exception e) { + throw new RuntimeException("导入失败:" + e.getMessage(), e); + } + + long endTime = System.currentTimeMillis(); + + log.info("导入完成,总耗时:{}秒", (endTime - startTime) / 1000.0); + + Map importResult = new HashMap<>(); + importResult.put("totalRows", totalCount-1); + importResult.put("successCount", successCount); + importResult.put("message", String.format("成功导入 %d 条数据", successCount)); + + return importResult; + } + + private void setTableMapping(ExcelReader reader) { + + // 设置表头映射 + reader.addHeaderAlias("纳税人名称", "nsrmc"); + reader.addHeaderAlias("统一社会信用代码(纳税人识别号)", "nsrsbh"); + reader.addHeaderAlias("登记注册类型", "djzclxmc"); + reader.addHeaderAlias("课征主体登记类型", "kzztdjlxmc"); + reader.addHeaderAlias("行业", "hymc"); + reader.addHeaderAlias("主管税务机关", "zgswjgmc"); + reader.addHeaderAlias("主管税务所(科、分局)", "zgswjgkfjmc"); + reader.addHeaderAlias("征收项目", "zsxmmc"); + reader.addHeaderAlias("应征凭证种类", "yzpzzl"); + reader.addHeaderAlias("自检指标名称", "zjzbmc"); + reader.addHeaderAlias("税收管理员", "ssgly"); + reader.addHeaderAlias("税款所属期起", "skssqq"); + reader.addHeaderAlias("税款所属期止", "skssqz"); + reader.addHeaderAlias("首次申报日期", "scsbrq"); + reader.addHeaderAlias("最新申报日期", "zxsbrq"); + reader.addHeaderAlias("自检结果提示信息", "zjjgts"); + reader.addHeaderAlias("历史提示信息", "lstsxx"); + reader.addHeaderAlias("自检日期", "zjrq"); + reader.addHeaderAlias("自检出问题时申报应补(退)税额", "ybtse1"); + reader.addHeaderAlias("问题已解决后的申报应补(退)税额", "ybtse2"); + reader.addHeaderAlias("补征税款金额", "bzskje"); + reader.addHeaderAlias("自检问题处理状态", "zjztmc"); + } + + private CrmSbzjjg convertToEntity(Map row) { + + CrmSbzjjg crmSbzjjg = new CrmSbzjjg(); + + crmSbzjjg.setNsrmc(getStringValue(row, "nsrmc")); + crmSbzjjg.setNsrsbh(getStringValue(row, "nsrsbh")); + crmSbzjjg.setDjzclxmc(getStringValue(row, "djzclxmc")); + crmSbzjjg.setKzztdjlxmc(getStringValue(row, "kzztdjlxmc")); + crmSbzjjg.setHymc(getStringValue(row, "hymc")); + crmSbzjjg.setZgswjgmc(getStringValue(row, "zgswjgmc")); + crmSbzjjg.setZgswjgkfjmc(getStringValue(row, "zgswjgkfjmc")); + crmSbzjjg.setZsxmmc(getStringValue(row, "zsxmmc")); + crmSbzjjg.setYzpzzl(getStringValue(row, "yzpzzl")); + crmSbzjjg.setZjzbmc(getStringValue(row, "zjzbmc")); + crmSbzjjg.setSsgly(getStringValue(row, "ssgly")); + crmSbzjjg.setSkssqq(getStringValue(row, "skssqq")); + crmSbzjjg.setSkssqz(getStringValue(row, "skssqz")); + crmSbzjjg.setScsbrq(getStringValue(row, "scsbrq")); + crmSbzjjg.setZxsbrq(getStringValue(row, "zxsbrq")); + crmSbzjjg.setZjjgts(getStringValue(row, "zjjgts")); + crmSbzjjg.setLstsxx(getStringValue(row, "lstsxx")); + crmSbzjjg.setZjrq(getStringValue(row, "zjrq")); + crmSbzjjg.setYbtse1(getDoubleValue(row,"ybtse1")); + crmSbzjjg.setYbtse2(getDoubleValue(row,"ybtse2")); + crmSbzjjg.setBzskje(getDoubleValue(row,"bzskje")); + crmSbzjjg.setZjztmc(getStringValue(row, "zjztmc")); + + // 自检指标id + crmSbzjjg.setZbId(zjzbdmVoService.queryZbIdByName(getStringValue(row, "zjzbmc"))); + + // 登记注册类型代码 + crmSbzjjg.setDjzclxDm(crmDjzclxService.queryCodeByName(getStringValue(row, "djzclxmc"))); + + // 课征主体登记类型代码 + crmSbzjjg.setKzztdjlxDm(""); + + // 行业代码 + crmSbzjjg.setHyDm(crmHyDmService.queryCodeByName(getStringValue(row, "hymc"))); + + // 主管税务机关代码 + crmSbzjjg.setZgswjgDm(crmSwjgDmService.queryCodeByName(getStringValue(row, "zgswjgmc"))); + + // 主管税务所(分局)代码 + crmSbzjjg.setZgswjgkfjDm(crmSwjgDmService.queryCodeByName(getStringValue(row, "zgswjgkfjmc"))); + + // 征收项目代码 + crmSbzjjg.setZsxmDm(zjzbZsxmVoService.queryCodeByName(getStringValue(row, "zsxmmc"))); + + // 应征凭证类型代码 + crmSbzjjg.setYzpzzlDm(zjzbDzbzdszlVoService.queryCodeByName(getStringValue(row, "yzpzzl"))); + + // 自检问题处理状态代码 + if (Objects.equals(getStringValue(row, "zjztmc"), "检查通过")) { + crmSbzjjg.setZjztDm("01"); + } else if (Objects.equals(getStringValue(row, "zjztmc"), "无需处理")) { + crmSbzjjg.setZjztDm("02"); + } else if (Objects.equals(getStringValue(row, "zjztmc"), "未更正")) { + crmSbzjjg.setZjztDm("03"); + } else if (Objects.equals(getStringValue(row, "zjztmc"), "已更正,问题未解决")) { + crmSbzjjg.setZjztDm("04"); + } else if (Objects.equals(getStringValue(row, "zjztmc"), "已更正,问题已解决")) { + crmSbzjjg.setZjztDm("05"); + } else if (Objects.equals(getStringValue(row, "zjztmc"), "申报自检补正税款金额")) { + crmSbzjjg.setZjztDm("06"); + } + + return crmSbzjjg; + } + + private String getStringValue(Map row, String key) { + Object value = row.get(key); + return value == null ? null : value.toString(); + } + + private Double getDoubleValue(Map row, String key) { + Object value = row.get(key); + if (value == null) return null; + if (value instanceof Number) { + return ((Number) value).doubleValue(); + } + try { + return Double.parseDouble(value.toString()); + } catch (NumberFormatException e) { + return null; + } + } + + private List checkAndRemoveDuplicates(List batchEntities){ + + List> maps = crmSbzjjgMapper.batchCheckExists(batchEntities); + System.out.println(maps.size()); + return null; + } + + private void batchInsert(List batchEntities) { + if (batchEntities.isEmpty()) + return; + try { + int inserted = crmSbzjjgMapper.batchInsert(batchEntities); + + if (inserted != batchEntities.size()) { + String errorMsg = String.format("批量插入数量不匹配:预期 %d,实际 %d", + batchEntities.size(), inserted); + throw new RuntimeException(errorMsg); + } + } catch (Exception e) { + throw new RuntimeException("批量插入失败:" + e.getMessage(), e); + } + } + + @Override + public void exportExcelForSbzjjg(CrmAccountQueryRequestVO crmAccountQueryRequestVO, HttpServletResponse response) { + + List exportList = crmSbzjjgMapper.accountQueryDetail(crmAccountQueryRequestVO, null, null); + + if (exportList == null || exportList.isEmpty()) { + throw new RuntimeException("没有可导出的数据"); + } + + ExcelWriter writer = null; + + try{ + writer = ExcelUtil.getWriter(true); + List> maps = convertToMap(exportList); + setColumnStyle(writer); + writer.write(maps, true); + + String fileName = "申报自检结果_" + System.currentTimeMillis() + ".xlsx"; + + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("UTF-8"); + fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); + response.setHeader("Content-Disposition", "attachment; filename=" + fileName); + + // 写入响应流 + writer.flush(response.getOutputStream()); + + log.info("数据导出成功,导出数量:{}", exportList.size()); + + } catch (IOException e) { + log.error("导出Excel时发生IO异常", e); + throw new RuntimeException("导出失败,系统异常"); + } catch (Exception e) { + log.error("导出Excel时发生异常", e); + throw new RuntimeException("导出失败:" + e.getMessage()); + } finally { + if (writer != null) { + writer.close(); + } + } + } + + private List> convertToMap(List list){ + + List> exportData = new ArrayList<>(); + + int rowNum = 1; + + for (CrmSbzjjg item : list) { + Map row = new LinkedHashMap<>(); + row.put("序号", rowNum++); + row.put("纳税人名称", item.getNsrmc()); + row.put("统一社会信用代码(纳税人识别号)", item.getNsrsbh()); + row.put("登记注册类型", item.getDjzclxmc()); + row.put("课征主体登记类型", item.getKzztdjlxmc()); + row.put("行业", item.getHymc()); + row.put("主管税务机关", item.getZgswjgmc()); + row.put("主管税务所(科、分局)", item.getZgswjgkfjmc()); + row.put("征收项目", item.getZsxmmc()); + row.put("应征凭证种类", item.getYzpzzl()); + row.put("自检指标名称", item.getZjzbmc()); + row.put("税收管理员", item.getSsgly()); + row.put("税款所属期起", item.getSkssqq()); + row.put("税款所属期止", item.getSkssqz()); + row.put("首次申报日期", item.getScsbrq()); + row.put("最新申报日期", item.getZxsbrq()); + row.put("自检结果提示信息", item.getZjjgts()); + row.put("历史提示信息", item.getLstsxx()); + row.put("自检日期", item.getZjrq()); + row.put("自检出问题时申报应补(退)税额", item.getYbtse1()); + row.put("问题已解决后的申报应补(退)税额", item.getYbtse2()); + row.put("补征税款金额", item.getBzskje()); + row.put("自检问题处理状态", item.getZjztmc()); + exportData.add(row); + } + return exportData; + } + + private void setColumnStyle(ExcelWriter writer){ + writer.setColumnWidth(0, 7); + writer.setColumnWidth(1, 35); + writer.setColumnWidth(2, 25); + writer.setColumnWidth(3, 20); + writer.setColumnWidth(4, 25); + writer.setColumnWidth(5, 25); + writer.setColumnWidth(6, 30); + writer.setColumnWidth(7, 40); + writer.setColumnWidth(8, 20); + writer.setColumnWidth(9, 45); + writer.setColumnWidth(10, 45); + writer.setColumnWidth(11, 10); + writer.setColumnWidth(12, 15); + writer.setColumnWidth(13, 15); + writer.setColumnWidth(14, 15); + writer.setColumnWidth(15, 15); + writer.setColumnWidth(16, 20); + writer.setColumnWidth(17, 20); + writer.setColumnWidth(18, 15); + writer.setColumnWidth(19, 15); + writer.setColumnWidth(20, 15); + writer.setColumnWidth(21, 15); + writer.setColumnWidth(22, 20); + + // 设置样式 + writer.getCellStyle().setAlignment(HorizontalAlignment.LEFT); + + } + + @Override + public List fuzzyQueryByKeyWord(String keyword) { + if (keyword == null || keyword.trim().isEmpty()) { + return new ArrayList<>(); // 空输入返回空列表 + } + keyword = keyword.trim(); + return crmSbzjjgMapper.fuzzyQueryByKeyWord(keyword); + } +} diff --git a/crm/src/main/java/com/kakarote/crm/service/impl/CrmSwjgDmServiceImpl.java b/crm/src/main/java/com/kakarote/crm/service/impl/CrmSwjgDmServiceImpl.java index 20237ac..cf044c3 100644 --- a/crm/src/main/java/com/kakarote/crm/service/impl/CrmSwjgDmServiceImpl.java +++ b/crm/src/main/java/com/kakarote/crm/service/impl/CrmSwjgDmServiceImpl.java @@ -41,4 +41,14 @@ public class CrmSwjgDmServiceImpl extends BaseServiceImpl(crmSwjgDmMapper) + .select(CrmSwjgDm::getSwjgDm) + .eq(CrmSwjgDm::getSwjgMc, name) + .last("limit 1") + .one() + .getSwjgDm(); + } } diff --git a/crm/src/main/java/com/kakarote/crm/service/impl/ZjzbDzbzdszlVoServiceImpl.java b/crm/src/main/java/com/kakarote/crm/service/impl/ZjzbDzbzdszlVoServiceImpl.java index 6e3ca9b..fae40cf 100644 --- a/crm/src/main/java/com/kakarote/crm/service/impl/ZjzbDzbzdszlVoServiceImpl.java +++ b/crm/src/main/java/com/kakarote/crm/service/impl/ZjzbDzbzdszlVoServiceImpl.java @@ -1,9 +1,11 @@ package com.kakarote.crm.service.impl; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.kakarote.core.servlet.BaseServiceImpl; import com.kakarote.crm.entity.VO.ZjzbDzbzdszlVo; import com.kakarote.crm.mapper.ZjzbDzbzdszlVoMapper; import com.kakarote.crm.service.IZjzbDzbzdszlVoService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** @@ -13,4 +15,17 @@ import org.springframework.stereotype.Service; */ @Service public class ZjzbDzbzdszlVoServiceImpl extends BaseServiceImpl implements IZjzbDzbzdszlVoService { + + @Autowired + private ZjzbDzbzdszlVoMapper zjzbDzbzdszlVoMapper; + + @Override + public String queryCodeByName(String name) { + return new LambdaQueryChainWrapper<>(zjzbDzbzdszlVoMapper) + .select(ZjzbDzbzdszlVo::getDzbzdszlDm) + .eq(ZjzbDzbzdszlVo::getDzbzdszlmc, name) + .last("limit 1") + .one() + .getDzbzdszlDm(); + } } \ No newline at end of file diff --git a/crm/src/main/java/com/kakarote/crm/service/impl/ZjzbZsxmVoServiceImpl.java b/crm/src/main/java/com/kakarote/crm/service/impl/ZjzbZsxmVoServiceImpl.java index 73627b9..0e76917 100644 --- a/crm/src/main/java/com/kakarote/crm/service/impl/ZjzbZsxmVoServiceImpl.java +++ b/crm/src/main/java/com/kakarote/crm/service/impl/ZjzbZsxmVoServiceImpl.java @@ -1,9 +1,11 @@ package com.kakarote.crm.service.impl; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.kakarote.core.servlet.BaseServiceImpl; import com.kakarote.crm.entity.VO.ZjzbZsxmVo; import com.kakarote.crm.mapper.ZjzbZsxmVoMapper; import com.kakarote.crm.service.IZjzbZsxmVoService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** @@ -13,4 +15,17 @@ import org.springframework.stereotype.Service; */ @Service public class ZjzbZsxmVoServiceImpl extends BaseServiceImpl implements IZjzbZsxmVoService { + + @Autowired + private ZjzbZsxmVoMapper mapper; + + @Override + public String queryCodeByName(String name) { + return new LambdaQueryChainWrapper<>(mapper) + .select(ZjzbZsxmVo::getZsxmDm) + .eq(ZjzbZsxmVo::getZsxmMc, name) + .last("limit 1") + .one() + .getZsxmDm(); + } } \ No newline at end of file diff --git a/crm/src/main/java/com/kakarote/crm/service/impl/ZjzbdmVoServiceImpl.java b/crm/src/main/java/com/kakarote/crm/service/impl/ZjzbdmVoServiceImpl.java index 6d2be77..68995d6 100644 --- a/crm/src/main/java/com/kakarote/crm/service/impl/ZjzbdmVoServiceImpl.java +++ b/crm/src/main/java/com/kakarote/crm/service/impl/ZjzbdmVoServiceImpl.java @@ -1,6 +1,7 @@ package com.kakarote.crm.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.kakarote.core.common.R; import com.kakarote.core.common.Result; @@ -207,4 +208,14 @@ public class ZjzbdmVoServiceImpl extends BaseServiceImpl(zjzbdmVoMapper) + .select(ZjzbdmVo::getZbId) + .eq(ZjzbdmVo::getZbmc,name) + .last("limit 1") + .one() + .getZbId(); + } } \ No newline at end of file diff --git a/crm/src/main/java/com/kakarote/crm/util/JsonUtil.java b/crm/src/main/java/com/kakarote/crm/util/JsonUtil.java index 708cde7..fd601a3 100644 --- a/crm/src/main/java/com/kakarote/crm/util/JsonUtil.java +++ b/crm/src/main/java/com/kakarote/crm/util/JsonUtil.java @@ -17,4 +17,22 @@ public class JsonUtil { throw new RuntimeException("JSON转换失败", e); } } + + /** + * 将任意对象序列化为JSON字符串 + * @param obj 目标对象(如CrmSearchBO实例) + * @return JSON字符串,序列化失败时返回null + */ + public static String toJson(Object obj) { + if (obj == null) { + return "null"; + } + try { + return mapper.writeValueAsString(obj); + } catch (Exception e) { + // 实际项目中应使用日志框架(如SLF4J) + System.err.println("JSON序列化失败: " + e.getMessage()); + return null; + } + } } diff --git a/examine/src/main/java/com/kakarote/examine/mapper/xml/ExamineRecordLogMapper.xml b/examine/src/main/java/com/kakarote/examine/mapper/xml/ExamineRecordLogMapper.xml index fecb49f..58c7020 100644 --- a/examine/src/main/java/com/kakarote/examine/mapper/xml/ExamineRecordLogMapper.xml +++ b/examine/src/main/java/com/kakarote/examine/mapper/xml/ExamineRecordLogMapper.xml @@ -1,5 +1,5 @@ - + select @@ -29,9 +29,9 @@ and a.create_user_id in - + #{id} - + and FIND_IN_SET(#{data.send_user_ids},a.send_user_ids) @@ -353,9 +353,9 @@ and a.create_user_id in - + #{id} - + and FIND_IN_SET(#{send_user_ids},a.send_user_ids)