From 767e25a13e4cda506108e3b37e8199664e4d3bca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?=
Date: Fri, 9 May 2025 17:44:49 +0800
Subject: [PATCH 01/19] =?UTF-8?q?fix:=20=E3=80=90bug-182=E3=80=91=E6=8F=90?=
=?UTF-8?q?=E4=BA=A4=E5=B7=A5=E5=8D=95=E6=97=B6=EF=BC=8C=E6=90=9C=E7=B4=A2?=
=?UTF-8?q?=E8=AE=BE=E5=A4=87=E7=BC=96=E5=8F=B7=E7=9A=84=E9=A1=B5=E9=9D=A2?=
=?UTF-8?q?=EF=BC=8C=E5=B1=95=E7=A4=BA=E7=9A=84=E8=AE=BE=E5=A4=87=E7=B1=BB?=
=?UTF-8?q?=E5=9E=8B=E5=AD=97=E6=AE=B5=E6=B2=A1=E6=9C=89=E7=BF=BB=E8=AF=91?=
=?UTF-8?q?=EF=BC=8C=E9=9C=80=E8=A6=81=E4=BC=98=E5=8C=96=E6=94=B9=E4=B8=BA?=
=?UTF-8?q?=E5=B1=95=E7=A4=BA=E8=AE=BE=E5=A4=87=E8=B4=A8=E4=BF=9D=E7=8A=B6?=
=?UTF-8?q?=E6=80=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../nflg/mobilebroken/cfs/controller/TiketController.java | 2 +-
.../java/com/nflg/mobilebroken/common/pojo/vo/DeviceVO.java | 3 +++
.../nflg/mobilebroken/repository/mapper/DeviceMapper.java | 2 +-
.../nflg/mobilebroken/repository/service/IDeviceService.java | 2 +-
.../repository/service/impl/DeviceServiceImpl.java | 4 ++--
.../src/main/resources/mapper/DeviceMapper.xml | 5 ++++-
6 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TiketController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TiketController.java
index 36eaaf72..27b54e86 100644
--- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TiketController.java
+++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TiketController.java
@@ -96,7 +96,7 @@ public class TiketController extends ControllerBase {
**/
@PostMapping("searchDevice")
public ApiResult> searchDevice(@Valid @RequestBody SearchDeviceRequest request) {
- return ApiResult.success(deviceService.searchDevice(request));
+ return ApiResult.success(deviceService.searchDevice(request,MultilingualUtil.getLanguage()));
}
/**
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DeviceVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DeviceVO.java
index 4f5090e5..52f3a6e7 100644
--- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DeviceVO.java
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DeviceVO.java
@@ -18,6 +18,9 @@ public class DeviceVO {
// 设备型号
private String modelNo;
+ //质保状态
+ private String warrantyState;
+
// 设备类型
private String deviceType;
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/DeviceMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/DeviceMapper.java
index 8a9595d0..fb640ab8 100644
--- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/DeviceMapper.java
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/DeviceMapper.java
@@ -35,7 +35,7 @@ public interface DeviceMapper extends BaseMapper {
void batchDelByIds(@Param("ids")List ids);
- Page searchDevice(SearchDeviceRequest request, List companyIds, Page> page);
+ Page searchDevice(SearchDeviceRequest request, List companyIds,String language, Page> page);
void taskWarrantyStateNotStarted();
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IDeviceService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IDeviceService.java
index 774178c7..4eb4cfed 100644
--- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IDeviceService.java
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IDeviceService.java
@@ -28,7 +28,7 @@ public interface IDeviceService extends IService {
void batchDelByIds(@Param("ids") List ids);
- Page searchDevice(SearchDeviceRequest request);
+ Page searchDevice(SearchDeviceRequest request,String language);
void taskWarrantyStateNotStarted();
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/DeviceServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/DeviceServiceImpl.java
index 7e592fea..fa14b7a9 100644
--- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/DeviceServiceImpl.java
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/DeviceServiceImpl.java
@@ -49,7 +49,7 @@ public class DeviceServiceImpl extends ServiceImpl impleme
}
@Override
- public Page searchDevice(SearchDeviceRequest request) {
+ public Page searchDevice(SearchDeviceRequest request,String language) {
// IPage page = lambdaQuery()
// .like(StrUtil.isNotBlank(request.getDeviceNo()), Device::getDeviceNo, request.getDeviceNo())
// .like(StrUtil.isNotBlank(request.getModelNo()), Device::getModelNo, request.getModelNo())
@@ -57,7 +57,7 @@ public class DeviceServiceImpl extends ServiceImpl impleme
// .page(new Page<>(request.getPage(), request.getPageSize()));
// return PageUtil.convert(page, d -> Convert.convert(DeviceVO.class, d));
List companyIds = AppUserUtil.getCompanyIds();
- return baseMapper.searchDevice(request, companyIds, new Page<>(request.getPage(), request.getPageSize()));
+ return baseMapper.searchDevice(request, companyIds,language ,new Page<>(request.getPage(), request.getPageSize()));
}
public void taskWarrantyStateNotStarted(){
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/DeviceMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/DeviceMapper.xml
index b6b5bf62..730cc4ab 100644
--- a/nflg-mobilebroken-repository/src/main/resources/mapper/DeviceMapper.xml
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/DeviceMapper.xml
@@ -60,10 +60,13 @@
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class TicketCallJoinServiceImpl extends ServiceImpl implements ITicketCallJoinService {
+
+ @Resource
+ private ITicketCallService ticketCallService;
+
+ @Override
+ public boolean isInCall(Integer userId) {
+ return baseMapper.isInCall(userId);
+ }
+
+ @Transactional
+ @Override
+ public void join(Integer ticketId, Integer userId, String from) {
+ TicketCall ticketCall = ticketCallService.lambdaQuery()
+ .eq(TicketCall::getTicketId, ticketId)
+ .ne(TicketCall::getState, 2)
+ .one();
+ VUtils.trueThrowBusinessError(Objects.isNull(ticketCall)).throwMessage("加入失败");
+ TicketCallJoin ticketCallJoin = lambdaQuery()
+ .eq(TicketCallJoin::getCallId, ticketCall.getId())
+ .eq(TicketCallJoin::getUserId, userId)
+ .eq(TicketCallJoin::getFrom, from)
+ .eq(TicketCallJoin::getState, 0)
+ .one();
+ VUtils.trueThrowBusinessError(Objects.isNull(ticketCallJoin)).throwMessage("加入失败");
+ ticketCall.setState(1);
+ ticketCallService.updateById(ticketCall);
+ ticketCallJoin.setState(1);
+ updateById(ticketCallJoin);
+ }
+
+ @Override
+ public boolean allIsHangUp(Integer callId) {
+ return !lambdaQuery()
+ .eq(TicketCallJoin::getCallId, callId)
+ .ne(TicketCallJoin::getState, 2)
+ .exists();
+ }
+
+ @Transactional
+ @Override
+ public void hangUp(Integer callId, Integer userId, String from, boolean reject) {
+ TicketCallJoin ticketCallJoin = lambdaQuery()
+ .eq(TicketCallJoin::getCallId, callId)
+ .ne(TicketCallJoin::getState, 2)
+ .eq(TicketCallJoin::getUserId, userId)
+ .eq(TicketCallJoin::getFrom, from)
+ .one();
+ if (Objects.nonNull(ticketCallJoin)) {
+ ticketCallJoin.setState(2);
+ if (!reject) {
+ ticketCallJoin.setHangupTime(LocalDateTime.now());
+ }
+ updateById(ticketCallJoin);
+ if (StrUtil.equals(from, Constant.FROM_APP)) {
+ lambdaUpdate()
+ .set(TicketCallJoin::getState, 2)
+ .set(!reject, TicketCallJoin::getHangupTime, LocalDateTime.now())
+ .eq(TicketCallJoin::getCallId, callId)
+ .ne(TicketCallJoin::getFrom, from)
+ .update();
+ }
+ if (!lambdaQuery()
+ .eq(TicketCallJoin::getCallId, callId)
+ .ne(TicketCallJoin::getState, 2)
+ .exists()){
+ ticketCallService.lambdaUpdate()
+ .set(TicketCall::getState, 2)
+ .set(!reject,TicketCall::getHangupTime, LocalDateTime.now())
+ .eq(TicketCall::getId, callId)
+ .update();
+ }
+ }
+ }
+
+ @Override
+ public void add(Integer callId, Integer userId, String from) {
+ if (!lambdaQuery()
+ .eq(TicketCallJoin::getCallId, callId)
+ .eq(TicketCallJoin::getUserId, userId)
+ .eq(TicketCallJoin::getFrom, from)
+ .eq(TicketCallJoin::getState, 0)
+ .exists()) {
+ save(new TicketCallJoin()
+ .setCallId(callId)
+ .setUserId(userId)
+ .setFrom(from)
+ .setState(0)
+ );
+ }
+ }
+}
\ No newline at end of file
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketCallServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketCallServiceImpl.java
new file mode 100644
index 00000000..75aae350
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketCallServiceImpl.java
@@ -0,0 +1,79 @@
+package com.nflg.mobilebroken.repository.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.mobilebroken.common.constant.Constant;
+import com.nflg.mobilebroken.repository.entity.TicketCall;
+import com.nflg.mobilebroken.repository.entity.TicketCallJoin;
+import com.nflg.mobilebroken.repository.mapper.TicketCallMapper;
+import com.nflg.mobilebroken.repository.service.ITicketCallJoinService;
+import com.nflg.mobilebroken.repository.service.ITicketCallService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.Objects;
+
+/**
+ *
+ * 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class TicketCallServiceImpl extends ServiceImpl implements ITicketCallService {
+
+ @Resource
+ private ITicketCallJoinService ticketCallJoinService;
+
+ @Override
+ public boolean isInCall(Integer userId) {
+ return lambdaQuery()
+ .eq(TicketCall::getState, 1)
+ .eq(TicketCall::getCallerUserId, userId)
+ .exists()
+ ||
+ ticketCallJoinService.isInCall(userId);
+ }
+
+ @Transactional
+ @Override
+ public void add(Integer ticketId, Integer callerUserId, Integer calledUserId, String from) {
+ TicketCall ticketCall = new TicketCall()
+ .setTicketId(ticketId)
+ .setCallerUserId(callerUserId)
+ .setState(0)
+ .setFrom(from)
+ .setCreateTime(LocalDateTime.now());
+ save(ticketCall);
+ ticketCallJoinService.save(new TicketCallJoin()
+ .setCallId(ticketCall.getId())
+ .setFrom(StrUtil.equals(from, Constant.FROM_APP) ? Constant.FROM_ADMIN : Constant.FROM_APP)
+ .setUserId(calledUserId)
+ .setState(0)
+ .setCreateTime(LocalDateTime.now())
+ );
+ }
+
+ @Override
+ public void hangUp(Integer ticketId, Integer userId, String from, boolean reject) {
+ TicketCall ticketCall = lambdaQuery()
+ .eq(TicketCall::getTicketId, ticketId)
+ .ne(TicketCall::getState, 2)
+// .eq(TicketCall::getCallerUserId, userId)
+// .eq(TicketCall::getFrom, from)
+ .one();
+ if (Objects.nonNull(ticketCall)){
+ if ((Objects.equals(ticketCall.getCallerUserId(), userId) && StrUtil.equals(ticketCall.getFrom(), Constant.FROM_APP))
+ || ticketCallJoinService.allIsHangUp(ticketCall.getId())){
+ ticketCall.setState(2);
+ ticketCall.setHangupTime(LocalDateTime.now());
+ updateById(ticketCall);
+ }
+ ticketCallJoinService.hangUp(ticketCall.getId(), userId, from, reject);
+ }
+ }
+}
\ No newline at end of file
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/AppUserMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/AppUserMapper.xml
index 48274cd7..fcfc215b 100644
--- a/nflg-mobilebroken-repository/src/main/resources/mapper/AppUserMapper.xml
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/AppUserMapper.xml
@@ -59,7 +59,7 @@
, u.title_id
, p.position_name AS 'title'
FROM app_user u
- INNER JOIN t_base_customer c ON u.company_id = c.id
+ LEFT JOIN t_base_customer c ON u.company_id = c.id
LEFT JOIN t_base_area a1 ON u.area_id = a1.id
LEFT JOIN app_area a2 ON u.area_id = a2.id
LEFT JOIN t_base_position p ON u.title_id = p.id
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/TicketCallJoinMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/TicketCallJoinMapper.xml
new file mode 100644
index 00000000..37975cc0
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/TicketCallJoinMapper.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/TicketCallMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/TicketCallMapper.xml
new file mode 100644
index 00000000..391549ee
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/TicketCallMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/test/java/com/nflg/mobilebroken/repository/CodeGenerator.java b/nflg-mobilebroken-repository/src/test/java/com/nflg/mobilebroken/repository/CodeGenerator.java
index 7ea7dc4e..0543aa6d 100644
--- a/nflg-mobilebroken-repository/src/test/java/com/nflg/mobilebroken/repository/CodeGenerator.java
+++ b/nflg-mobilebroken-repository/src/test/java/com/nflg/mobilebroken/repository/CodeGenerator.java
@@ -33,7 +33,7 @@ public class CodeGenerator {
, Paths.get(System.getProperty("user.dir")) + "/src/main/resources/mapper"))
)
.strategyConfig(builder -> {
- builder.addInclude("anonymous_ticket") //只生成指定表
+ builder.addInclude("ticket_call,ticket_call_join") //只生成指定表
.entityBuilder()
.enableLombok()
.enableChainModel()
diff --git a/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/UniPushService.java b/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/UniPushService.java
new file mode 100644
index 00000000..c89cf3ef
--- /dev/null
+++ b/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/UniPushService.java
@@ -0,0 +1,24 @@
+package com.nflg.mobilebroken.starter.service;
+
+import cn.hutool.json.JSONUtil;
+import com.nflg.mobilebroken.common.pojo.dto.UniPushMessage;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+@Slf4j
+@Component
+public class UniPushService {
+
+ @Value("${uniapp.cloud.push.url}")
+ private String url;
+
+ public void send(UniPushMessage message){
+ log.info("发送uniapp消息:{}", JSONUtil.toJsonStr(message));
+ RestTemplate restTemplate = new RestTemplate();
+ ResponseEntity response = restTemplate.postForEntity(url,message, String.class);
+ log.info("发送uniapp消息结果:{}", response.getBody());
+ }
+}
\ No newline at end of file
From 1f3e0968cce8420df4fd953078bda87dbb708600 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?=
Date: Tue, 20 May 2025 14:06:59 +0800
Subject: [PATCH 03/19] =?UTF-8?q?feat:=20=E8=A7=86=E9=A2=91=E9=80=9A?=
=?UTF-8?q?=E8=AF=9D=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../nflg/mobilebroken/admin/task/ShengWangScheduledTasks.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ShengWangScheduledTasks.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ShengWangScheduledTasks.java
index 1be9f58a..6a0e461c 100644
--- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ShengWangScheduledTasks.java
+++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ShengWangScheduledTasks.java
@@ -48,7 +48,7 @@ public class ShengWangScheduledTasks {
log.info("将不存在列表中的通话设置为已结束状态");
List ticketCalls = ticketCallService.lambdaQuery()
.ne(TicketCall::getState, 2)
- .notIn(TicketCall::getTicketId, dto.getChannels()
+ .notIn(dto.getTotalSize() > 0, TicketCall::getTicketId, dto.getChannels()
.stream()
.map(o -> Integer.valueOf(o.getChannelName().replace("ticket", "")))
.collect(Collectors.toList()))
From 91d3d78c9b0ecff7d2faaa8fad74e51679d7b140 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?=
Date: Wed, 21 May 2025 11:03:45 +0800
Subject: [PATCH 04/19] =?UTF-8?q?feat:=20=E8=A7=86=E9=A2=91=E9=80=9A?=
=?UTF-8?q?=E8=AF=9D=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../admin/task/ShengWangScheduledTasks.java | 49 ++++++++++++++++---
.../service/ITicketCallJoinService.java | 2 +
.../impl/TicketCallJoinServiceImpl.java | 8 +++
.../service/impl/TicketCallServiceImpl.java | 7 +--
4 files changed, 55 insertions(+), 11 deletions(-)
diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ShengWangScheduledTasks.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ShengWangScheduledTasks.java
index 6a0e461c..ba1283af 100644
--- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ShengWangScheduledTasks.java
+++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ShengWangScheduledTasks.java
@@ -4,12 +4,14 @@ import cn.hutool.core.collection.CollectionUtil;
import com.nflg.mobilebroken.admin.pojo.dto.ShengWangChannelDTO;
import com.nflg.mobilebroken.admin.pojo.dto.ShengWangChannelInfoDTO;
import com.nflg.mobilebroken.admin.service.ShengWangService;
+import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.util.IdUtil;
import com.nflg.mobilebroken.repository.entity.TicketCall;
import com.nflg.mobilebroken.repository.entity.TicketCallJoin;
import com.nflg.mobilebroken.repository.service.ITicketCallJoinService;
import com.nflg.mobilebroken.repository.service.ITicketCallService;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import org.slf4j.MDC;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@@ -73,23 +75,54 @@ public class ShengWangScheduledTasks {
.one();
if (Objects.nonNull(ticketCall)) {
log.info("获取频道用户");
- List userIds = shengWangService.getChannelUsers(info.getChannelName());
- if (CollectionUtil.isEmpty(userIds)) {
+ List channelUsers = shengWangService.getChannelUsers(info.getChannelName());
+ log.info("频道用户:{}", channelUsers);
+ if (CollectionUtil.isEmpty(channelUsers)) {
ticketCallJoinService.lambdaUpdate()
.set(TicketCallJoin::getState, 2)
.set(TicketCallJoin::getHangupTime, LocalDateTime.now())
.eq(TicketCallJoin::getCallId, ticketCall.getId())
.update();
} else {
- ticketCallJoinService.lambdaUpdate()
- .set(TicketCallJoin::getState, 2)
- .set(TicketCallJoin::getHangupTime, LocalDateTime.now())
- .eq(TicketCallJoin::getCallId, ticketCall.getId())
- .notIn(TicketCallJoin::getUserId, userIds)
- .update();
+ //用户端
+ List userIds = channelUsers.stream()
+ .map(String::valueOf)
+ .filter(userId -> String.valueOf(userId).startsWith("1"))
+ .map(this::getUserId)
+ .collect(Collectors.toList());
+ log.info("客户端用户:{}", userIds);
+ if (CollectionUtil.isNotEmpty(userIds)) {
+ ticketCallJoinService.lambdaUpdate()
+ .set(TicketCallJoin::getState, 2)
+ .set(TicketCallJoin::getHangupTime, LocalDateTime.now())
+ .eq(TicketCallJoin::getCallId, ticketCall.getId())
+ .eq(TicketCallJoin::getFrom, Constant.FROM_APP)
+ .notIn(TicketCallJoin::getUserId, userIds)
+ .update();
+ }
+ //管理端
+ userIds = channelUsers.stream()
+ .map(String::valueOf)
+ .filter(userId -> String.valueOf(userId).startsWith("2"))
+ .map(this::getUserId)
+ .collect(Collectors.toList());
+ log.info("管理端用户:{}", userIds);
+ if (CollectionUtil.isNotEmpty(userIds)) {
+ ticketCallJoinService.lambdaUpdate()
+ .set(TicketCallJoin::getState, 2)
+ .set(TicketCallJoin::getHangupTime, LocalDateTime.now())
+ .eq(TicketCallJoin::getCallId, ticketCall.getId())
+ .eq(TicketCallJoin::getFrom, Constant.FROM_ADMIN)
+ .notIn(TicketCallJoin::getUserId, userIds)
+ .update();
+ }
}
}
}
log.info("执行声网通话状态同步完毕");
}
+
+ private Integer getUserId(String userId){
+ return Integer.valueOf(StringUtils.stripStart(userId.substring(1),"0"));
+ }
}
\ No newline at end of file
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketCallJoinService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketCallJoinService.java
index 694bd0e8..a0c1dafd 100644
--- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketCallJoinService.java
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketCallJoinService.java
@@ -25,4 +25,6 @@ public interface ITicketCallJoinService extends IService {
void hangUp(Integer callId, Integer userId, String from, boolean reject);
void add(Integer callId, Integer userId, String from);
+
+ void hangUpAll(Integer id);
}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketCallJoinServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketCallJoinServiceImpl.java
index 79386b14..80bde7c0 100644
--- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketCallJoinServiceImpl.java
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketCallJoinServiceImpl.java
@@ -116,4 +116,12 @@ public class TicketCallJoinServiceImpl extends ServiceImpl
Date: Thu, 22 May 2025 15:03:45 +0800
Subject: [PATCH 05/19] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96sse=E5=AE=A2?=
=?UTF-8?q?=E6=88=B7=E7=AB=AF=E6=96=AD=E5=BC=80=E8=BF=9E=E6=8E=A5=E6=8F=90?=
=?UTF-8?q?=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../push/service/SSEManagerBase.java | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/nflg-mobilebroken-push/src/main/java/com/nflg/mobilebroken/push/service/SSEManagerBase.java b/nflg-mobilebroken-push/src/main/java/com/nflg/mobilebroken/push/service/SSEManagerBase.java
index 06f971c0..b0c34185 100644
--- a/nflg-mobilebroken-push/src/main/java/com/nflg/mobilebroken/push/service/SSEManagerBase.java
+++ b/nflg-mobilebroken-push/src/main/java/com/nflg/mobilebroken/push/service/SSEManagerBase.java
@@ -8,6 +8,7 @@ import com.nflg.mobilebroken.common.util.VUtils;
import com.nflg.mobilebroken.push.UserSseEmitter;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
+import org.apache.catalina.connector.ClientAbortException;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
@@ -74,7 +75,11 @@ public class SSEManagerBase {
});
try {
emitter.send(SseEmitter.event().data("已连接").reconnectTime(5000));
- } catch (IOException e) {
+ }catch (ClientAbortException e){
+ log.error("客户端断开连接:{}", userId);
+ emitter.complete();
+ }
+ catch (IOException e) {
log.error("sse发送数据出错", e);
emitter.completeWithError(e);
}
@@ -83,7 +88,7 @@ public class SSEManagerBase {
protected void sendByTicket(Integer ticketId, PushMessageDTO dto) {
log.info(StrUtil.format(from + "SSE发送消息,工单id: {},内容: {}", ticketId, dto));
- List emitters = SSE_EMITTERS.stream()
+ List emitters = SSE_EMITTERS.stream()
.filter(s -> Objects.equals(s.getTicketId(), ticketId))
.collect(Collectors.toList());
if (CollectionUtil.isEmpty(emitters)){
@@ -93,6 +98,9 @@ public class SSEManagerBase {
emitters.forEach(emitter -> {
try {
emitter.send(SseEmitter.event().name(dto.getType()).data(dto.getData()));
+ } catch (ClientAbortException e) {
+ log.error("客户端断开连接:{}", emitter.getUserId());
+ emitter.complete();
} catch (IOException e) {
log.error("sse发送数据出错", e);
emitter.completeWithError(e);
@@ -102,7 +110,7 @@ public class SSEManagerBase {
protected void sendByUser(Integer userId, PushMessageDTO dto) {
log.info(StrUtil.format(from + "SSE发送消息,用户id: {},内容: {}", userId, dto));
- List emitters = SSE_EMITTERS.stream()
+ List emitters = SSE_EMITTERS.stream()
.filter(s -> Objects.equals(s.getUserId(), userId))
.collect(Collectors.toList());
if (CollectionUtil.isEmpty(emitters)) {
@@ -113,7 +121,10 @@ public class SSEManagerBase {
try {
emitter.send(SseEmitter.event().name(dto.getType()).data(dto.getData()));
log.info("发送成功");
- } catch (IOException e) {
+ } catch (ClientAbortException e) {
+ log.error("客户端断开连接:{}", emitter.getUserId());
+ emitter.complete();
+ }catch (IOException e) {
log.error("sse发送数据出错", e);
emitter.completeWithError(e);
}
From 485ed4d8b1a63334867e883cb05b4167d6d336ca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?=
Date: Thu, 22 May 2025 14:46:23 +0800
Subject: [PATCH 06/19] =?UTF-8?q?feat:=20=E4=BA=A7=E5=93=81=E4=B8=AD?=
=?UTF-8?q?=E5=BF=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../controller/ProductBaseController.java | 124 ++++++++++++++++++
.../controller/ProductModelController.java | 58 ++++++++
.../controller/ProductPartController.java | 67 ++++++++++
.../controller/ProductSeriesController.java | 58 ++++++++
.../controller/ProductTypeController.java | 58 ++++++++
.../admin/controller/TicketController.java | 52 ++++----
.../controller/AdvertisementController.java | 2 +-
.../cfs/controller/TicketController.java | 21 ++-
.../common/pojo/dto/ProductParamsDTO.java | 32 +++++
.../pojo/request/ProductCaseAddRequest.java | 29 ++++
.../request/ProductCaseInfoAddRequest.java | 29 ++++
.../request/ProductCaseSearchRequest.java | 29 ++++
.../request/ProductCaseUpdateRequest.java | 12 ++
.../pojo/request/ProductHonorAddRequest.java | 25 ++++
.../request/ProductHonorInfoAddRequest.java | 27 ++++
.../request/ProductHonorSearchRequest.java | 29 ++++
.../request/ProductHonorUpdateRequest.java | 12 ++
.../pojo/request/ProductIntroAddRequest.java | 33 +++++
.../request/ProductIntroInfoAddRequest.java | 42 ++++++
.../request/ProductIntroSearchRequest.java | 23 ++++
.../request/ProductIntroUpdateRequest.java | 14 ++
.../pojo/request/ProductModelAddRequest.java | 46 +++++++
.../request/ProductModelImageAddRequest.java | 27 ++++
.../request/ProductModelInfoAddRequest.java | 37 ++++++
.../request/ProductModelSearchRequest.java | 31 +++++
.../request/ProductModelUpdateRequest.java | 15 +++
.../request/ProductModelVideoAddRequest.java | 12 ++
.../pojo/request/ProductParamsAddRequest.java | 27 ++++
.../pojo/request/ProductPartAddRequest.java | 24 ++++
.../request/ProductPartInfoAddRequest.java | 37 ++++++
.../request/ProductPartSearchRequest.java | 24 ++++
.../request/ProductPartUpdateRequest.java | 15 +++
.../pojo/request/ProductSeriesAddRequest.java | 19 +++
.../request/ProductSeriesInfoAddRequest.java | 24 ++++
.../request/ProductSeriesSearchRequest.java | 24 ++++
.../request/ProductSeriesUpdateRequest.java | 12 ++
.../pojo/request/ProductTypeAddRequest.java | 31 +++++
.../request/ProductTypeInfoAddRequest.java | 32 +++++
.../request/ProductTypeSearchRequest.java | 31 +++++
.../request/ProductTypeUpdateRequest.java | 15 +++
.../common/pojo/vo/ProductCaseSearchVO.java | 46 +++++++
.../common/pojo/vo/ProductCaseVO.java | 22 ++++
.../common/pojo/vo/ProductFileVO.java | 27 ++++
.../common/pojo/vo/ProductHonorSearchVO.java | 40 ++++++
.../common/pojo/vo/ProductHonorVO.java | 22 ++++
.../common/pojo/vo/ProductImageVO.java | 17 +++
.../common/pojo/vo/ProductIntroSearchVO.java | 46 +++++++
.../common/pojo/vo/ProductIntroVO.java | 32 +++++
.../common/pojo/vo/ProductModelInfoVO.java | 46 +++++++
.../common/pojo/vo/ProductModelParamsVO.java | 28 ++++
.../common/pojo/vo/ProductModelSearchVO.java | 41 ++++++
.../common/pojo/vo/ProductModelVO.java | 24 ++++
.../common/pojo/vo/ProductParamsInfoVO.java | 24 ++++
.../common/pojo/vo/ProductParamsVO.java | 26 ++++
.../common/pojo/vo/ProductPartInfoVO.java | 36 +++++
.../common/pojo/vo/ProductPartSearchVO.java | 41 ++++++
.../common/pojo/vo/ProductSeriesSearchVO.java | 41 ++++++
.../common/pojo/vo/ProductSeriesVO.java | 24 ++++
.../common/pojo/vo/ProductTypeSearchVO.java | 41 ++++++
.../common/pojo/vo/ProductTypeVO.java | 24 ++++
.../common/pojo/vo/ProductVideoVO.java | 12 ++
nflg-mobilebroken-product/pom.xml | 88 +++++++++++++
.../product/ProductApplication.java | 31 +++++
.../controller/AdvertisementController.java | 36 +++++
.../product/controller/BaseController.java | 9 ++
.../product/controller/DataController.java | 80 +++++++++++
.../product/controller/InfoController.java | 59 +++++++++
.../main/resources/bootstrap-dev.properties | 15 +++
.../src/main/resources/bootstrap.properties | 31 +++++
.../src/main/resources/logback-sit.xml | 46 +++++++
.../repository/entity/ProductCase.java | 66 ++++++++++
.../repository/entity/ProductCaseInfo.java | 76 +++++++++++
.../repository/entity/ProductHonor.java | 62 +++++++++
.../repository/entity/ProductHonorInfo.java | 71 ++++++++++
.../repository/entity/ProductIntro.java | 66 ++++++++++
.../repository/entity/ProductIntroInfo.java | 81 ++++++++++++
.../repository/entity/ProductModel.java | 66 ++++++++++
.../repository/entity/ProductModelFile.java | 81 ++++++++++++
.../repository/entity/ProductModelImage.java | 71 ++++++++++
.../repository/entity/ProductModelInfo.java | 76 +++++++++++
.../repository/entity/ProductModelParams.java | 71 ++++++++++
.../repository/entity/ProductModelVideo.java | 76 +++++++++++
.../repository/entity/ProductPart.java | 56 ++++++++
.../repository/entity/ProductPartInfo.java | 76 +++++++++++
.../repository/entity/ProductPartParams.java | 71 ++++++++++
.../repository/entity/ProductSeries.java | 56 ++++++++
.../repository/entity/ProductSeriesInfo.java | 76 +++++++++++
.../repository/entity/ProductType.java | 61 +++++++++
.../repository/entity/ProductTypeInfo.java | 76 +++++++++++
.../mapper/ProductCaseInfoMapper.java | 16 +++
.../repository/mapper/ProductCaseMapper.java | 19 +++
.../mapper/ProductHonorInfoMapper.java | 16 +++
.../repository/mapper/ProductHonorMapper.java | 26 ++++
.../mapper/ProductIntroInfoMapper.java | 16 +++
.../repository/mapper/ProductIntroMapper.java | 26 ++++
.../mapper/ProductModelFileMapper.java | 16 +++
.../mapper/ProductModelImageMapper.java | 15 +++
.../mapper/ProductModelInfoMapper.java | 16 +++
.../repository/mapper/ProductModelMapper.java | 29 ++++
.../mapper/ProductModelParamsMapper.java | 20 +++
.../mapper/ProductModelVideoMapper.java | 16 +++
.../mapper/ProductPartInfoMapper.java | 16 +++
.../repository/mapper/ProductPartMapper.java | 24 ++++
.../mapper/ProductPartParamsMapper.java | 20 +++
.../mapper/ProductSeriesInfoMapper.java | 16 +++
.../mapper/ProductSeriesMapper.java | 26 ++++
.../mapper/ProductTypeInfoMapper.java | 16 +++
.../repository/mapper/ProductTypeMapper.java | 26 ++++
.../service/IProductCaseInfoService.java | 22 ++++
.../service/IProductCaseService.java | 32 +++++
.../service/IProductHonorInfoService.java | 22 ++++
.../service/IProductHonorService.java | 32 +++++
.../service/IProductIntroInfoService.java | 20 +++
.../service/IProductIntroService.java | 31 +++++
.../service/IProductModelFileService.java | 20 +++
.../service/IProductModelImageService.java | 25 ++++
.../service/IProductModelInfoService.java | 24 ++++
.../service/IProductModelParamsService.java | 25 ++++
.../service/IProductModelService.java | 39 ++++++
.../service/IProductModelVideoService.java | 25 ++++
.../service/IProductPartInfoService.java | 24 ++++
.../service/IProductPartParamsService.java | 25 ++++
.../service/IProductPartService.java | 32 +++++
.../service/IProductSeriesInfoService.java | 22 ++++
.../service/IProductSeriesService.java | 32 +++++
.../service/IProductTypeInfoService.java | 24 ++++
.../service/IProductTypeService.java | 32 +++++
.../impl/ProductCaseInfoServiceImpl.java | 66 ++++++++++
.../service/impl/ProductCaseServiceImpl.java | 82 ++++++++++++
.../impl/ProductHonorInfoServiceImpl.java | 64 +++++++++
.../service/impl/ProductHonorServiceImpl.java | 70 ++++++++++
.../impl/ProductIntroInfoServiceImpl.java | 47 +++++++
.../service/impl/ProductIntroServiceImpl.java | 88 +++++++++++++
.../impl/ProductModelFileServiceImpl.java | 38 ++++++
.../impl/ProductModelImageServiceImpl.java | 80 +++++++++++
.../impl/ProductModelInfoServiceImpl.java | 66 ++++++++++
.../impl/ProductModelParamsServiceImpl.java | 90 +++++++++++++
.../service/impl/ProductModelServiceImpl.java | 114 ++++++++++++++++
.../impl/ProductModelVideoServiceImpl.java | 81 ++++++++++++
.../impl/ProductPartInfoServiceImpl.java | 65 +++++++++
.../impl/ProductPartParamsServiceImpl.java | 95 ++++++++++++++
.../service/impl/ProductPartServiceImpl.java | 78 +++++++++++
.../impl/ProductSeriesInfoServiceImpl.java | 65 +++++++++
.../impl/ProductSeriesServiceImpl.java | 69 ++++++++++
.../impl/ProductTypeInfoServiceImpl.java | 67 ++++++++++
.../service/impl/ProductTypeServiceImpl.java | 69 ++++++++++
.../mapper/ProductCaseInfoMapper.xml | 5 +
.../resources/mapper/ProductCaseMapper.xml | 12 ++
.../mapper/ProductHonorInfoMapper.xml | 5 +
.../resources/mapper/ProductHonorMapper.xml | 32 +++++
.../mapper/ProductIntroInfoMapper.xml | 5 +
.../resources/mapper/ProductIntroMapper.xml | 33 +++++
.../mapper/ProductModelFileMapper.xml | 5 +
.../mapper/ProductModelImageMapper.xml | 5 +
.../mapper/ProductModelInfoMapper.xml | 5 +
.../resources/mapper/ProductModelMapper.xml | 36 +++++
.../mapper/ProductModelParamsMapper.xml | 18 +++
.../mapper/ProductModelVideoMapper.xml | 5 +
.../mapper/ProductPartInfoMapper.xml | 5 +
.../resources/mapper/ProductPartMapper.xml | 29 ++++
.../mapper/ProductPartParamsMapper.xml | 17 +++
.../mapper/ProductSeriesInfoMapper.xml | 5 +
.../resources/mapper/ProductSeriesMapper.xml | 28 ++++
.../mapper/ProductTypeInfoMapper.xml | 5 +
.../resources/mapper/ProductTypeMapper.xml | 28 ++++
.../repository/CodeGenerator.java | 3 +-
pom.xml | 1 +
167 files changed, 6174 insertions(+), 39 deletions(-)
create mode 100644 nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductBaseController.java
create mode 100644 nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductModelController.java
create mode 100644 nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductPartController.java
create mode 100644 nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductSeriesController.java
create mode 100644 nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductTypeController.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ProductParamsDTO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductCaseAddRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductCaseInfoAddRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductCaseSearchRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductCaseUpdateRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductHonorAddRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductHonorInfoAddRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductHonorSearchRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductHonorUpdateRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductIntroAddRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductIntroInfoAddRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductIntroSearchRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductIntroUpdateRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelAddRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelImageAddRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelInfoAddRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelSearchRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelUpdateRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelVideoAddRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductParamsAddRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductPartAddRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductPartInfoAddRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductPartSearchRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductPartUpdateRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductSeriesAddRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductSeriesInfoAddRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductSeriesSearchRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductSeriesUpdateRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductTypeAddRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductTypeInfoAddRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductTypeSearchRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductTypeUpdateRequest.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductCaseSearchVO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductCaseVO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductFileVO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductHonorSearchVO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductHonorVO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductImageVO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductIntroSearchVO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductIntroVO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelInfoVO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelParamsVO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelSearchVO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelVO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductParamsInfoVO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductParamsVO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductPartInfoVO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductPartSearchVO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductSeriesSearchVO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductSeriesVO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductTypeSearchVO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductTypeVO.java
create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductVideoVO.java
create mode 100644 nflg-mobilebroken-product/pom.xml
create mode 100644 nflg-mobilebroken-product/src/main/java/com/nflg/mobilebroken/product/ProductApplication.java
create mode 100644 nflg-mobilebroken-product/src/main/java/com/nflg/mobilebroken/product/controller/AdvertisementController.java
create mode 100644 nflg-mobilebroken-product/src/main/java/com/nflg/mobilebroken/product/controller/BaseController.java
create mode 100644 nflg-mobilebroken-product/src/main/java/com/nflg/mobilebroken/product/controller/DataController.java
create mode 100644 nflg-mobilebroken-product/src/main/java/com/nflg/mobilebroken/product/controller/InfoController.java
create mode 100644 nflg-mobilebroken-product/src/main/resources/bootstrap-dev.properties
create mode 100644 nflg-mobilebroken-product/src/main/resources/bootstrap.properties
create mode 100644 nflg-mobilebroken-product/src/main/resources/logback-sit.xml
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductCase.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductCaseInfo.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductHonor.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductHonorInfo.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductIntro.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductIntroInfo.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModel.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelFile.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelImage.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelInfo.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelParams.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelVideo.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductPart.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductPartInfo.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductPartParams.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductSeries.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductSeriesInfo.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductType.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductTypeInfo.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductCaseInfoMapper.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductCaseMapper.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductHonorInfoMapper.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductHonorMapper.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductIntroInfoMapper.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductIntroMapper.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelFileMapper.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelImageMapper.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelInfoMapper.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelMapper.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelParamsMapper.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelVideoMapper.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductPartInfoMapper.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductPartMapper.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductPartParamsMapper.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductSeriesInfoMapper.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductSeriesMapper.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductTypeInfoMapper.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductTypeMapper.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductCaseInfoService.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductCaseService.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductHonorInfoService.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductHonorService.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductIntroInfoService.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductIntroService.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelFileService.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelImageService.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelInfoService.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelParamsService.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelService.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelVideoService.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductPartInfoService.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductPartParamsService.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductPartService.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductSeriesInfoService.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductSeriesService.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductTypeInfoService.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductTypeService.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductCaseInfoServiceImpl.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductCaseServiceImpl.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductHonorInfoServiceImpl.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductHonorServiceImpl.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductIntroInfoServiceImpl.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductIntroServiceImpl.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelFileServiceImpl.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelImageServiceImpl.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelInfoServiceImpl.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelParamsServiceImpl.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelServiceImpl.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelVideoServiceImpl.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductPartInfoServiceImpl.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductPartParamsServiceImpl.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductPartServiceImpl.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductSeriesInfoServiceImpl.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductSeriesServiceImpl.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductTypeInfoServiceImpl.java
create mode 100644 nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductTypeServiceImpl.java
create mode 100644 nflg-mobilebroken-repository/src/main/resources/mapper/ProductCaseInfoMapper.xml
create mode 100644 nflg-mobilebroken-repository/src/main/resources/mapper/ProductCaseMapper.xml
create mode 100644 nflg-mobilebroken-repository/src/main/resources/mapper/ProductHonorInfoMapper.xml
create mode 100644 nflg-mobilebroken-repository/src/main/resources/mapper/ProductHonorMapper.xml
create mode 100644 nflg-mobilebroken-repository/src/main/resources/mapper/ProductIntroInfoMapper.xml
create mode 100644 nflg-mobilebroken-repository/src/main/resources/mapper/ProductIntroMapper.xml
create mode 100644 nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelFileMapper.xml
create mode 100644 nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelImageMapper.xml
create mode 100644 nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelInfoMapper.xml
create mode 100644 nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelMapper.xml
create mode 100644 nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelParamsMapper.xml
create mode 100644 nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelVideoMapper.xml
create mode 100644 nflg-mobilebroken-repository/src/main/resources/mapper/ProductPartInfoMapper.xml
create mode 100644 nflg-mobilebroken-repository/src/main/resources/mapper/ProductPartMapper.xml
create mode 100644 nflg-mobilebroken-repository/src/main/resources/mapper/ProductPartParamsMapper.xml
create mode 100644 nflg-mobilebroken-repository/src/main/resources/mapper/ProductSeriesInfoMapper.xml
create mode 100644 nflg-mobilebroken-repository/src/main/resources/mapper/ProductSeriesMapper.xml
create mode 100644 nflg-mobilebroken-repository/src/main/resources/mapper/ProductTypeInfoMapper.xml
create mode 100644 nflg-mobilebroken-repository/src/main/resources/mapper/ProductTypeMapper.xml
diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductBaseController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductBaseController.java
new file mode 100644
index 00000000..6d31c9f3
--- /dev/null
+++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductBaseController.java
@@ -0,0 +1,124 @@
+package com.nflg.mobilebroken.admin.controller;
+
+import com.nflg.mobilebroken.common.pojo.ApiResult;
+import com.nflg.mobilebroken.common.pojo.PageData;
+import com.nflg.mobilebroken.common.pojo.request.*;
+import com.nflg.mobilebroken.common.pojo.vo.ProductCaseSearchVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductHonorSearchVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductIntroSearchVO;
+import com.nflg.mobilebroken.repository.service.IProductCaseService;
+import com.nflg.mobilebroken.repository.service.IProductHonorService;
+import com.nflg.mobilebroken.repository.service.IProductIntroService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+/**
+ * 产品中心基础信息
+ */
+@Slf4j
+@RestController
+@RequestMapping("/product/base")
+public class ProductBaseController extends ControllerBase{
+
+ @Resource
+ private IProductIntroService productIntroService;
+
+ @Resource
+ private IProductHonorService productHonorService;
+
+ @Resource
+ private IProductCaseService productCaseService;
+
+ /**
+ * 添加介绍
+ * @param request 请求参数
+ */
+ @PostMapping("/addIntro")
+ public ApiResult addIntro(@Valid @RequestBody ProductIntroAddRequest request){
+ productIntroService.add(request);
+ return ApiResult.success();
+ }
+
+ /**
+ * 修改介绍
+ * @param request 请求参数
+ */
+ @PostMapping("/updateIntro")
+ public ApiResult updateIntro(@Valid @RequestBody ProductIntroUpdateRequest request){
+ productIntroService.update(request);
+ return ApiResult.success();
+ }
+
+ /**
+ * 获取介绍列表
+ * @param request 请求参数
+ */
+ @PostMapping("/getIntroList")
+ public ApiResult> getIntroList(@RequestBody ProductIntroSearchRequest request){
+ return ApiResult.success(productIntroService.getList(request));
+ }
+
+ /**
+ * 添加荣誉
+ * @param request 请求参数
+ */
+ @PostMapping("/addHonor")
+ public ApiResult addHonor(@Valid @RequestBody ProductHonorAddRequest request){
+ productHonorService.add(request);
+ return ApiResult.success();
+ }
+
+ /**
+ * 修改荣誉
+ * @param request 请求参数
+ */
+ @PostMapping("/updateHonor")
+ public ApiResult updateHonor(@Valid @RequestBody ProductHonorUpdateRequest request){
+ productHonorService.update(request);
+ return ApiResult.success();
+ }
+
+ /**
+ * 获取荣誉列表
+ * @param request 请求参数
+ */
+ @PostMapping("/getHonorList")
+ public ApiResult> getHonorList(@RequestBody ProductHonorSearchRequest request){
+ return ApiResult.success(productHonorService.getList(request));
+ }
+
+ /**
+ * 添加案例
+ * @param request 请求参数
+ */
+ @PostMapping("/addCase")
+ public ApiResult addCase(@Valid @RequestBody ProductCaseAddRequest request){
+ productCaseService.add(request);
+ return ApiResult.success();
+ }
+
+ /**
+ * 修改案例
+ * @param request 请求参数
+ */
+ @PostMapping("/updateCase")
+ public ApiResult updateCase(@Valid @RequestBody ProductCaseUpdateRequest request){
+ productCaseService.update(request);
+ return ApiResult.success();
+ }
+
+ /**
+ * 获取案例列表
+ * @param request 请求参数
+ */
+ @PostMapping("/getCaseList")
+ public ApiResult> getCaseList(@RequestBody ProductCaseSearchRequest request){
+ return ApiResult.success(productCaseService.getList(request));
+ }
+}
diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductModelController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductModelController.java
new file mode 100644
index 00000000..6e81e3a7
--- /dev/null
+++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductModelController.java
@@ -0,0 +1,58 @@
+package com.nflg.mobilebroken.admin.controller;
+
+import com.nflg.mobilebroken.common.pojo.ApiResult;
+import com.nflg.mobilebroken.common.pojo.PageData;
+import com.nflg.mobilebroken.common.pojo.request.ProductModelAddRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductModelSearchRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductModelUpdateRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductModelSearchVO;
+import com.nflg.mobilebroken.repository.service.IProductModelService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+/**
+ * 产品中心-产品机型
+ */
+@Slf4j
+@RestController
+@RequestMapping("/product/model")
+public class ProductModelController extends ControllerBase{
+
+ @Resource
+ private IProductModelService productModelService;
+
+ /**
+ * 添加机型
+ * @param request 请求参数
+ */
+ @PostMapping("/add")
+ public ApiResult add(@Valid @RequestBody ProductModelAddRequest request){
+ productModelService.add(request);
+ return ApiResult.success();
+ }
+
+ /**
+ * 修改机型
+ * @param request 请求参数
+ */
+ @PostMapping("/update")
+ public ApiResult update(@Valid @RequestBody ProductModelUpdateRequest request){
+ productModelService.update(request);
+ return ApiResult.success();
+ }
+
+ /**
+ * 获取机型列表
+ * @param request 请求参数
+ */
+ @PostMapping("/getList")
+ public ApiResult> getList(@RequestBody ProductModelSearchRequest request){
+ return ApiResult.success(productModelService.getList(request));
+ }
+}
diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductPartController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductPartController.java
new file mode 100644
index 00000000..73c90119
--- /dev/null
+++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductPartController.java
@@ -0,0 +1,67 @@
+package com.nflg.mobilebroken.admin.controller;
+
+import com.nflg.mobilebroken.common.constant.Constant;
+import com.nflg.mobilebroken.common.pojo.ApiResult;
+import com.nflg.mobilebroken.common.pojo.PageData;
+import com.nflg.mobilebroken.common.pojo.request.ProductPartAddRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductPartSearchRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductPartUpdateRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductPartInfoVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductPartSearchVO;
+import com.nflg.mobilebroken.repository.service.IProductPartService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 产品中心-部件
+ */
+@Slf4j
+@RestController
+@RequestMapping("/product/part")
+public class ProductPartController extends ControllerBase {
+
+ @Resource
+ private IProductPartService productPartService;
+
+ /**
+ * 添加部件
+ * @param request 请求参数
+ */
+ @PostMapping("/add")
+ public ApiResult add(@Valid @RequestBody ProductPartAddRequest request) {
+ productPartService.add(request);
+ return ApiResult.success();
+ }
+
+ /**
+ * 修改部件
+ * @param request 请求参数
+ */
+ @PostMapping("/update")
+ public ApiResult update(@Valid @RequestBody ProductPartUpdateRequest request) {
+ productPartService.update(request);
+ return ApiResult.success();
+ }
+
+ /**
+ * 获取部件列表
+ * @param request 请求参数
+ */
+ @PostMapping("/getList")
+ public ApiResult> getList(@RequestBody ProductPartSearchRequest request) {
+ return ApiResult.success(productPartService.getList(request));
+ }
+
+ /**
+ * 获取部件详情
+ * @param partId 产品部件id
+ */
+ @GetMapping("/getInfo")
+ public ApiResult getModelInfo(@Valid @RequestParam @NotNull Integer partId) {
+ return ApiResult.success(productPartService.getInfo(partId, Constant.DEFAULT_LANGUAGE_CODE));
+ }
+}
diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductSeriesController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductSeriesController.java
new file mode 100644
index 00000000..50dd6a70
--- /dev/null
+++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductSeriesController.java
@@ -0,0 +1,58 @@
+package com.nflg.mobilebroken.admin.controller;
+
+import com.nflg.mobilebroken.common.pojo.ApiResult;
+import com.nflg.mobilebroken.common.pojo.PageData;
+import com.nflg.mobilebroken.common.pojo.request.ProductSeriesAddRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductSeriesSearchRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductSeriesUpdateRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductSeriesSearchVO;
+import com.nflg.mobilebroken.repository.service.IProductSeriesService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+/**
+ * 产品中心-产品系列
+ */
+@Slf4j
+@RestController
+@RequestMapping("/product/series")
+public class ProductSeriesController extends ControllerBase{
+
+ @Resource
+ private IProductSeriesService productSeriesService;
+
+ /**
+ * 添加系列
+ * @param request 请求参数
+ */
+ @PostMapping("/add")
+ public ApiResult add(@Valid @RequestBody ProductSeriesAddRequest request){
+ productSeriesService.add(request);
+ return ApiResult.success();
+ }
+
+ /**
+ * 修改系列
+ * @param request 请求参数
+ */
+ @PostMapping("/update")
+ public ApiResult update(@Valid @RequestBody ProductSeriesUpdateRequest request){
+ productSeriesService.update(request);
+ return ApiResult.success();
+ }
+
+ /**
+ * 获取系列列表
+ * @param request 请求参数
+ */
+ @PostMapping("/getList")
+ public ApiResult> getList(@RequestBody ProductSeriesSearchRequest request){
+ return ApiResult.success(productSeriesService.getList(request));
+ }
+}
diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductTypeController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductTypeController.java
new file mode 100644
index 00000000..7ce4b990
--- /dev/null
+++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductTypeController.java
@@ -0,0 +1,58 @@
+package com.nflg.mobilebroken.admin.controller;
+
+import com.nflg.mobilebroken.common.pojo.ApiResult;
+import com.nflg.mobilebroken.common.pojo.PageData;
+import com.nflg.mobilebroken.common.pojo.request.ProductTypeAddRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductTypeSearchRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductTypeUpdateRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductTypeSearchVO;
+import com.nflg.mobilebroken.repository.service.IProductTypeService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+/**
+ * 产品中心-产品类型
+ */
+@Slf4j
+@RestController
+@RequestMapping("/product/type")
+public class ProductTypeController extends ControllerBase{
+
+ @Resource
+ private IProductTypeService productTypeService;
+
+ /**
+ * 添加类型
+ * @param request 请求参数
+ */
+ @PostMapping("/add")
+ public ApiResult add(@Valid @RequestBody ProductTypeAddRequest request){
+ productTypeService.add(request);
+ return ApiResult.success();
+ }
+
+ /**
+ * 修改类型
+ * @param request 请求参数
+ */
+ @PostMapping("/update")
+ public ApiResult update(@Valid @RequestBody ProductTypeUpdateRequest request){
+ productTypeService.update(request);
+ return ApiResult.success();
+ }
+
+ /**
+ * 获取类型列表
+ * @param request 请求参数
+ */
+ @PostMapping("/getList")
+ public ApiResult> getList(@RequestBody ProductTypeSearchRequest request){
+ return ApiResult.success(productTypeService.getList(request));
+ }
+}
diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java
index 6547d007..3d86c45e 100644
--- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java
+++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java
@@ -131,11 +131,11 @@ public class TicketController extends ControllerBase {
@Resource
private UniPushService uniPushService;
- @Resource
- private ITicketCallService ticketCallService;
-
- @Resource
- private ITicketCallJoinService ticketCallJoinService;
+// @Resource
+// private ITicketCallService ticketCallService;
+//
+// @Resource
+// private ITicketCallJoinService ticketCallJoinService;
/**
* 获取问题类型
@@ -1254,7 +1254,7 @@ public class TicketController extends ControllerBase {
)
);
ssePushService.sendTicketCallToApp(adminUser, ticket.getUserId(), ticketId);
- ticketCallService.add(ticketId, handlerUserId, ticket.getUserId(), Constant.FROM_ADMIN);
+// ticketCallService.add(ticketId, handlerUserId, ticket.getUserId(), Constant.FROM_ADMIN);
return ApiResult.success();
}
@@ -1266,11 +1266,11 @@ public class TicketController extends ControllerBase {
@PostMapping("addCallUser")
public ApiResult addCallUser(@Valid @RequestBody CallUserAddRequest request){
AdminUser adminUser = adminUserService.getById(AdminUserUtil.getUserId());
- TicketCall ticketCall = ticketCallService.lambdaQuery()
- .eq(TicketCall::getTicketId, request.getTicketId())
- .eq(TicketCall::getState, 1)
- .one();
- VUtils.trueThrowBusinessError(Objects.isNull(ticketCall)).throwMessage("未在通话中");
+// TicketCall ticketCall = ticketCallService.lambdaQuery()
+// .eq(TicketCall::getTicketId, request.getTicketId())
+// .eq(TicketCall::getState, 1)
+// .one();
+// VUtils.trueThrowBusinessError(Objects.isNull(ticketCall)).throwMessage("未在通话中");
request.getUserIds().forEach(userId->{
AdminUser adminUser1 = adminUserService.getById(userId);
if (Objects.nonNull(adminUser1)) {
@@ -1292,7 +1292,7 @@ public class TicketController extends ControllerBase {
)
);
ssePushService.sendTicketCallToAdmin(adminUser, userId, request.getTicketId());
- ticketCallJoinService.add(ticketCall.getId(), userId, Constant.FROM_ADMIN);
+// ticketCallJoinService.add(ticketCall.getId(), userId, Constant.FROM_ADMIN);
});
}
});
@@ -1309,9 +1309,9 @@ public class TicketController extends ControllerBase {
VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在");
VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.Processing.getState()))
.throwMessage("当前工单状态不允许请求通话");
- VUtils.trueThrowBusinessError(ticketCallService.isInCall(AdminUserUtil.getUserId()))
- .throwMessage("您已加入别的通话中");
- ticketCallJoinService.join(ticketId, AdminUserUtil.getUserId(),Constant.FROM_ADMIN);
+// VUtils.trueThrowBusinessError(ticketCallService.isInCall(AdminUserUtil.getUserId()))
+// .throwMessage("您已加入别的通话中");
+// ticketCallJoinService.join(ticketId, AdminUserUtil.getUserId(),Constant.FROM_ADMIN);
return ApiResult.success();
}
@@ -1321,10 +1321,10 @@ public class TicketController extends ControllerBase {
*/
@PostMapping("call/hangUp")
public ApiResult hangUp(@Valid @RequestBody TicketCallHangUpRequest request) {
- TicketCall ticketCall = ticketCallService.lambdaQuery()
- .eq(TicketCall::getTicketId, request.getTicketId())
- .ne(TicketCall::getState, 2)
- .one();
+// TicketCall ticketCall = ticketCallService.lambdaQuery()
+// .eq(TicketCall::getTicketId, request.getTicketId())
+// .ne(TicketCall::getState, 2)
+// .one();
if (request.getReject()) {
AdminUser adminUser = adminUserService.getById(AdminUserUtil.getUserId());
if (StrUtil.equals(request.getFrom(), "app")) {
@@ -1345,7 +1345,7 @@ public class TicketController extends ControllerBase {
)
);
ssePushService.sendTicketCallHangUpToApp(request.getTicketId(), request.getFromUserId(), adminUser);
- ticketCallService.hangUp(request.getTicketId(), AdminUserUtil.getUserId(), Constant.FROM_ADMIN, true);
+// ticketCallService.hangUp(request.getTicketId(), AdminUserUtil.getUserId(), Constant.FROM_ADMIN, true);
}else if (StrUtil.equals(request.getFrom(), "admin")) {
uniPushService.send(new UniPushMessage()
.setSenderId("admin-uid-" + adminUser.getId())
@@ -1364,14 +1364,14 @@ public class TicketController extends ControllerBase {
)
);
ssePushService.sendTicketCallHangUpToAdmin(request.getTicketId(), request.getFromUserId(), adminUser);
- ticketCallJoinService.hangUp(ticketCall.getId(), AdminUserUtil.getUserId(), Constant.FROM_ADMIN, true);
+// ticketCallJoinService.hangUp(ticketCall.getId(), AdminUserUtil.getUserId(), Constant.FROM_ADMIN, true);
}
}else {
- if (StrUtil.equals(request.getFrom(), "app")) {
- ticketCallService.hangUp(request.getTicketId(), AdminUserUtil.getUserId(), Constant.FROM_ADMIN, false);
- }else {
- ticketCallJoinService.hangUp(ticketCall.getId(), AdminUserUtil.getUserId(), Constant.FROM_ADMIN, false);
- }
+// if (StrUtil.equals(request.getFrom(), "app")) {
+// ticketCallService.hangUp(request.getTicketId(), AdminUserUtil.getUserId(), Constant.FROM_ADMIN, false);
+// }else {
+// ticketCallJoinService.hangUp(ticketCall.getId(), AdminUserUtil.getUserId(), Constant.FROM_ADMIN, false);
+// }
}
return ApiResult.success();
}
diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/AdvertisementController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/AdvertisementController.java
index 423cbedf..215c9da3 100644
--- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/AdvertisementController.java
+++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/AdvertisementController.java
@@ -19,7 +19,7 @@ import javax.validation.constraints.NotNull;
*/
@RestController
@RequestMapping("/ad")
-public class AdvertisementController {
+public class AdvertisementController extends ControllerBase{
@Resource
private IAdvertisementService advertisementService;
diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java
index 6ec8f3a0..d8c2f082 100644
--- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java
+++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java
@@ -6,7 +6,6 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.nflg.mobilebroken.cfs.publisher.TicketEventPublisher;
import com.nflg.mobilebroken.cfs.service.SsePushService;
-import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.constant.TicketState;
import com.nflg.mobilebroken.common.pojo.ApiResult;
import com.nflg.mobilebroken.common.pojo.PageData;
@@ -93,11 +92,11 @@ public class TicketController extends ControllerBase {
@Resource
private UniPushService uniPushService;
- @Resource
- private ITicketCallService ticketCallService;
-
- @Resource
- private ITicketCallJoinService ticketCallJoinService;
+// @Resource
+// private ITicketCallService ticketCallService;
+//
+// @Resource
+// private ITicketCallJoinService ticketCallJoinService;
/**
* 搜索设备
@@ -509,7 +508,7 @@ public class TicketController extends ControllerBase {
)
);
ssePushService.sendTicketCallToAdmin(appUser, handlerUserId, ticketId);
- ticketCallService.add(ticketId, AppUserUtil.getUserId(), handlerUserId, Constant.FROM_APP);
+// ticketCallService.add(ticketId, AppUserUtil.getUserId(), handlerUserId, Constant.FROM_APP);
return ApiResult.success();
}
@@ -523,9 +522,9 @@ public class TicketController extends ControllerBase {
VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在");
VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.Processing.getState()))
.throwMessage("当前工单状态不允许通话");
- VUtils.trueThrowBusinessError(ticketCallService.isInCall(AppUserUtil.getUserId()))
- .throwMessage("您已加入别的通话中");
- ticketCallJoinService.join(ticketId, AppUserUtil.getUserId(),Constant.FROM_APP);
+// VUtils.trueThrowBusinessError(ticketCallService.isInCall(AppUserUtil.getUserId()))
+// .throwMessage("您已加入别的通话中");
+// ticketCallJoinService.join(ticketId, AppUserUtil.getUserId(),Constant.FROM_APP);
return ApiResult.success();
}
@@ -554,7 +553,7 @@ public class TicketController extends ControllerBase {
)
);
ssePushService.sendTicketCallHangUpToAdmin(request.getTicketId(), request.getFromUserId(), appUser);
- ticketCallService.hangUp(request.getTicketId(), AppUserUtil.getUserId(), Constant.FROM_APP, true);
+// ticketCallService.hangUp(request.getTicketId(), AppUserUtil.getUserId(), Constant.FROM_APP, true);
}
return ApiResult.success();
}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ProductParamsDTO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ProductParamsDTO.java
new file mode 100644
index 00000000..79e689e8
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ProductParamsDTO.java
@@ -0,0 +1,32 @@
+package com.nflg.mobilebroken.common.pojo.dto;
+
+import lombok.Data;
+
+@Data
+public class ProductParamsDTO {
+
+ /**
+ * 字典ID
+ */
+ private Integer dictionaryId;
+
+ /**
+ * 字典值
+ */
+ private String dictionaryName;
+
+ /**
+ * 字典项ID
+ */
+ private Integer dictionaryItemId;
+
+ /**
+ * 字典项值
+ */
+ private String dictionaryItemName;
+
+ /**
+ * 参数值
+ */
+ private String value;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductCaseAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductCaseAddRequest.java
new file mode 100644
index 00000000..e0f3445a
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductCaseAddRequest.java
@@ -0,0 +1,29 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ProductCaseAddRequest {
+
+ /**
+ * 标题
+ */
+ private String title;
+
+ /**
+ * 排序
+ */
+ private int sort;
+
+ /**
+ * 是否启用
+ */
+ private Boolean enable;
+
+ /**
+ * 多语言数据
+ */
+ private List items;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductCaseInfoAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductCaseInfoAddRequest.java
new file mode 100644
index 00000000..cff7ee1a
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductCaseInfoAddRequest.java
@@ -0,0 +1,29 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+@Data
+public class ProductCaseInfoAddRequest {
+
+ private Integer id;
+
+ /**
+ * 语言编码
+ */
+ private String languageCode;
+
+ /**
+ * 描述
+ */
+ private String desc;
+
+ /**
+ * 图片
+ */
+ private String image;
+
+ /**
+ * 视频
+ */
+ private String video;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductCaseSearchRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductCaseSearchRequest.java
new file mode 100644
index 00000000..cf00b44d
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductCaseSearchRequest.java
@@ -0,0 +1,29 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+import java.time.LocalDate;
+
+@Data
+public class ProductCaseSearchRequest extends PageRequest {
+
+ /**
+ * 标题
+ */
+ private String title;
+
+ /**
+ * 是否启用
+ */
+ private Boolean enable;
+
+ /**
+ * 开始时间
+ */
+ private LocalDate startDate;
+
+ /**
+ * 结束时间
+ */
+ private LocalDate endDate;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductCaseUpdateRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductCaseUpdateRequest.java
new file mode 100644
index 00000000..be10d090
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductCaseUpdateRequest.java
@@ -0,0 +1,12 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+public class ProductCaseUpdateRequest extends ProductCaseAddRequest{
+
+ @NotNull
+ private Integer id;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductHonorAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductHonorAddRequest.java
new file mode 100644
index 00000000..6c794b47
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductHonorAddRequest.java
@@ -0,0 +1,25 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.util.List;
+
+@Data
+public class ProductHonorAddRequest {
+
+ /**
+ * 获得时间
+ */
+ private LocalDate obtainingTime;
+
+ /**
+ * 是否启用
+ */
+ private Boolean enable;
+
+ /**
+ * 多语言数据
+ */
+ private List items;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductHonorInfoAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductHonorInfoAddRequest.java
new file mode 100644
index 00000000..c1f76d6b
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductHonorInfoAddRequest.java
@@ -0,0 +1,27 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+@Data
+public class ProductHonorInfoAddRequest {
+
+ /**
+ * id, 新增时为空
+ */
+ private Integer id;
+
+ /**
+ * 语言代码
+ */
+ private String languageCode;
+
+ /**
+ * 标题
+ */
+ private String title;
+
+ /**
+ * 图片
+ */
+ private String image;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductHonorSearchRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductHonorSearchRequest.java
new file mode 100644
index 00000000..5cd43b19
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductHonorSearchRequest.java
@@ -0,0 +1,29 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+import java.time.LocalDate;
+
+@Data
+public class ProductHonorSearchRequest extends PageRequest {
+
+ /**
+ * 标题
+ */
+ private String title;
+
+ /**
+ * 是否启用
+ */
+ private Boolean enable;
+
+ /**
+ * 起始时间
+ */
+ private LocalDate startTime;
+
+ /**
+ * 结束时间
+ */
+ private LocalDate endTime;
+}
\ No newline at end of file
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductHonorUpdateRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductHonorUpdateRequest.java
new file mode 100644
index 00000000..6c0e9fe9
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductHonorUpdateRequest.java
@@ -0,0 +1,12 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+public class ProductHonorUpdateRequest extends ProductHonorAddRequest {
+
+ @NotNull
+ private Integer id;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductIntroAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductIntroAddRequest.java
new file mode 100644
index 00000000..83cb3fff
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductIntroAddRequest.java
@@ -0,0 +1,33 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Data
+public class ProductIntroAddRequest {
+
+ /**
+ * 字典项id
+ */
+ @NotNull
+ private Integer dictionaryItemId;
+
+ /**
+ * 是否启用
+ */
+ private Boolean enable;
+
+ /**
+ * 排序
+ */
+ private int sort;
+
+ /**
+ * 详情
+ */
+ @Valid
+ private List items;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductIntroInfoAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductIntroInfoAddRequest.java
new file mode 100644
index 00000000..254c986b
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductIntroInfoAddRequest.java
@@ -0,0 +1,42 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+public class ProductIntroInfoAddRequest {
+
+ /**
+ * 多语言详情id,添加时为空
+ */
+ private Integer id;
+
+ /**
+ * 语言代码
+ */
+ @NotBlank
+ private String languageCode;
+
+ /**
+ * 标题
+ */
+ @NotBlank
+ private String name;
+
+ /**
+ * 内容
+ */
+ @NotBlank
+ private String desc;
+
+ /**
+ * 图片地址
+ */
+ private String image;
+
+ /**
+ * 图片位置,1:左边;2:右边
+ */
+ private Integer imagePosition;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductIntroSearchRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductIntroSearchRequest.java
new file mode 100644
index 00000000..d8f7084c
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductIntroSearchRequest.java
@@ -0,0 +1,23 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import java.time.LocalDate;
+
+public class ProductIntroSearchRequest extends PageRequest{
+
+ private Integer dictionaryItemId;
+
+ /**
+ * 是否启用
+ */
+ private Boolean enable;
+
+ /**
+ * 起始时间
+ */
+ private LocalDate startTime;
+
+ /**
+ * 结束时间
+ */
+ private LocalDate endTime;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductIntroUpdateRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductIntroUpdateRequest.java
new file mode 100644
index 00000000..1d615d07
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductIntroUpdateRequest.java
@@ -0,0 +1,14 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ProductIntroUpdateRequest extends ProductIntroAddRequest {
+
+ @NotNull
+ private Integer id;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelAddRequest.java
new file mode 100644
index 00000000..b10e3f76
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelAddRequest.java
@@ -0,0 +1,46 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Data
+public class ProductModelAddRequest {
+
+ /**
+ * 产品类型ID
+ */
+ @NotNull
+ private Integer typeId;
+
+ /**
+ * 排序
+ */
+ private Integer sort;
+
+ /**
+ * 热点图片
+ */
+ private String hotImage;
+
+ /**
+ * 多语言数据
+ */
+ private List items;
+
+ /**
+ * 图册
+ */
+ private List images;
+
+ /**
+ * 视频
+ */
+ private List videos;
+
+ /**
+ * 参数
+ */
+ private List params;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelImageAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelImageAddRequest.java
new file mode 100644
index 00000000..15e663e3
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelImageAddRequest.java
@@ -0,0 +1,27 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+@Data
+public class ProductModelImageAddRequest {
+
+ /**
+ * 主键,添加时为空
+ */
+ private Integer id;
+
+ /**
+ * 语言编码
+ */
+ private String languageCode;
+
+ /**
+ * 图片
+ */
+ private String image;
+
+ /**
+ * 描述
+ */
+ private String content;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelInfoAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelInfoAddRequest.java
new file mode 100644
index 00000000..d7d5dafc
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelInfoAddRequest.java
@@ -0,0 +1,37 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+@Data
+public class ProductModelInfoAddRequest {
+
+ /**
+ * 主键,添加时为空
+ */
+ private Integer id;
+
+ /**
+ * 模型id
+ */
+ private Integer modelId;
+
+ /**
+ * 语言代码
+ */
+ private String languageCode;
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 描述
+ */
+ private String desc;
+
+ /**
+ * 图片或者视频地址
+ */
+ private String url;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelSearchRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelSearchRequest.java
new file mode 100644
index 00000000..f5ec5855
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelSearchRequest.java
@@ -0,0 +1,31 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDate;
+
+@Data
+public class ProductModelSearchRequest extends PageRequest{
+
+ /**
+ * 产品类型ID
+ */
+ @NotNull
+ private Integer typeId;
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 起始时间
+ */
+ private LocalDate startTime;
+
+ /**
+ * 结束时间
+ */
+ private LocalDate endTime;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelUpdateRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelUpdateRequest.java
new file mode 100644
index 00000000..2743e9e9
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelUpdateRequest.java
@@ -0,0 +1,15 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+public class ProductModelUpdateRequest extends ProductModelAddRequest{
+
+ /**
+ * 主键
+ */
+ @NotNull
+ private Integer id;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelVideoAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelVideoAddRequest.java
new file mode 100644
index 00000000..cfae6a54
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelVideoAddRequest.java
@@ -0,0 +1,12 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+@Data
+public class ProductModelVideoAddRequest extends ProductModelImageAddRequest{
+
+ /**
+ * 视频地址
+ */
+ private String video;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductParamsAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductParamsAddRequest.java
new file mode 100644
index 00000000..e36f270e
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductParamsAddRequest.java
@@ -0,0 +1,27 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+@Data
+public class ProductParamsAddRequest {
+
+ /**
+ * 主键,添加时为空
+ */
+ private Integer id;
+
+ /**
+ * 字典项ID
+ */
+ private Integer dictionaryItemId;
+
+ /**
+ * 语言编码
+ */
+ private String languageCode;
+
+ /**
+ * 值
+ */
+ private String value;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductPartAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductPartAddRequest.java
new file mode 100644
index 00000000..3e5ac650
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductPartAddRequest.java
@@ -0,0 +1,24 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ProductPartAddRequest {
+
+ /**
+ * 物料变化
+ */
+ private String materialNo;
+
+ /**
+ * 多语言数据
+ */
+ private List items;
+
+ /**
+ * 参数
+ */
+ private List params;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductPartInfoAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductPartInfoAddRequest.java
new file mode 100644
index 00000000..ddb5f576
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductPartInfoAddRequest.java
@@ -0,0 +1,37 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+public class ProductPartInfoAddRequest {
+
+ /**
+ * 主键,添加时为空
+ */
+ private Integer id;
+
+ /**
+ * 语言代码
+ */
+ @NotBlank
+ private String languageCode;
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 介绍
+ */
+ @TableField(value = "`desc`")
+ private String desc;
+
+ /**
+ * 视频或者图片地址
+ */
+ private String url;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductPartSearchRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductPartSearchRequest.java
new file mode 100644
index 00000000..a9141cdb
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductPartSearchRequest.java
@@ -0,0 +1,24 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+import java.time.LocalDate;
+
+@Data
+public class ProductPartSearchRequest extends PageRequest {
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 起始时间
+ */
+ private LocalDate startTime;
+
+ /**
+ * 结束时间
+ */
+ private LocalDate endTime;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductPartUpdateRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductPartUpdateRequest.java
new file mode 100644
index 00000000..63542e27
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductPartUpdateRequest.java
@@ -0,0 +1,15 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+public class ProductPartUpdateRequest extends ProductPartAddRequest{
+
+ /**
+ * 主键
+ */
+ @NotNull
+ private Integer id;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductSeriesAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductSeriesAddRequest.java
new file mode 100644
index 00000000..53d1e981
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductSeriesAddRequest.java
@@ -0,0 +1,19 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ProductSeriesAddRequest {
+
+ /**
+ * 排序
+ */
+ private Integer sort;
+
+ /**
+ * 多语言数据
+ */
+ private List items;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductSeriesInfoAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductSeriesInfoAddRequest.java
new file mode 100644
index 00000000..20bb5c72
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductSeriesInfoAddRequest.java
@@ -0,0 +1,24 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+@Data
+public class ProductSeriesInfoAddRequest {
+
+ private Integer id;
+
+ /**
+ * 语言代码
+ */
+ private String languageCode;
+
+ /**
+ * 图片
+ */
+ private String image;
+
+ /**
+ * 内容
+ */
+ private String content;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductSeriesSearchRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductSeriesSearchRequest.java
new file mode 100644
index 00000000..41787407
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductSeriesSearchRequest.java
@@ -0,0 +1,24 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+import java.time.LocalDate;
+
+@Data
+public class ProductSeriesSearchRequest extends PageRequest{
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 起始时间
+ */
+ private LocalDate startTime;
+
+ /**
+ * 结束时间
+ */
+ private LocalDate endTime;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductSeriesUpdateRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductSeriesUpdateRequest.java
new file mode 100644
index 00000000..09e69e9e
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductSeriesUpdateRequest.java
@@ -0,0 +1,12 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+public class ProductSeriesUpdateRequest extends ProductSeriesAddRequest {
+
+ @NotNull
+ private Integer id;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductTypeAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductTypeAddRequest.java
new file mode 100644
index 00000000..8b5efa22
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductTypeAddRequest.java
@@ -0,0 +1,31 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Data
+public class ProductTypeAddRequest {
+
+ /**
+ * 系列id
+ */
+ @NotNull
+ private Integer seriesId;
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 排序
+ */
+ private Integer sort;
+
+ /**
+ * 多语言数据
+ */
+ private List items;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductTypeInfoAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductTypeInfoAddRequest.java
new file mode 100644
index 00000000..7da69949
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductTypeInfoAddRequest.java
@@ -0,0 +1,32 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+@Data
+public class ProductTypeInfoAddRequest {
+
+ /**
+ * 主键,添加时为空
+ */
+ private Integer id;
+
+ /**
+ * 语言代码
+ */
+ private String languageCode;
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 图片
+ */
+ private String image;
+
+ /**
+ * 内容
+ */
+ private String content;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductTypeSearchRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductTypeSearchRequest.java
new file mode 100644
index 00000000..74e0e3c2
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductTypeSearchRequest.java
@@ -0,0 +1,31 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDate;
+
+@Data
+public class ProductTypeSearchRequest extends PageRequest{
+
+ /**
+ * 系列ID
+ */
+ @NotNull
+ private Integer seriesId;
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 起始时间
+ */
+ private LocalDate startTime;
+
+ /**
+ * 结束时间
+ */
+ private LocalDate endTime;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductTypeUpdateRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductTypeUpdateRequest.java
new file mode 100644
index 00000000..bffa3c2d
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductTypeUpdateRequest.java
@@ -0,0 +1,15 @@
+package com.nflg.mobilebroken.common.pojo.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+public class ProductTypeUpdateRequest extends ProductTypeAddRequest{
+
+ /**
+ * 主键
+ */
+ @NotNull
+ private Integer id;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductCaseSearchVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductCaseSearchVO.java
new file mode 100644
index 00000000..a5da4bc3
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductCaseSearchVO.java
@@ -0,0 +1,46 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class ProductCaseSearchVO {
+
+ private String id;
+
+ /**
+ * 标题
+ */
+ private String title;
+
+ /**
+ * 是否启用
+ */
+ private Boolean enable;
+
+ /**
+ * 排序
+ */
+ private Integer sort;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductCaseVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductCaseVO.java
new file mode 100644
index 00000000..37f14163
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductCaseVO.java
@@ -0,0 +1,22 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+
+@Data
+public class ProductCaseVO {
+
+ /**
+ * 描述
+ */
+ private String desc;
+
+ /**
+ * 视频封面图片
+ */
+ private String image;
+
+ /**
+ * 视频地址
+ */
+ private String video;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductFileVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductFileVO.java
new file mode 100644
index 00000000..b21352c5
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductFileVO.java
@@ -0,0 +1,27 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+
+@Data
+public class ProductFileVO {
+
+ /**
+ * 文件名
+ */
+ private String name;
+
+ /**
+ * 文件类型
+ */
+ private String type;
+
+ /**
+ * 文件地址
+ */
+ private String url;
+
+ /**
+ * 文件大小,单位KB
+ */
+ private Integer size;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductHonorSearchVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductHonorSearchVO.java
new file mode 100644
index 00000000..3f0c6ded
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductHonorSearchVO.java
@@ -0,0 +1,40 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+@Data
+public class ProductHonorSearchVO {
+
+ /**
+ * 标题
+ */
+ private String title;
+
+ /**
+ * 获得时间
+ */
+ private LocalDate obtainingTime;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductHonorVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductHonorVO.java
new file mode 100644
index 00000000..049284b5
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductHonorVO.java
@@ -0,0 +1,22 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+
+@Data
+public class ProductHonorVO {
+
+ /**
+ * 年份
+ **/
+ private int year;
+
+ /**
+ * 荣誉名称
+ **/
+ private String title;
+
+ /**
+ * 荣誉图片
+ **/
+ private String image;
+}
\ No newline at end of file
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductImageVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductImageVO.java
new file mode 100644
index 00000000..ed6f6209
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductImageVO.java
@@ -0,0 +1,17 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+
+@Data
+public class ProductImageVO {
+
+ /**
+ * 图片地址
+ */
+ private String url;
+
+ /**
+ * 描述
+ */
+ private String content;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductIntroSearchVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductIntroSearchVO.java
new file mode 100644
index 00000000..5f32c4d5
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductIntroSearchVO.java
@@ -0,0 +1,46 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class ProductIntroSearchVO {
+
+ private Integer id;
+
+ /**
+ * 字典项id
+ */
+ private Integer dictionaryItemId;
+
+ /**
+ * 字典项名称
+ */
+ private String dictionaryItemName;
+
+ /**
+ * 排序
+ */
+ private Integer sort;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
\ No newline at end of file
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductIntroVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductIntroVO.java
new file mode 100644
index 00000000..ea77da3a
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductIntroVO.java
@@ -0,0 +1,32 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+
+@Data
+public class ProductIntroVO {
+
+ /**
+ * 字典项名称
+ */
+ private String dictionaryItemName;
+
+ /**
+ * 标题
+ */
+ private String name;
+
+ /**
+ * 内容
+ */
+ private String desc;
+
+ /**
+ * 图片地址
+ */
+ private String image;
+
+ /**
+ * 图片位置,1:左边;2:右边
+ */
+ private Integer imagePosition;
+}
\ No newline at end of file
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelInfoVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelInfoVO.java
new file mode 100644
index 00000000..c9aecaa7
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelInfoVO.java
@@ -0,0 +1,46 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ProductModelInfoVO {
+
+ private Integer id;
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 描述
+ */
+ private String desc;
+
+ /**
+ * 图片或者视频地址
+ */
+ private String url;
+
+ /**
+ * 热点图片
+ */
+ private String hotImage;
+
+ /**
+ * 产品图册
+ */
+ private List images;
+
+ /**
+ * 产品视频
+ */
+ private List videos;
+
+ /**
+ * 产品资料
+ */
+ private List files;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelParamsVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelParamsVO.java
new file mode 100644
index 00000000..de0b22cd
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelParamsVO.java
@@ -0,0 +1,28 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+public class ProductModelParamsVO {
+
+ private Integer id;
+
+ /**
+ * 机型名称
+ */
+ private String name;
+
+ /**
+ * 机型图片
+ */
+ private String url;
+
+ /**
+ * 机型参数列表
+ */
+ private List params;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelSearchVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelSearchVO.java
new file mode 100644
index 00000000..4e44c26f
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelSearchVO.java
@@ -0,0 +1,41 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class ProductModelSearchVO {
+
+ private Integer id;
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 排序
+ */
+ private Integer sort;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelVO.java
new file mode 100644
index 00000000..5080f9bc
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelVO.java
@@ -0,0 +1,24 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+
+@Data
+public class ProductModelVO {
+
+ private Integer id;
+
+ /**
+ * 机型名称
+ */
+ private String name;
+
+ /**
+ * 机型描述
+ */
+ private String desc;
+
+ /**
+ * 图片或者视频url
+ */
+ private String url;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductParamsInfoVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductParamsInfoVO.java
new file mode 100644
index 00000000..0372b3fd
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductParamsInfoVO.java
@@ -0,0 +1,24 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+public class ProductParamsInfoVO {
+
+ /**
+ * 字典项ID
+ */
+ private Integer dictionaryItemId;
+
+ /**
+ * 字典项值
+ */
+ private String dictionaryItemName;
+
+ /**
+ * 参数值
+ */
+ private String value;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductParamsVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductParamsVO.java
new file mode 100644
index 00000000..9d1c71e5
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductParamsVO.java
@@ -0,0 +1,26 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+public class ProductParamsVO {
+
+ /**
+ * 字典ID
+ */
+ private Integer dictionaryId;
+
+ /**
+ * 字典值
+ */
+ private String dictionaryName;
+
+ /**
+ * 参数列表
+ */
+ private List items;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductPartInfoVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductPartInfoVO.java
new file mode 100644
index 00000000..5c47d694
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductPartInfoVO.java
@@ -0,0 +1,36 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ProductPartInfoVO {
+
+ private Integer id;
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 物料编号
+ */
+ private String materialNo;
+
+ /**
+ * 描述
+ */
+ private String desc;
+
+ /**
+ * 图片
+ */
+ private String url;
+
+ /**
+ * 参数
+ */
+ private List params;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductPartSearchVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductPartSearchVO.java
new file mode 100644
index 00000000..99b5d215
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductPartSearchVO.java
@@ -0,0 +1,41 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class ProductPartSearchVO {
+
+ private Integer id;
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 物料编号
+ */
+ private String materialNo;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductSeriesSearchVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductSeriesSearchVO.java
new file mode 100644
index 00000000..c4fac8d4
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductSeriesSearchVO.java
@@ -0,0 +1,41 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class ProductSeriesSearchVO {
+
+ private Integer id;
+
+ /**
+ * 系列名称
+ */
+ private String name;
+
+ /**
+ * 排序
+ */
+ private Integer sort;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductSeriesVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductSeriesVO.java
new file mode 100644
index 00000000..299965d2
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductSeriesVO.java
@@ -0,0 +1,24 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+
+@Data
+public class ProductSeriesVO {
+
+ private Integer id;
+
+ /**
+ * 系列名称
+ */
+ private String name;
+
+ /**
+ * 内容
+ */
+ private String content;
+
+ /**
+ * 图片
+ */
+ private String image;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductTypeSearchVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductTypeSearchVO.java
new file mode 100644
index 00000000..f1d48f35
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductTypeSearchVO.java
@@ -0,0 +1,41 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class ProductTypeSearchVO {
+
+ private Integer id;
+
+ /**
+ * 类型名称
+ */
+ private String name;
+
+ /**
+ * 排序
+ */
+ private Integer sort;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductTypeVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductTypeVO.java
new file mode 100644
index 00000000..9af7b2d0
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductTypeVO.java
@@ -0,0 +1,24 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+
+@Data
+public class ProductTypeVO {
+
+ private Integer id;
+
+ /**
+ * 类型名称
+ */
+ private String name;
+
+ /**
+ * 类型图片
+ */
+ private String image;
+
+ /**
+ * 类型介绍
+ */
+ private String content;
+}
diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductVideoVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductVideoVO.java
new file mode 100644
index 00000000..eaa05bbb
--- /dev/null
+++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductVideoVO.java
@@ -0,0 +1,12 @@
+package com.nflg.mobilebroken.common.pojo.vo;
+
+import lombok.Data;
+
+@Data
+public class ProductVideoVO extends ProductImageVO{
+
+ /**
+ * 视频地址
+ */
+ private String video;
+}
diff --git a/nflg-mobilebroken-product/pom.xml b/nflg-mobilebroken-product/pom.xml
new file mode 100644
index 00000000..610bf619
--- /dev/null
+++ b/nflg-mobilebroken-product/pom.xml
@@ -0,0 +1,88 @@
+
+
+ 4.0.0
+
+ com.nflg
+ nflg-mobilebroken
+ 1.0.0-SNAPSHOT
+
+ nflg-mobilebroken-product
+ 1.0.0-SNAPSHOT
+ 服务-产品中心
+ 产品中心
+ jar
+
+
+ com.nflg
+ nflg-mobilebroken-common
+
+
+ com.nflg
+ nflg-mobilebroken-starter
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+ org.junit.jupiter
+ junit-jupiter
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ com.nflg
+ nflg-mobilebroken-repository
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+ cn.dev33
+ sa-token-spring-boot-starter
+
+
+ cn.dev33
+ sa-token-redis-jackson
+
+
+ org.apache.commons
+ commons-pool2
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 11
+ 11
+
+
+
+
+
+
diff --git a/nflg-mobilebroken-product/src/main/java/com/nflg/mobilebroken/product/ProductApplication.java b/nflg-mobilebroken-product/src/main/java/com/nflg/mobilebroken/product/ProductApplication.java
new file mode 100644
index 00000000..a40c0d7e
--- /dev/null
+++ b/nflg-mobilebroken-product/src/main/java/com/nflg/mobilebroken/product/ProductApplication.java
@@ -0,0 +1,31 @@
+package com.nflg.mobilebroken.product;
+
+import cn.dev33.satoken.SaManager;
+import lombok.extern.slf4j.Slf4j;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@SpringBootApplication
+@MapperScan("com.nflg.mobilebroken.repository.mapper")
+@ComponentScan(basePackages = {
+ "com.nflg.mobilebroken.repository.service"
+ , "com.nflg.mobilebroken.product"
+ , "com.nflg.mobilebroken.starter"
+})
+@EnableDiscoveryClient
+@EnableScheduling
+@Slf4j
+@EnableAsync
+public class ProductApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ProductApplication.class, args);
+ log.info("启动成功,Sa-Token 配置如下:" + SaManager.getConfig());
+ }
+
+}
diff --git a/nflg-mobilebroken-product/src/main/java/com/nflg/mobilebroken/product/controller/AdvertisementController.java b/nflg-mobilebroken-product/src/main/java/com/nflg/mobilebroken/product/controller/AdvertisementController.java
new file mode 100644
index 00000000..8005764a
--- /dev/null
+++ b/nflg-mobilebroken-product/src/main/java/com/nflg/mobilebroken/product/controller/AdvertisementController.java
@@ -0,0 +1,36 @@
+package com.nflg.mobilebroken.product.controller;
+
+import com.nflg.mobilebroken.common.pojo.ApiResult;
+import com.nflg.mobilebroken.common.pojo.request.AdvertisementRequst;
+import com.nflg.mobilebroken.common.pojo.vo.AdvertisementVO;
+import com.nflg.mobilebroken.repository.service.IAdvertisementService;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 广告相关接口
+ * @author 曹鹏飞
+ */
+@RestController
+@RequestMapping("/ad")
+public class AdvertisementController extends BaseController{
+
+ @Resource
+ private IAdvertisementService advertisementService;
+
+ /**
+ * 根据类型获取广告
+ * @param request 请求参数
+ * @return 广告列表
+ */
+ @PostMapping("getByType")
+ public ApiResult getAdvertisement(@Valid @RequestBody @NotNull AdvertisementRequst request){
+ return ApiResult.success(advertisementService.getByType(request.getType(),request.getPosition()));
+ }
+}
diff --git a/nflg-mobilebroken-product/src/main/java/com/nflg/mobilebroken/product/controller/BaseController.java b/nflg-mobilebroken-product/src/main/java/com/nflg/mobilebroken/product/controller/BaseController.java
new file mode 100644
index 00000000..de5dc5a6
--- /dev/null
+++ b/nflg-mobilebroken-product/src/main/java/com/nflg/mobilebroken/product/controller/BaseController.java
@@ -0,0 +1,9 @@
+package com.nflg.mobilebroken.product.controller;
+
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RestController;
+
+@Validated
+@RestController
+public class BaseController {
+}
diff --git a/nflg-mobilebroken-product/src/main/java/com/nflg/mobilebroken/product/controller/DataController.java b/nflg-mobilebroken-product/src/main/java/com/nflg/mobilebroken/product/controller/DataController.java
new file mode 100644
index 00000000..cf252f64
--- /dev/null
+++ b/nflg-mobilebroken-product/src/main/java/com/nflg/mobilebroken/product/controller/DataController.java
@@ -0,0 +1,80 @@
+package com.nflg.mobilebroken.product.controller;
+
+import com.nflg.mobilebroken.common.pojo.ApiResult;
+import com.nflg.mobilebroken.common.pojo.vo.*;
+import com.nflg.mobilebroken.common.util.MultilingualUtil;
+import com.nflg.mobilebroken.repository.service.IProductModelService;
+import com.nflg.mobilebroken.repository.service.IProductSeriesService;
+import com.nflg.mobilebroken.repository.service.IProductTypeService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * 系列
+ */
+@Slf4j
+@RestController
+@RequestMapping("/data")
+public class DataController extends BaseController{
+
+ @Resource
+ private IProductSeriesService productSeriesService;
+
+ @Resource
+ private IProductTypeService productTypeService;
+
+ @Resource
+ private IProductModelService productModelService;
+
+ /**
+ * 获取产品系列列表
+ */
+ @GetMapping("/getSeries")
+ public ApiResult> getSeries(){
+ return ApiResult.success(productSeriesService.get(MultilingualUtil.getLanguage()));
+ }
+
+ /**
+ * 获取产品类型列表
+ * @param seriesId 产品系列id
+ */
+ @GetMapping("/getType")
+ public ApiResult> getType(@Valid @RequestParam @NotNull Integer seriesId){
+ return ApiResult.success(productTypeService.get(seriesId,MultilingualUtil.getLanguage()));
+ }
+
+ /**
+ * 获取产品机型列表
+ * @param typeId 产品类型id
+ */
+ @GetMapping("/getModel")
+ public ApiResult> getModel(@Valid @RequestParam @NotNull Integer typeId){
+ return ApiResult.success(productModelService.get(typeId,MultilingualUtil.getLanguage()));
+ }
+
+ /**
+ * 获取产品机型详情
+ * @param modelId 产品机型id
+ */
+ @GetMapping("/getModelInfo")
+ public ApiResult getModelInfo(@Valid @RequestParam @NotNull Integer modelId){
+ return ApiResult.success(productModelService.getInfo(modelId,MultilingualUtil.getLanguage()));
+ }
+
+ /**
+ * 获取产品机型参数列表
+ * @param modelId 产品机型id
+ */
+ @GetMapping("/getModelParams")
+ public ApiResult getModelParams(@Valid @RequestParam @NotNull Integer modelId){
+ return ApiResult.success(productModelService.getParams(modelId,MultilingualUtil.getLanguage()));
+ }
+}
diff --git a/nflg-mobilebroken-product/src/main/java/com/nflg/mobilebroken/product/controller/InfoController.java b/nflg-mobilebroken-product/src/main/java/com/nflg/mobilebroken/product/controller/InfoController.java
new file mode 100644
index 00000000..b4aa2352
--- /dev/null
+++ b/nflg-mobilebroken-product/src/main/java/com/nflg/mobilebroken/product/controller/InfoController.java
@@ -0,0 +1,59 @@
+package com.nflg.mobilebroken.product.controller;
+
+import com.nflg.mobilebroken.common.pojo.ApiResult;
+import com.nflg.mobilebroken.common.pojo.vo.ProductCaseVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductHonorVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductIntroVO;
+import com.nflg.mobilebroken.common.util.MultilingualUtil;
+import com.nflg.mobilebroken.repository.service.IProductCaseService;
+import com.nflg.mobilebroken.repository.service.IProductHonorService;
+import com.nflg.mobilebroken.repository.service.IProductIntroService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 基础信息
+ */
+@Slf4j
+@RestController
+@RequestMapping("/base")
+public class InfoController extends BaseController{
+
+ @Resource
+ private IProductIntroService productIntroService;
+
+ @Resource
+ private IProductHonorService productHonorService;
+
+ @Resource
+ private IProductCaseService productCaseService;
+
+ /**
+ * 获取多语言环境介绍
+ */
+ @GetMapping("/getIntro")
+ public ApiResult> getIntro(){
+ return ApiResult.success(productIntroService.get(MultilingualUtil.getLanguage()));
+ }
+
+ /**
+ * 获取多语言环境荣誉
+ */
+ @GetMapping("/getHonor")
+ public ApiResult> getHonor(){
+ return ApiResult.success(productHonorService.get(MultilingualUtil.getLanguage()));
+ }
+
+ /**
+ * 获取多语言环境案例
+ */
+ @GetMapping("/getCase")
+ public ApiResult> getCase(){
+ return ApiResult.success(productCaseService.get(MultilingualUtil.getLanguage()));
+ }
+}
diff --git a/nflg-mobilebroken-product/src/main/resources/bootstrap-dev.properties b/nflg-mobilebroken-product/src/main/resources/bootstrap-dev.properties
new file mode 100644
index 00000000..3e8f7af9
--- /dev/null
+++ b/nflg-mobilebroken-product/src/main/resources/bootstrap-dev.properties
@@ -0,0 +1,15 @@
+# Nacos 地址
+nacos.server-addr=${NACOS_SERVER_ADDR:112.74.186.154:8848}
+#nacos.server-addr=192.168.0.194:8848
+#spring.cloud.nacos.discovery.username=nacos
+#spring.cloud.nacos.discovery.password=ZLQ8vgmjoJ4?EPJ4]fs_
+#spring.config.activate.on-profile=dev
+logging.level.com.nflg=DEBUG
+logging.level.com.alibaba.cloud.nacos.config=DEBUG
+
+#spring.datasource.url=jdbc:mysql://112.74.186.154:13151/mobilebroken?useUnicode=true&characterEncoding=utf8mb4&tinyInt1isBit=false&useSSL=false&rewriteBatchedStatements=true&allowMultiQueries=true&serverTimezone=GMT%2B8
+#spring.datasource.username=nflg
+#spring.datasource.password=Aciga@2022
+#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+
+logging.config=classpath:logback-sit.xml
\ No newline at end of file
diff --git a/nflg-mobilebroken-product/src/main/resources/bootstrap.properties b/nflg-mobilebroken-product/src/main/resources/bootstrap.properties
new file mode 100644
index 00000000..9696db1d
--- /dev/null
+++ b/nflg-mobilebroken-product/src/main/resources/bootstrap.properties
@@ -0,0 +1,31 @@
+spring.application.name=product
+spring.profiles.active=dev
+server.port=8084
+# 设置最大文件大小 (默认为1MB)
+spring.servlet.multipart.max-file-size=100MB
+# 设置所有文件总大小 (默认为10MB)
+spring.servlet.multipart.max-request-size=500MB
+#spring.config.import=classpath:application-${spring.profiles.active}.properties,nacos:
+#spring.config.import=nacos:
+logging.level.root=info
+#logging.level.com.alibaba.nacos.client=DEBUG
+#logging.level.org.springframework.boot.context.config=DEBUG
+#logging.config=classpath:logback-sit.xml
+
+# 启用服务发现自动路由
+spring.cloud.gateway.discovery.locator.enabled=true
+spring.cloud.nacos.config.namespace=mobilebroken
+spring.cloud.nacos.config.group=${spring.profiles.active}
+spring.cloud.nacos.config.server-addr=${nacos.server-addr}
+spring.cloud.nacos.config.file-extension=properties
+spring.cloud.nacos.config.extension-configs[0].data-id=shared.properties
+spring.cloud.nacos.config.extension-configs[0].group=${spring.profiles.active}
+spring.cloud.nacos.config.extension-configs[0].refresh=true
+spring.cloud.nacos.discovery.server-addr=${nacos.server-addr}
+spring.cloud.nacos.discovery.namespace=mobilebroken
+spring.cloud.nacos.discovery.group=${spring.profiles.active}
+spring.cloud.nacos.discovery.metadata.env=${spring.profiles.active}
+
+# 日期格式
+spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
+spring.jackson.time-zone=GMT+8
\ No newline at end of file
diff --git a/nflg-mobilebroken-product/src/main/resources/logback-sit.xml b/nflg-mobilebroken-product/src/main/resources/logback-sit.xml
new file mode 100644
index 00000000..56d1e532
--- /dev/null
+++ b/nflg-mobilebroken-product/src/main/resources/logback-sit.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} %X{traceId} [%thread] %-5level %logger{10} %msg%n
+
+
+
+
+
+
+ debug
+
+ ${logDir}/mobilebroken-product.log
+
+
+ ${logDir}/%d{yyyy-MM-dd}.%i.log
+
+ 15
+
+ true
+
+ ${splitSize}
+
+
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} %X{traceId} [%thread] %-5level %logger{50} %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductCase.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductCase.java
new file mode 100644
index 00000000..fd094ade
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductCase.java
@@ -0,0 +1,66 @@
+package com.nflg.mobilebroken.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 产品中心-案例
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("product_case")
+public class ProductCase implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 标题
+ */
+ private String title;
+
+ /**
+ * 排序
+ */
+ private Integer sort;
+
+ /**
+ * 是否启用
+ */
+ private Boolean enable;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductCaseInfo.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductCaseInfo.java
new file mode 100644
index 00000000..8f220377
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductCaseInfo.java
@@ -0,0 +1,76 @@
+package com.nflg.mobilebroken.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 产品中心-案例-详情
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("product_case_info")
+public class ProductCaseInfo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 案例id
+ */
+ private Integer caseId;
+
+ /**
+ * 语言代码
+ */
+ private String languageCode;
+
+ /**
+ * 描述
+ */
+ private String desc;
+
+ /**
+ * 视频封面图片地址
+ */
+ private String image;
+
+ /**
+ * 视频地址
+ */
+ private String video;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductHonor.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductHonor.java
new file mode 100644
index 00000000..9c02a3d2
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductHonor.java
@@ -0,0 +1,62 @@
+package com.nflg.mobilebroken.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 产品中心-荣誉
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("product_honor")
+public class ProductHonor implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 获得时间
+ */
+ private LocalDate obtainingTime;
+
+ /**
+ * 是否启用
+ */
+ private Boolean enable;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductHonorInfo.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductHonorInfo.java
new file mode 100644
index 00000000..36b9602f
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductHonorInfo.java
@@ -0,0 +1,71 @@
+package com.nflg.mobilebroken.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 产品中心-荣誉详情
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("product_honor_info")
+public class ProductHonorInfo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 荣誉id
+ */
+ private Integer honorId;
+
+ /**
+ * 语言代码
+ */
+ private String languageCode;
+
+ /**
+ * 标题
+ */
+ private String title;
+
+ /**
+ * 图片地址
+ */
+ private String image;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductIntro.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductIntro.java
new file mode 100644
index 00000000..49d2f922
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductIntro.java
@@ -0,0 +1,66 @@
+package com.nflg.mobilebroken.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 产品中心-介绍
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("product_intro")
+public class ProductIntro implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 字典值id
+ */
+ private Integer dictionaryItemId;
+
+ /**
+ * 排序
+ */
+ private Integer sort;
+
+ /**
+ * 是否启用
+ */
+ private Boolean enable;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductIntroInfo.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductIntroInfo.java
new file mode 100644
index 00000000..463701b4
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductIntroInfo.java
@@ -0,0 +1,81 @@
+package com.nflg.mobilebroken.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 产品中心-介绍详情
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("product_intro_info")
+public class ProductIntroInfo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 介绍id
+ */
+ private Integer introId;
+
+ /**
+ * 语言代码
+ */
+ private String languageCode;
+
+ /**
+ * 标题
+ */
+ private String name;
+
+ /**
+ * 内容
+ */
+ private String desc;
+
+ /**
+ * 图片地址
+ */
+ private String image;
+
+ /**
+ * 图片位置,1:左边;2:右边
+ */
+ private Integer imagePosition;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModel.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModel.java
new file mode 100644
index 00000000..a14a07e7
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModel.java
@@ -0,0 +1,66 @@
+package com.nflg.mobilebroken.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 产品中心-产品机型
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("product_model")
+public class ProductModel implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 产品类型id
+ */
+ private Integer typeId;
+
+ /**
+ * 热点图片
+ */
+ private String hotImage;
+
+ /**
+ * 排序
+ */
+ private Integer sort;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelFile.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelFile.java
new file mode 100644
index 00000000..96d35c59
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelFile.java
@@ -0,0 +1,81 @@
+package com.nflg.mobilebroken.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 产品中心-产品机型-文件
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("product_model_file")
+public class ProductModelFile implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 产品机型id
+ */
+ private Integer modelId;
+
+ /**
+ * 语言代码
+ */
+ private String languageCode;
+
+ /**
+ * 文件名称
+ */
+ private String name;
+
+ /**
+ * 文件后缀
+ */
+ private String type;
+
+ /**
+ * 下载地址
+ */
+ private String url;
+
+ /**
+ * 文件大小,单位KB
+ */
+ private Integer size;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelImage.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelImage.java
new file mode 100644
index 00000000..0f5bddaf
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelImage.java
@@ -0,0 +1,71 @@
+package com.nflg.mobilebroken.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 产品中心-产品机型-图片
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("product_model_image")
+public class ProductModelImage implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 产品机型id
+ */
+ private Integer modelId;
+
+ /**
+ * 语言代码
+ */
+ private String languageCode;
+
+ /**
+ * 图片描述
+ */
+ private String content;
+
+ /**
+ * 图片地址
+ */
+ private String image;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelInfo.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelInfo.java
new file mode 100644
index 00000000..26807a7b
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelInfo.java
@@ -0,0 +1,76 @@
+package com.nflg.mobilebroken.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 产品中心-机型详情
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("product_model_info")
+public class ProductModelInfo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 机型id
+ */
+ private Integer modeId;
+
+ /**
+ * 语言代码
+ */
+ private String languageCode;
+
+ /**
+ * 机型名称
+ */
+ private String name;
+
+ /**
+ * 机型介绍
+ */
+ private String desc;
+
+ /**
+ * 视频或者图片地址
+ */
+ private String url;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelParams.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelParams.java
new file mode 100644
index 00000000..23f65751
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelParams.java
@@ -0,0 +1,71 @@
+package com.nflg.mobilebroken.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 产品中心-机型-参数
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("product_model_params")
+public class ProductModelParams implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 机型id
+ */
+ private Integer modelId;
+
+ /**
+ * 语言代码
+ */
+ private String languageCode;
+
+ /**
+ * 字典值id
+ */
+ private Integer dictionaryItemId;
+
+ /**
+ * 参数值
+ */
+ private String value;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelVideo.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelVideo.java
new file mode 100644
index 00000000..738e6567
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelVideo.java
@@ -0,0 +1,76 @@
+package com.nflg.mobilebroken.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 产品中心-产品机型-视频
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("product_model_video")
+public class ProductModelVideo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 产品机型id
+ */
+ private Integer modelId;
+
+ /**
+ * 语言代码
+ */
+ private String languageCode;
+
+ /**
+ * 视频地址
+ */
+ private String video;
+
+ /**
+ * 视频描述
+ */
+ private String content;
+
+ /**
+ * 视频封面地址
+ */
+ private String image;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductPart.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductPart.java
new file mode 100644
index 00000000..1220cf55
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductPart.java
@@ -0,0 +1,56 @@
+package com.nflg.mobilebroken.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 产品中心-部件
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("product_part")
+public class ProductPart implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 物料编码
+ */
+ private String materialNo;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductPartInfo.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductPartInfo.java
new file mode 100644
index 00000000..bdc5d647
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductPartInfo.java
@@ -0,0 +1,76 @@
+package com.nflg.mobilebroken.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 产品中心-部件详情
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("product_part_info")
+public class ProductPartInfo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 部件id
+ */
+ private Integer partId;
+
+ /**
+ * 语言代码
+ */
+ private String languageCode;
+
+ /**
+ * 部件名称
+ */
+ private String name;
+
+ /**
+ * 部件介绍
+ */
+ private String desc;
+
+ /**
+ * 视频或者图片地址
+ */
+ private String url;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductPartParams.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductPartParams.java
new file mode 100644
index 00000000..ba7af94f
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductPartParams.java
@@ -0,0 +1,71 @@
+package com.nflg.mobilebroken.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 产品中心-部件-参数
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("product_part_params")
+public class ProductPartParams implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 部件id
+ */
+ private Integer partId;
+
+ /**
+ * 语言代码
+ */
+ private String languageCode;
+
+ /**
+ * 字典值id
+ */
+ private Integer dictionaryItemId;
+
+ /**
+ * 参数值
+ */
+ private String value;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductSeries.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductSeries.java
new file mode 100644
index 00000000..9febf898
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductSeries.java
@@ -0,0 +1,56 @@
+package com.nflg.mobilebroken.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 产品中心-产品系列
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("product_series")
+public class ProductSeries implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 排序
+ */
+ private Integer sort;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductSeriesInfo.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductSeriesInfo.java
new file mode 100644
index 00000000..a0153e1f
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductSeriesInfo.java
@@ -0,0 +1,76 @@
+package com.nflg.mobilebroken.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 产品中心-产品系列详情
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("product_series_info")
+public class ProductSeriesInfo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 产品系列id
+ */
+ private Integer seriesId;
+
+ /**
+ * 语言代码
+ */
+ private String languageCode;
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 图片地址
+ */
+ private String image;
+
+ /**
+ * 内容
+ */
+ private String content;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductType.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductType.java
new file mode 100644
index 00000000..18b00030
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductType.java
@@ -0,0 +1,61 @@
+package com.nflg.mobilebroken.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 产品中心-产品类型
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("product_type")
+public class ProductType implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 系列id
+ */
+ private Integer seriesId;
+
+ /**
+ * 排序
+ */
+ private Integer sort;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductTypeInfo.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductTypeInfo.java
new file mode 100644
index 00000000..16a43609
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductTypeInfo.java
@@ -0,0 +1,76 @@
+package com.nflg.mobilebroken.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 产品中心-产品类型详情
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("product_type_info")
+public class ProductTypeInfo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 产品类型id
+ */
+ private Integer typeId;
+
+ /**
+ * 语言代码
+ */
+ private String languageCode;
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 内容
+ */
+ private String content;
+
+ /**
+ * 图片地址
+ */
+ private String image;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductCaseInfoMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductCaseInfoMapper.java
new file mode 100644
index 00000000..11eba438
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductCaseInfoMapper.java
@@ -0,0 +1,16 @@
+package com.nflg.mobilebroken.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nflg.mobilebroken.repository.entity.ProductCaseInfo;
+
+/**
+ *
+ * 产品中心-案例-详情 Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface ProductCaseInfoMapper extends BaseMapper {
+
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductCaseMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductCaseMapper.java
new file mode 100644
index 00000000..6ff18d36
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductCaseMapper.java
@@ -0,0 +1,19 @@
+package com.nflg.mobilebroken.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nflg.mobilebroken.common.pojo.vo.ProductCaseVO;
+import com.nflg.mobilebroken.repository.entity.ProductCase;
+
+import java.util.List;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface ProductCaseMapper extends BaseMapper {
+ List get(String language);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductHonorInfoMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductHonorInfoMapper.java
new file mode 100644
index 00000000..00099b8c
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductHonorInfoMapper.java
@@ -0,0 +1,16 @@
+package com.nflg.mobilebroken.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nflg.mobilebroken.repository.entity.ProductHonorInfo;
+
+/**
+ *
+ * 产品中心-荣誉详情 Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface ProductHonorInfoMapper extends BaseMapper {
+
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductHonorMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductHonorMapper.java
new file mode 100644
index 00000000..9611f3f0
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductHonorMapper.java
@@ -0,0 +1,26 @@
+package com.nflg.mobilebroken.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.nflg.mobilebroken.common.pojo.request.ProductHonorSearchRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductHonorSearchVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductHonorVO;
+import com.nflg.mobilebroken.repository.entity.ProductHonor;
+
+import java.util.List;
+
+/**
+ *
+ * 产品中心-荣誉 Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface ProductHonorMapper extends BaseMapper {
+
+ IPage getList(ProductHonorSearchRequest request, Page> page);
+
+ List get(String language);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductIntroInfoMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductIntroInfoMapper.java
new file mode 100644
index 00000000..26079026
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductIntroInfoMapper.java
@@ -0,0 +1,16 @@
+package com.nflg.mobilebroken.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nflg.mobilebroken.repository.entity.ProductIntroInfo;
+
+/**
+ *
+ * 产品中心-介绍详情 Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface ProductIntroInfoMapper extends BaseMapper {
+
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductIntroMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductIntroMapper.java
new file mode 100644
index 00000000..a583105b
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductIntroMapper.java
@@ -0,0 +1,26 @@
+package com.nflg.mobilebroken.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.nflg.mobilebroken.common.pojo.request.ProductIntroSearchRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductIntroSearchVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductIntroVO;
+import com.nflg.mobilebroken.repository.entity.ProductIntro;
+
+import java.util.List;
+
+/**
+ *
+ * 产品中心-介绍 Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface ProductIntroMapper extends BaseMapper {
+
+ IPage getList(ProductIntroSearchRequest request, Page> page);
+
+ List get(String language);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelFileMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelFileMapper.java
new file mode 100644
index 00000000..84087bbc
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelFileMapper.java
@@ -0,0 +1,16 @@
+package com.nflg.mobilebroken.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nflg.mobilebroken.repository.entity.ProductModelFile;
+
+/**
+ *
+ * 产品中心-产品机型-文件 Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface ProductModelFileMapper extends BaseMapper {
+
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelImageMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelImageMapper.java
new file mode 100644
index 00000000..3903f5cc
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelImageMapper.java
@@ -0,0 +1,15 @@
+package com.nflg.mobilebroken.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nflg.mobilebroken.repository.entity.ProductModelImage;
+
+/**
+ *
+ * 产品中心-产品机型-图片 Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface ProductModelImageMapper extends BaseMapper {
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelInfoMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelInfoMapper.java
new file mode 100644
index 00000000..8918f1f4
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelInfoMapper.java
@@ -0,0 +1,16 @@
+package com.nflg.mobilebroken.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nflg.mobilebroken.repository.entity.ProductModelInfo;
+
+/**
+ *
+ * 产品中心-机型详情 Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface ProductModelInfoMapper extends BaseMapper {
+
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelMapper.java
new file mode 100644
index 00000000..a8bd7339
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelMapper.java
@@ -0,0 +1,29 @@
+package com.nflg.mobilebroken.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.nflg.mobilebroken.common.pojo.PageData;
+import com.nflg.mobilebroken.common.pojo.request.ProductModelSearchRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductModelInfoVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductModelSearchVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductModelVO;
+import com.nflg.mobilebroken.repository.entity.ProductModel;
+
+import java.util.List;
+
+/**
+ *
+ * 产品中心-产品机型 Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface ProductModelMapper extends BaseMapper {
+
+ PageData getList(ProductModelSearchRequest request, Page> page);
+
+ List get(Integer typeId, String language);
+
+ ProductModelInfoVO getInfo(Integer modelId, String language);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelParamsMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelParamsMapper.java
new file mode 100644
index 00000000..0017b484
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelParamsMapper.java
@@ -0,0 +1,20 @@
+package com.nflg.mobilebroken.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nflg.mobilebroken.common.pojo.dto.ProductParamsDTO;
+import com.nflg.mobilebroken.repository.entity.ProductModelParams;
+
+import java.util.List;
+
+/**
+ *
+ * 产品中心-机型-参数 Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface ProductModelParamsMapper extends BaseMapper {
+
+ List getInfo(Integer modelId, String language);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelVideoMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelVideoMapper.java
new file mode 100644
index 00000000..f5407dce
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductModelVideoMapper.java
@@ -0,0 +1,16 @@
+package com.nflg.mobilebroken.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nflg.mobilebroken.repository.entity.ProductModelVideo;
+
+/**
+ *
+ * 产品中心-产品机型-视频 Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface ProductModelVideoMapper extends BaseMapper {
+
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductPartInfoMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductPartInfoMapper.java
new file mode 100644
index 00000000..389db4a9
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductPartInfoMapper.java
@@ -0,0 +1,16 @@
+package com.nflg.mobilebroken.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nflg.mobilebroken.repository.entity.ProductPartInfo;
+
+/**
+ *
+ * 产品中心-部件详情 Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface ProductPartInfoMapper extends BaseMapper {
+
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductPartMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductPartMapper.java
new file mode 100644
index 00000000..d1f10818
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductPartMapper.java
@@ -0,0 +1,24 @@
+package com.nflg.mobilebroken.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.nflg.mobilebroken.common.pojo.PageData;
+import com.nflg.mobilebroken.common.pojo.request.ProductPartSearchRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductPartInfoVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductPartSearchVO;
+import com.nflg.mobilebroken.repository.entity.ProductPart;
+
+/**
+ *
+ * 产品中心-部件 Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface ProductPartMapper extends BaseMapper {
+
+ PageData getList(ProductPartSearchRequest request, Page> page);
+
+ ProductPartInfoVO getInfo(Integer partId, String language);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductPartParamsMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductPartParamsMapper.java
new file mode 100644
index 00000000..0228f407
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductPartParamsMapper.java
@@ -0,0 +1,20 @@
+package com.nflg.mobilebroken.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nflg.mobilebroken.common.pojo.dto.ProductParamsDTO;
+import com.nflg.mobilebroken.repository.entity.ProductPartParams;
+
+import java.util.List;
+
+/**
+ *
+ * 产品中心-部件-参数 Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface ProductPartParamsMapper extends BaseMapper {
+
+ List getInfo(Integer partId, String language);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductSeriesInfoMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductSeriesInfoMapper.java
new file mode 100644
index 00000000..c653b3c1
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductSeriesInfoMapper.java
@@ -0,0 +1,16 @@
+package com.nflg.mobilebroken.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nflg.mobilebroken.repository.entity.ProductSeriesInfo;
+
+/**
+ *
+ * 产品中心-产品系列详情 Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface ProductSeriesInfoMapper extends BaseMapper {
+
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductSeriesMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductSeriesMapper.java
new file mode 100644
index 00000000..e72553b1
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductSeriesMapper.java
@@ -0,0 +1,26 @@
+package com.nflg.mobilebroken.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.nflg.mobilebroken.common.pojo.PageData;
+import com.nflg.mobilebroken.common.pojo.request.ProductSeriesSearchRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductSeriesSearchVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductSeriesVO;
+import com.nflg.mobilebroken.repository.entity.ProductSeries;
+
+import java.util.List;
+
+/**
+ *
+ * 产品中心-产品系列 Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface ProductSeriesMapper extends BaseMapper {
+
+ PageData getList(ProductSeriesSearchRequest request, Page> page);
+
+ List get(String language);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductTypeInfoMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductTypeInfoMapper.java
new file mode 100644
index 00000000..47306c57
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductTypeInfoMapper.java
@@ -0,0 +1,16 @@
+package com.nflg.mobilebroken.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nflg.mobilebroken.repository.entity.ProductTypeInfo;
+
+/**
+ *
+ * 产品中心-产品类型详情 Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface ProductTypeInfoMapper extends BaseMapper {
+
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductTypeMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductTypeMapper.java
new file mode 100644
index 00000000..de604b0c
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductTypeMapper.java
@@ -0,0 +1,26 @@
+package com.nflg.mobilebroken.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.nflg.mobilebroken.common.pojo.PageData;
+import com.nflg.mobilebroken.common.pojo.request.ProductTypeSearchRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductTypeSearchVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductTypeVO;
+import com.nflg.mobilebroken.repository.entity.ProductType;
+
+import java.util.List;
+
+/**
+ *
+ * 产品中心-产品类型 Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface ProductTypeMapper extends BaseMapper {
+
+ PageData getList(ProductTypeSearchRequest request, Page> page);
+
+ List get(Integer seriesId, String language);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductCaseInfoService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductCaseInfoService.java
new file mode 100644
index 00000000..bc90f33c
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductCaseInfoService.java
@@ -0,0 +1,22 @@
+package com.nflg.mobilebroken.repository.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.mobilebroken.common.pojo.request.ProductCaseInfoAddRequest;
+import com.nflg.mobilebroken.repository.entity.ProductCaseInfo;
+
+import java.util.List;
+
+/**
+ *
+ * 产品中心-案例-详情 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IProductCaseInfoService extends IService {
+
+ void add(Integer caseId, List items);
+
+ void update(List items);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductCaseService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductCaseService.java
new file mode 100644
index 00000000..709057ca
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductCaseService.java
@@ -0,0 +1,32 @@
+package com.nflg.mobilebroken.repository.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.mobilebroken.common.pojo.PageData;
+import com.nflg.mobilebroken.common.pojo.request.ProductCaseAddRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductCaseSearchRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductCaseUpdateRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductCaseSearchVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductCaseVO;
+import com.nflg.mobilebroken.repository.entity.ProductCase;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ *
+ * 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IProductCaseService extends IService {
+
+ void add(@Valid ProductCaseAddRequest request);
+
+ void update(@Valid ProductCaseUpdateRequest request);
+
+ PageData getList(ProductCaseSearchRequest request);
+
+ List get(String language);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductHonorInfoService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductHonorInfoService.java
new file mode 100644
index 00000000..27128e37
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductHonorInfoService.java
@@ -0,0 +1,22 @@
+package com.nflg.mobilebroken.repository.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.mobilebroken.common.pojo.request.ProductHonorInfoAddRequest;
+import com.nflg.mobilebroken.repository.entity.ProductHonorInfo;
+
+import java.util.List;
+
+/**
+ *
+ * 产品中心-荣誉详情 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IProductHonorInfoService extends IService {
+
+ void add(Integer honorId, List items);
+
+ void update(List items);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductHonorService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductHonorService.java
new file mode 100644
index 00000000..defd1d5f
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductHonorService.java
@@ -0,0 +1,32 @@
+package com.nflg.mobilebroken.repository.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.mobilebroken.common.pojo.request.ProductHonorAddRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductHonorSearchRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductHonorUpdateRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductHonorSearchVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductHonorVO;
+import com.nflg.mobilebroken.repository.entity.ProductHonor;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ *
+ * 产品中心-荣誉 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IProductHonorService extends IService {
+
+ void add(@Valid ProductHonorAddRequest request);
+
+ void update(@Valid ProductHonorUpdateRequest request);
+
+ IPage getList(ProductHonorSearchRequest request);
+
+ List get(String language);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductIntroInfoService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductIntroInfoService.java
new file mode 100644
index 00000000..a9ceece5
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductIntroInfoService.java
@@ -0,0 +1,20 @@
+package com.nflg.mobilebroken.repository.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.mobilebroken.common.pojo.request.ProductIntroInfoAddRequest;
+import com.nflg.mobilebroken.repository.entity.ProductIntroInfo;
+
+import java.util.List;
+
+/**
+ *
+ * 产品中心-介绍详情 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IProductIntroInfoService extends IService {
+
+ void update(List items);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductIntroService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductIntroService.java
new file mode 100644
index 00000000..585d4657
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductIntroService.java
@@ -0,0 +1,31 @@
+package com.nflg.mobilebroken.repository.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.mobilebroken.common.pojo.request.ProductIntroAddRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductIntroSearchRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductIntroUpdateRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductIntroSearchVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductIntroVO;
+import com.nflg.mobilebroken.repository.entity.ProductIntro;
+
+import java.util.List;
+
+/**
+ *
+ * 产品中心-介绍 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IProductIntroService extends IService {
+
+ void add(ProductIntroAddRequest request);
+
+ void update(ProductIntroUpdateRequest request);
+
+ IPage getList(ProductIntroSearchRequest request);
+
+ List get(String language);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelFileService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelFileService.java
new file mode 100644
index 00000000..2864309e
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelFileService.java
@@ -0,0 +1,20 @@
+package com.nflg.mobilebroken.repository.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.mobilebroken.common.pojo.vo.ProductFileVO;
+import com.nflg.mobilebroken.repository.entity.ProductModelFile;
+
+import java.util.List;
+
+/**
+ *
+ * 产品中心-产品机型-文件 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IProductModelFileService extends IService {
+
+ List getByModelId(Integer modelId, String language);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelImageService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelImageService.java
new file mode 100644
index 00000000..cebf6b08
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelImageService.java
@@ -0,0 +1,25 @@
+package com.nflg.mobilebroken.repository.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.mobilebroken.common.pojo.request.ProductModelImageAddRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductImageVO;
+import com.nflg.mobilebroken.repository.entity.ProductModelImage;
+
+import java.util.List;
+
+/**
+ *
+ * 产品中心-产品机型-图片 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IProductModelImageService extends IService {
+
+ List getByModelId(Integer modelId, String language);
+
+ void add(Integer id, List images);
+
+ void update(List images);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelInfoService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelInfoService.java
new file mode 100644
index 00000000..564d02a8
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelInfoService.java
@@ -0,0 +1,24 @@
+package com.nflg.mobilebroken.repository.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.mobilebroken.common.pojo.request.ProductModelInfoAddRequest;
+import com.nflg.mobilebroken.repository.entity.ProductModelInfo;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ *
+ * 产品中心-机型详情 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IProductModelInfoService extends IService {
+
+ void add(Integer modelId, List items);
+
+ @Transactional
+ void update(List items);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelParamsService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelParamsService.java
new file mode 100644
index 00000000..b7699842
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelParamsService.java
@@ -0,0 +1,25 @@
+package com.nflg.mobilebroken.repository.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.mobilebroken.common.pojo.request.ProductParamsAddRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductParamsVO;
+import com.nflg.mobilebroken.repository.entity.ProductModelParams;
+
+import java.util.List;
+
+/**
+ *
+ * 产品中心-机型-参数 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IProductModelParamsService extends IService {
+
+ List getInfo(Integer modelId, String language);
+
+ void add(Integer modelId, List params);
+
+ void update(List params);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelService.java
new file mode 100644
index 00000000..55bd8037
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelService.java
@@ -0,0 +1,39 @@
+package com.nflg.mobilebroken.repository.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.mobilebroken.common.pojo.PageData;
+import com.nflg.mobilebroken.common.pojo.request.ProductModelAddRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductModelSearchRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductModelUpdateRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductModelInfoVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductModelParamsVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductModelSearchVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductModelVO;
+import com.nflg.mobilebroken.repository.entity.ProductModel;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ *
+ * 产品中心-产品机型 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IProductModelService extends IService {
+
+ void add(@Valid ProductModelAddRequest request);
+
+ void update(ProductModelUpdateRequest request);
+
+ PageData getList(ProductModelSearchRequest request);
+
+ List get(@Valid @NotNull Integer typeId, String language);
+
+ ProductModelInfoVO getInfo(@Valid @NotNull Integer modelId, String language);
+
+ ProductModelParamsVO getParams(@Valid @NotNull Integer modelId, String language);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelVideoService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelVideoService.java
new file mode 100644
index 00000000..eea10b3a
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelVideoService.java
@@ -0,0 +1,25 @@
+package com.nflg.mobilebroken.repository.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.mobilebroken.common.pojo.request.ProductModelVideoAddRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductVideoVO;
+import com.nflg.mobilebroken.repository.entity.ProductModelVideo;
+
+import java.util.List;
+
+/**
+ *
+ * 产品中心-产品机型-视频 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IProductModelVideoService extends IService {
+
+ List getByModelId(Integer modelId, String language);
+
+ void add(Integer id, List videos);
+
+ void update(List videos);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductPartInfoService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductPartInfoService.java
new file mode 100644
index 00000000..5ce86dc0
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductPartInfoService.java
@@ -0,0 +1,24 @@
+package com.nflg.mobilebroken.repository.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.mobilebroken.common.pojo.request.ProductPartInfoAddRequest;
+import com.nflg.mobilebroken.repository.entity.ProductPartInfo;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ *
+ * 产品中心-部件详情 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IProductPartInfoService extends IService {
+
+ void add(Integer partId, List items);
+
+ @Transactional
+ void update(List items);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductPartParamsService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductPartParamsService.java
new file mode 100644
index 00000000..8f999deb
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductPartParamsService.java
@@ -0,0 +1,25 @@
+package com.nflg.mobilebroken.repository.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.mobilebroken.common.pojo.request.ProductParamsAddRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductParamsVO;
+import com.nflg.mobilebroken.repository.entity.ProductPartParams;
+
+import java.util.List;
+
+/**
+ *
+ * 产品中心-部件-参数 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IProductPartParamsService extends IService {
+
+ void add(Integer partId, List params);
+
+ void update(List params);
+
+ List getInfo(Integer partId, String language);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductPartService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductPartService.java
new file mode 100644
index 00000000..712dfd3d
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductPartService.java
@@ -0,0 +1,32 @@
+package com.nflg.mobilebroken.repository.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.mobilebroken.common.pojo.PageData;
+import com.nflg.mobilebroken.common.pojo.request.ProductPartAddRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductPartSearchRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductPartUpdateRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductPartInfoVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductPartSearchVO;
+import com.nflg.mobilebroken.repository.entity.ProductPart;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+/**
+ *
+ * 产品中心-部件 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IProductPartService extends IService {
+
+ void add(@Valid ProductPartAddRequest request);
+
+ void update(@Valid ProductPartUpdateRequest request);
+
+ PageData getList(ProductPartSearchRequest request);
+
+ ProductPartInfoVO getInfo(@Valid @NotNull Integer partId, String language);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductSeriesInfoService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductSeriesInfoService.java
new file mode 100644
index 00000000..299ad5fd
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductSeriesInfoService.java
@@ -0,0 +1,22 @@
+package com.nflg.mobilebroken.repository.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.mobilebroken.common.pojo.request.ProductSeriesInfoAddRequest;
+import com.nflg.mobilebroken.repository.entity.ProductSeriesInfo;
+
+import java.util.List;
+
+/**
+ *
+ * 产品中心-产品系列详情 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IProductSeriesInfoService extends IService {
+
+ void add(Integer seriesId,List items);
+
+ void update(List items);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductSeriesService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductSeriesService.java
new file mode 100644
index 00000000..8f35932e
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductSeriesService.java
@@ -0,0 +1,32 @@
+package com.nflg.mobilebroken.repository.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.mobilebroken.common.pojo.PageData;
+import com.nflg.mobilebroken.common.pojo.request.ProductSeriesAddRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductSeriesSearchRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductSeriesUpdateRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductSeriesSearchVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductSeriesVO;
+import com.nflg.mobilebroken.repository.entity.ProductSeries;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ *
+ * 产品中心-产品系列 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IProductSeriesService extends IService {
+
+ void add(@Valid ProductSeriesAddRequest request);
+
+ void update(@Valid ProductSeriesUpdateRequest request);
+
+ PageData getList(ProductSeriesSearchRequest request);
+
+ List get(String language);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductTypeInfoService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductTypeInfoService.java
new file mode 100644
index 00000000..15425b4f
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductTypeInfoService.java
@@ -0,0 +1,24 @@
+package com.nflg.mobilebroken.repository.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.mobilebroken.common.pojo.request.ProductTypeInfoAddRequest;
+import com.nflg.mobilebroken.repository.entity.ProductTypeInfo;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ *
+ * 产品中心-产品类型详情 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IProductTypeInfoService extends IService {
+
+ void add(Integer typeId, List items);
+
+ @Transactional
+ void update(List items);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductTypeService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductTypeService.java
new file mode 100644
index 00000000..ec432a15
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductTypeService.java
@@ -0,0 +1,32 @@
+package com.nflg.mobilebroken.repository.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.mobilebroken.common.pojo.PageData;
+import com.nflg.mobilebroken.common.pojo.request.ProductTypeAddRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductTypeSearchRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductTypeUpdateRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductTypeSearchVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductTypeVO;
+import com.nflg.mobilebroken.repository.entity.ProductType;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ *
+ * 产品中心-产品类型 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IProductTypeService extends IService {
+
+ void add(@Valid ProductTypeAddRequest request);
+
+ void update(@Valid ProductTypeUpdateRequest request);
+
+ PageData getList(ProductTypeSearchRequest request);
+
+ List get(Integer seriesId,String language);
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductCaseInfoServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductCaseInfoServiceImpl.java
new file mode 100644
index 00000000..87052070
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductCaseInfoServiceImpl.java
@@ -0,0 +1,66 @@
+package com.nflg.mobilebroken.repository.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.mobilebroken.common.pojo.request.ProductCaseInfoAddRequest;
+import com.nflg.mobilebroken.common.util.AdminUserUtil;
+import com.nflg.mobilebroken.repository.entity.ProductCaseInfo;
+import com.nflg.mobilebroken.repository.mapper.ProductCaseInfoMapper;
+import com.nflg.mobilebroken.repository.service.IProductCaseInfoService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 产品中心-案例-详情 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class ProductCaseInfoServiceImpl extends ServiceImpl implements IProductCaseInfoService {
+
+ @Transactional
+ @Override
+ public void add(Integer caseId, List items) {
+ if (CollectionUtil.isNotEmpty(items)) {
+ saveBatch(
+ items.stream()
+ .map(it -> new ProductCaseInfo()
+ .setCaseId(caseId)
+ .setLanguageCode(it.getLanguageCode())
+ .setDesc(it.getDesc())
+ .setImage(it.getImage())
+ .setVideo(it.getVideo())
+ .setCreateBy(AdminUserUtil.getUserName())
+ .setCreateTime(LocalDateTime.now())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+
+ @Transactional
+ @Override
+ public void update(List items) {
+ if (CollectionUtil.isNotEmpty(items)) {
+ updateBatchById(
+ items.stream()
+ .map(it -> new ProductCaseInfo()
+ .setId(it.getId())
+ .setDesc(it.getDesc())
+ .setImage(it.getImage())
+ .setVideo(it.getVideo())
+ .setUpdateBy(AdminUserUtil.getUserName())
+ .setUpdateTime(LocalDateTime.now())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductCaseServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductCaseServiceImpl.java
new file mode 100644
index 00000000..13ba9922
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductCaseServiceImpl.java
@@ -0,0 +1,82 @@
+package com.nflg.mobilebroken.repository.service.impl;
+
+import cn.hutool.core.convert.Convert;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.mobilebroken.common.pojo.PageData;
+import com.nflg.mobilebroken.common.pojo.request.ProductCaseAddRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductCaseSearchRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductCaseUpdateRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductCaseSearchVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductCaseVO;
+import com.nflg.mobilebroken.common.util.AdminUserUtil;
+import com.nflg.mobilebroken.common.util.PageUtil;
+import com.nflg.mobilebroken.repository.entity.ProductCase;
+import com.nflg.mobilebroken.repository.mapper.ProductCaseMapper;
+import com.nflg.mobilebroken.repository.service.IProductCaseInfoService;
+import com.nflg.mobilebroken.repository.service.IProductCaseService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ *
+ * 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class ProductCaseServiceImpl extends ServiceImpl implements IProductCaseService {
+
+ @Resource
+ private IProductCaseInfoService productCaseInfoService;
+
+ @Transactional
+ @Override
+ public void add(ProductCaseAddRequest request) {
+ ProductCase entity = new ProductCase()
+ .setTitle(request.getTitle())
+ .setEnable(request.getEnable())
+ .setSort(request.getSort())
+ .setCreateBy(AdminUserUtil.getUserName())
+ .setCreateTime(LocalDateTime.now());
+ save(entity);
+ productCaseInfoService.add(entity.getId(), request.getItems());
+ }
+
+ @Transactional
+ @Override
+ public void update(ProductCaseUpdateRequest request) {
+ lambdaUpdate()
+ .set(ProductCase::getTitle, request.getTitle())
+ .set(ProductCase::getSort, request.getSort())
+ .set(ProductCase::getEnable, request.getEnable())
+ .set(ProductCase::getUpdateBy, AdminUserUtil.getUserName())
+ .set(ProductCase::getUpdateTime, LocalDateTime.now())
+ .update();
+ productCaseInfoService.update(request.getItems());
+ }
+
+ @Override
+ public PageData getList(ProductCaseSearchRequest request) {
+ IPage> page=lambdaQuery()
+ .eq(Objects.nonNull(request.getEnable()), ProductCase::getEnable, request.getEnable())
+ .like(Objects.nonNull(request.getTitle()), ProductCase::getTitle, request.getTitle())
+ .ge(Objects.nonNull(request.getStartDate()), ProductCase::getCreateTime, request.getStartDate())
+ .le(Objects.nonNull(request.getEndDate()), ProductCase::getCreateTime, request.getEndDate())
+ .page(new Page<>(request.getPage(), request.getPageSize()));
+ return PageUtil.convert(page, d -> Convert.convert(ProductCaseSearchVO.class, d));
+ }
+
+ @Override
+ public List get(String language) {
+ return baseMapper.get(language);
+ }
+}
\ No newline at end of file
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductHonorInfoServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductHonorInfoServiceImpl.java
new file mode 100644
index 00000000..0c9d8a93
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductHonorInfoServiceImpl.java
@@ -0,0 +1,64 @@
+package com.nflg.mobilebroken.repository.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.mobilebroken.common.pojo.request.ProductHonorInfoAddRequest;
+import com.nflg.mobilebroken.common.util.AdminUserUtil;
+import com.nflg.mobilebroken.repository.entity.ProductHonorInfo;
+import com.nflg.mobilebroken.repository.mapper.ProductHonorInfoMapper;
+import com.nflg.mobilebroken.repository.service.IProductHonorInfoService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 产品中心-荣誉详情 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class ProductHonorInfoServiceImpl extends ServiceImpl implements IProductHonorInfoService {
+
+ @Transactional
+ @Override
+ public void add(Integer honorId, List items) {
+ if (CollectionUtil.isNotEmpty(items)) {
+ saveBatch(
+ items.stream()
+ .map(it -> new ProductHonorInfo()
+ .setHonorId(honorId)
+ .setLanguageCode(it.getLanguageCode())
+ .setTitle(it.getTitle())
+ .setImage(it.getImage())
+ .setCreateBy(AdminUserUtil.getUserName())
+ .setCreateTime(LocalDateTime.now())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+
+ @Transactional
+ @Override
+ public void update(List items) {
+ if (CollectionUtil.isNotEmpty(items)) {
+ updateBatchById(
+ items.stream()
+ .map(it -> new ProductHonorInfo()
+ .setId(it.getId())
+ .setTitle(it.getTitle())
+ .setImage(it.getImage())
+ .setUpdateBy(AdminUserUtil.getUserName())
+ .setUpdateTime(LocalDateTime.now())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductHonorServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductHonorServiceImpl.java
new file mode 100644
index 00000000..bed788fd
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductHonorServiceImpl.java
@@ -0,0 +1,70 @@
+package com.nflg.mobilebroken.repository.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.mobilebroken.common.pojo.request.ProductHonorAddRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductHonorSearchRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductHonorUpdateRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductHonorSearchVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductHonorVO;
+import com.nflg.mobilebroken.common.util.AdminUserUtil;
+import com.nflg.mobilebroken.repository.entity.ProductHonor;
+import com.nflg.mobilebroken.repository.mapper.ProductHonorMapper;
+import com.nflg.mobilebroken.repository.service.IProductHonorInfoService;
+import com.nflg.mobilebroken.repository.service.IProductHonorService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ *
+ * 产品中心-荣誉 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class ProductHonorServiceImpl extends ServiceImpl implements IProductHonorService {
+
+ @Resource
+ private IProductHonorInfoService productHonorInfoService;
+
+ @Transactional
+ @Override
+ public void add(ProductHonorAddRequest request) {
+ ProductHonor productHonor = new ProductHonor()
+ .setObtainingTime(request.getObtainingTime())
+ .setEnable(request.getEnable())
+ .setCreateBy(AdminUserUtil.getUserName())
+ .setCreateTime(LocalDateTime.now());
+ save(productHonor);
+ productHonorInfoService.add(productHonor.getId(), request.getItems());
+ }
+
+ @Transactional
+ @Override
+ public void update(ProductHonorUpdateRequest request) {
+ lambdaUpdate()
+ .set(ProductHonor::getObtainingTime, request.getObtainingTime())
+ .set(ProductHonor::getEnable,request.getEnable())
+ .set(ProductHonor::getUpdateBy, AdminUserUtil.getUserName())
+ .set(ProductHonor::getUpdateTime, LocalDateTime.now())
+ .update();
+ productHonorInfoService.update(request.getItems());
+ }
+
+ @Override
+ public IPage getList(ProductHonorSearchRequest request) {
+ return baseMapper.getList(request,new Page<>(request.getPage(), request.getPageSize()));
+ }
+
+ @Override
+ public List get(String language) {
+ return baseMapper.get(language);
+ }
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductIntroInfoServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductIntroInfoServiceImpl.java
new file mode 100644
index 00000000..c8cf32b7
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductIntroInfoServiceImpl.java
@@ -0,0 +1,47 @@
+package com.nflg.mobilebroken.repository.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.mobilebroken.common.pojo.request.ProductIntroInfoAddRequest;
+import com.nflg.mobilebroken.common.util.AdminUserUtil;
+import com.nflg.mobilebroken.repository.entity.ProductIntroInfo;
+import com.nflg.mobilebroken.repository.mapper.ProductIntroInfoMapper;
+import com.nflg.mobilebroken.repository.service.IProductIntroInfoService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 产品中心-介绍详情 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class ProductIntroInfoServiceImpl extends ServiceImpl implements IProductIntroInfoService {
+
+ @Transactional
+ @Override
+ public void update(List items) {
+ if (CollectionUtil.isNotEmpty(items)) {
+ updateBatchById(
+ items.stream()
+ .map(it -> new ProductIntroInfo()
+ .setId(it.getId())
+ .setName(it.getName())
+ .setImage(it.getImage())
+ .setDesc(it.getDesc())
+ .setImagePosition(it.getImagePosition())
+ .setUpdateBy(AdminUserUtil.getUserName())
+ .setUpdateTime(LocalDateTime.now())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductIntroServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductIntroServiceImpl.java
new file mode 100644
index 00000000..6f33ce8f
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductIntroServiceImpl.java
@@ -0,0 +1,88 @@
+package com.nflg.mobilebroken.repository.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.mobilebroken.common.pojo.request.ProductIntroAddRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductIntroSearchRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductIntroUpdateRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductIntroSearchVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductIntroVO;
+import com.nflg.mobilebroken.common.util.AdminUserUtil;
+import com.nflg.mobilebroken.repository.entity.ProductIntro;
+import com.nflg.mobilebroken.repository.entity.ProductIntroInfo;
+import com.nflg.mobilebroken.repository.mapper.ProductIntroMapper;
+import com.nflg.mobilebroken.repository.service.IProductIntroInfoService;
+import com.nflg.mobilebroken.repository.service.IProductIntroService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 产品中心-介绍 服务实现类
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class ProductIntroServiceImpl extends ServiceImpl implements IProductIntroService {
+
+ @Resource
+ private IProductIntroInfoService introInfoService;
+
+ @Transactional
+ @Override
+ public void add(ProductIntroAddRequest request) {
+ ProductIntro intro = new ProductIntro()
+ .setDictionaryItemId(request.getDictionaryItemId())
+ .setSort(request.getSort())
+ .setEnable(request.getEnable())
+ .setCreateBy(AdminUserUtil.getUserName())
+ .setCreateTime(LocalDateTime.now());
+ save(intro);
+ if (CollectionUtil.isNotEmpty(request.getItems())) {
+ introInfoService.saveBatch(
+ request.getItems().stream()
+ .map(i -> new ProductIntroInfo()
+ .setIntroId(intro.getId())
+ .setLanguageCode(i.getLanguageCode())
+ .setName(i.getName())
+ .setDesc(i.getDesc())
+ .setImage(i.getImage())
+ .setImagePosition(i.getImagePosition())
+ .setCreateBy(AdminUserUtil.getUserName())
+ .setCreateTime(LocalDateTime.now()))
+ .collect(Collectors.toList())
+ );
+ }
+ }
+
+ @Transactional
+ @Override
+ public void update(ProductIntroUpdateRequest request) {
+ lambdaUpdate()
+ .set(ProductIntro::getDictionaryItemId, request.getDictionaryItemId())
+ .set(ProductIntro::getSort, request.getSort())
+ .set(ProductIntro::getEnable,request.getEnable())
+ .set(ProductIntro::getUpdateBy, AdminUserUtil.getUserName())
+ .set(ProductIntro::getUpdateTime, LocalDateTime.now())
+ .update();
+ introInfoService.update(request.getItems());
+ }
+
+ @Override
+ public IPage getList(ProductIntroSearchRequest request) {
+ return baseMapper.getList(request,new Page<>(request.getPage(), request.getPageSize()));
+ }
+
+ @Override
+ public List get(String language) {
+ return baseMapper.get(language);
+ }
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelFileServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelFileServiceImpl.java
new file mode 100644
index 00000000..2bb69974
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelFileServiceImpl.java
@@ -0,0 +1,38 @@
+package com.nflg.mobilebroken.repository.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.convert.Convert;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.mobilebroken.common.pojo.vo.ProductFileVO;
+import com.nflg.mobilebroken.repository.entity.ProductModelFile;
+import com.nflg.mobilebroken.repository.mapper.ProductModelFileMapper;
+import com.nflg.mobilebroken.repository.service.IProductModelFileService;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ *
+ * 产品中心-产品机型-文件 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class ProductModelFileServiceImpl extends ServiceImpl implements IProductModelFileService {
+
+ @Override
+ public List getByModelId(Integer modelId, String language) {
+ List files=lambdaQuery()
+ .eq(ProductModelFile::getModelId,modelId)
+ .eq(ProductModelFile::getLanguageCode,language)
+ .list();
+ if (CollectionUtil.isEmpty(files)){
+ return Collections.emptyList();
+ }else {
+ return Convert.toList(ProductFileVO.class,files);
+ }
+ }
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelImageServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelImageServiceImpl.java
new file mode 100644
index 00000000..9224344a
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelImageServiceImpl.java
@@ -0,0 +1,80 @@
+package com.nflg.mobilebroken.repository.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.convert.Convert;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.mobilebroken.common.pojo.request.ProductModelImageAddRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductImageVO;
+import com.nflg.mobilebroken.common.util.AdminUserUtil;
+import com.nflg.mobilebroken.repository.entity.ProductModelImage;
+import com.nflg.mobilebroken.repository.mapper.ProductModelImageMapper;
+import com.nflg.mobilebroken.repository.service.IProductModelImageService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 产品中心-产品机型-图片 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class ProductModelImageServiceImpl extends ServiceImpl implements IProductModelImageService {
+
+ @Override
+ public List getByModelId(Integer modelId, String language) {
+ List productModelImages = lambdaQuery()
+ .eq(ProductModelImage::getModelId, modelId)
+ .eq(ProductModelImage::getLanguageCode, language)
+ .list();
+ if (CollectionUtil.isEmpty(productModelImages)){
+ return Collections.emptyList();
+ }else {
+ return Convert.toList(ProductImageVO.class, productModelImages);
+ }
+ }
+
+ @Transactional
+ @Override
+ public void add(Integer id, List images) {
+ if (CollectionUtil.isNotEmpty(images)){
+ saveBatch(
+ images.stream()
+ .map(it -> new ProductModelImage()
+ .setModelId(id)
+ .setLanguageCode(it.getLanguageCode())
+ .setContent(it.getContent())
+ .setImage(it.getImage())
+ .setCreateBy(AdminUserUtil.getUserName())
+ .setCreateTime(LocalDateTime.now())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+
+ @Transactional
+ @Override
+ public void update(List images) {
+ if (CollectionUtil.isNotEmpty(images)){
+ updateBatchById(
+ images.stream()
+ .map(it -> new ProductModelImage()
+ .setId(it.getId())
+ .setContent(it.getContent())
+ .setImage(it.getImage())
+ .setUpdateBy(AdminUserUtil.getUserName())
+ .setUpdateTime(LocalDateTime.now())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelInfoServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelInfoServiceImpl.java
new file mode 100644
index 00000000..4c80aa2c
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelInfoServiceImpl.java
@@ -0,0 +1,66 @@
+package com.nflg.mobilebroken.repository.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.mobilebroken.common.pojo.request.ProductModelInfoAddRequest;
+import com.nflg.mobilebroken.common.util.AdminUserUtil;
+import com.nflg.mobilebroken.repository.entity.ProductModelInfo;
+import com.nflg.mobilebroken.repository.mapper.ProductModelInfoMapper;
+import com.nflg.mobilebroken.repository.service.IProductModelInfoService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 产品中心-机型详情 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class ProductModelInfoServiceImpl extends ServiceImpl implements IProductModelInfoService {
+
+ @Transactional
+ @Override
+ public void add(Integer modelId, List items) {
+ if (CollectionUtil.isNotEmpty(items)){
+ saveBatch(
+ items.stream()
+ .map(it -> new ProductModelInfo()
+ .setModeId(it.getModelId())
+ .setLanguageCode(it.getLanguageCode())
+ .setName(it.getName())
+ .setDesc(it.getDesc())
+ .setUrl(it.getUrl())
+ .setCreateBy(AdminUserUtil.getUserName())
+ .setCreateTime(LocalDateTime.now())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+
+ @Transactional
+ @Override
+ public void update(List items) {
+ if (CollectionUtil.isNotEmpty(items)){
+ updateBatchById(
+ items.stream()
+ .map(it -> new ProductModelInfo()
+ .setId(it.getId())
+ .setName(it.getName())
+ .setDesc(it.getDesc())
+ .setUrl(it.getUrl())
+ .setUpdateBy(AdminUserUtil.getUserName())
+ .setUpdateTime(LocalDateTime.now())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelParamsServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelParamsServiceImpl.java
new file mode 100644
index 00000000..9b70df84
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelParamsServiceImpl.java
@@ -0,0 +1,90 @@
+package com.nflg.mobilebroken.repository.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.mobilebroken.common.pojo.dto.ProductParamsDTO;
+import com.nflg.mobilebroken.common.pojo.request.ProductParamsAddRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductParamsInfoVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductParamsVO;
+import com.nflg.mobilebroken.common.util.AdminUserUtil;
+import com.nflg.mobilebroken.repository.entity.ProductModelParams;
+import com.nflg.mobilebroken.repository.mapper.ProductModelParamsMapper;
+import com.nflg.mobilebroken.repository.service.IProductModelParamsService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 产品中心-机型-参数 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class ProductModelParamsServiceImpl extends ServiceImpl implements IProductModelParamsService {
+
+ @Override
+ public List getInfo(Integer modelId, String language) {
+ List datas = baseMapper.getInfo(modelId, language);
+ if (CollectionUtil.isEmpty(datas)) {
+ return Collections.emptyList();
+ } else {
+ Map> maps = datas.stream().collect(Collectors.groupingBy(ProductParamsDTO::getDictionaryId));
+ return maps.entrySet()
+ .stream()
+ .map(e -> new ProductParamsVO()
+ .setDictionaryId(e.getKey())
+ .setDictionaryName(e.getValue().get(0).getDictionaryName())
+ .setItems(e.getValue().stream().map(it ->
+ new ProductParamsInfoVO()
+ .setDictionaryItemId(it.getDictionaryItemId())
+ .setDictionaryItemName(it.getDictionaryItemName())
+ ).collect(Collectors.toList()))
+ )
+ .collect(Collectors.toList());
+ }
+ }
+
+ @Transactional
+ @Override
+ public void add(Integer modelId, List params) {
+ if (CollectionUtil.isNotEmpty(params)){
+ saveBatch(
+ params.stream()
+ .map(it -> new ProductModelParams()
+ .setModelId(modelId)
+ .setLanguageCode(it.getLanguageCode())
+ .setDictionaryItemId(it.getDictionaryItemId())
+ .setValue(it.getValue())
+ .setCreateBy(AdminUserUtil.getUserName())
+ .setCreateTime(LocalDateTime.now())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+
+ @Transactional
+ @Override
+ public void update(List params) {
+ if (CollectionUtil.isNotEmpty(params)){
+ updateBatchById(
+ params.stream()
+ .map(it -> new ProductModelParams()
+ .setId(it.getId())
+ .setValue(it.getValue())
+ .setUpdateBy(AdminUserUtil.getUserName())
+ .setUpdateTime(LocalDateTime.now())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelServiceImpl.java
new file mode 100644
index 00000000..c70c4b01
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelServiceImpl.java
@@ -0,0 +1,114 @@
+package com.nflg.mobilebroken.repository.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.mobilebroken.common.pojo.PageData;
+import com.nflg.mobilebroken.common.pojo.request.ProductModelAddRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductModelSearchRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductModelUpdateRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductModelInfoVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductModelParamsVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductModelSearchVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductModelVO;
+import com.nflg.mobilebroken.common.util.AdminUserUtil;
+import com.nflg.mobilebroken.repository.entity.ProductModel;
+import com.nflg.mobilebroken.repository.mapper.ProductModelMapper;
+import com.nflg.mobilebroken.repository.service.*;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ *
+ * 产品中心-产品机型 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class ProductModelServiceImpl extends ServiceImpl implements IProductModelService {
+
+ @Resource
+ private IProductModelInfoService productModelInfoService;
+
+ @Resource
+ private IProductModelImageService productModelImageService;
+
+ @Resource
+ private IProductModelVideoService productModelVideoService;
+
+ @Resource
+ private IProductModelFileService productModelFileService;
+
+ @Resource
+ private IProductModelParamsService productPartParamsService;
+
+ @Transactional
+ @Override
+ public void add(ProductModelAddRequest request) {
+ ProductModel productModel = new ProductModel()
+ .setTypeId(request.getTypeId())
+ .setHotImage(request.getHotImage())
+ .setSort(request.getSort())
+ .setCreateBy(AdminUserUtil.getUserName())
+ .setCreateTime(LocalDateTime.now());
+ save(productModel);
+ productModelInfoService.add(productModel.getId(), request.getItems());
+ productPartParamsService.add(productModel.getId(), request.getParams());
+ productModelImageService.add(productModel.getId(), request.getImages());
+ productModelVideoService.add(productModel.getId(), request.getVideos());
+ }
+
+ @Transactional
+ @Override
+ public void update(ProductModelUpdateRequest request) {
+ lambdaUpdate()
+ .set(ProductModel::getHotImage, request.getHotImage())
+ .set(ProductModel::getSort, request.getSort())
+ .eq(ProductModel::getId, request.getId())
+ .update();
+ productModelInfoService.update(request.getItems());
+ productPartParamsService.update(request.getParams());
+ productModelImageService.update(request.getImages());
+ productModelVideoService.update(request.getVideos());
+ }
+
+ @Override
+ public PageData getList(ProductModelSearchRequest request) {
+ return baseMapper.getList(request, new Page<>(request.getPage(), request.getPageSize()));
+ }
+
+ @Override
+ public List get(Integer typeId, String language) {
+ return baseMapper.get(typeId, language);
+ }
+
+ @Override
+ public ProductModelInfoVO getInfo(Integer modelId, String language) {
+ ProductModelInfoVO info = baseMapper.getInfo(modelId, language);
+ if (Objects.nonNull(info)) {
+ info.setImages(productModelImageService.getByModelId(modelId, language));
+ info.setVideos(productModelVideoService.getByModelId(modelId, language));
+ info.setFiles(productModelFileService.getByModelId(modelId, language));
+ }
+ return info;
+ }
+
+ @Override
+ public ProductModelParamsVO getParams(Integer modelId, String language) {
+ ProductModelInfoVO model = baseMapper.getInfo(modelId, language);
+ if (Objects.isNull(model)) {
+ return null;
+ }
+ return new ProductModelParamsVO()
+ .setId(model.getId())
+ .setName(model.getName())
+ .setUrl(model.getUrl())
+ .setParams(productPartParamsService.getInfo(modelId, language));
+ }
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelVideoServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelVideoServiceImpl.java
new file mode 100644
index 00000000..3a67e54c
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelVideoServiceImpl.java
@@ -0,0 +1,81 @@
+package com.nflg.mobilebroken.repository.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.convert.Convert;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.mobilebroken.common.pojo.request.ProductModelVideoAddRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductVideoVO;
+import com.nflg.mobilebroken.common.util.AdminUserUtil;
+import com.nflg.mobilebroken.repository.entity.ProductModelVideo;
+import com.nflg.mobilebroken.repository.mapper.ProductModelVideoMapper;
+import com.nflg.mobilebroken.repository.service.IProductModelVideoService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 产品中心-产品机型-视频 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class ProductModelVideoServiceImpl extends ServiceImpl implements IProductModelVideoService {
+
+ @Override
+ public List getByModelId(Integer modelId, String language) {
+ List videos=lambdaQuery()
+ .eq(ProductModelVideo::getModelId,modelId)
+ .eq(ProductModelVideo::getLanguageCode,language)
+ .list();
+ if (CollectionUtil.isEmpty(videos)){
+ return Collections.emptyList();
+ }else {
+ return Convert.toList(ProductVideoVO.class,videos);
+ }
+ }
+
+ @Transactional
+ @Override
+ public void add(Integer id, List videos) {
+ if (CollectionUtil.isNotEmpty(videos)){
+ saveBatch(
+ videos.stream()
+ .map(it -> new ProductModelVideo()
+ .setModelId(id)
+ .setLanguageCode(it.getLanguageCode())
+ .setVideo(it.getVideo())
+ .setContent(it.getContent())
+ .setImage(it.getImage())
+ .setCreateBy(AdminUserUtil.getUserName())
+ .setCreateTime(LocalDateTime.now())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+
+ @Transactional
+ @Override
+ public void update(List videos) {
+ if (CollectionUtil.isNotEmpty(videos)){
+ saveOrUpdateBatch(
+ videos.stream()
+ .map(it -> new ProductModelVideo()
+ .setId(it.getId())
+ .setVideo(it.getVideo())
+ .setContent(it.getContent())
+ .setImage(it.getImage())
+ .setUpdateBy(AdminUserUtil.getUserName())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+}
\ No newline at end of file
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductPartInfoServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductPartInfoServiceImpl.java
new file mode 100644
index 00000000..05fb0e8a
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductPartInfoServiceImpl.java
@@ -0,0 +1,65 @@
+package com.nflg.mobilebroken.repository.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.mobilebroken.common.pojo.request.ProductPartInfoAddRequest;
+import com.nflg.mobilebroken.common.util.AdminUserUtil;
+import com.nflg.mobilebroken.repository.entity.ProductPartInfo;
+import com.nflg.mobilebroken.repository.mapper.ProductPartInfoMapper;
+import com.nflg.mobilebroken.repository.service.IProductPartInfoService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 产品中心-部件详情 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class ProductPartInfoServiceImpl extends ServiceImpl implements IProductPartInfoService {
+
+ @Transactional
+ @Override
+ public void add(Integer partId, List items) {
+ if (CollectionUtil.isNotEmpty(items)) {
+ saveBatch(
+ items.stream()
+ .map(it -> new ProductPartInfo()
+ .setPartId(partId)
+ .setLanguageCode(it.getLanguageCode())
+ .setName(it.getName())
+ .setDesc(it.getDesc())
+ .setUrl(it.getUrl())
+ .setCreateBy(AdminUserUtil.getUserName())
+ .setCreateTime(LocalDateTime.now())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+
+ @Transactional
+ @Override
+ public void update(List items) {
+ if (CollectionUtil.isNotEmpty(items)) {
+ saveBatch(
+ items.stream()
+ .map(it -> new ProductPartInfo()
+ .setName(it.getName())
+ .setDesc(it.getDesc())
+ .setUrl(it.getUrl())
+ .setUpdateBy(AdminUserUtil.getUserName())
+ .setUpdateTime(LocalDateTime.now())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductPartParamsServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductPartParamsServiceImpl.java
new file mode 100644
index 00000000..eb90754b
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductPartParamsServiceImpl.java
@@ -0,0 +1,95 @@
+package com.nflg.mobilebroken.repository.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.mobilebroken.common.pojo.dto.ProductParamsDTO;
+import com.nflg.mobilebroken.common.pojo.request.ProductParamsAddRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductParamsInfoVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductParamsVO;
+import com.nflg.mobilebroken.common.util.AdminUserUtil;
+import com.nflg.mobilebroken.repository.entity.ProductPartParams;
+import com.nflg.mobilebroken.repository.mapper.ProductPartParamsMapper;
+import com.nflg.mobilebroken.repository.service.IDictionaryItemService;
+import com.nflg.mobilebroken.repository.service.IProductPartParamsService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 产品中心-部件-参数 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class ProductPartParamsServiceImpl extends ServiceImpl implements IProductPartParamsService {
+
+ @Resource
+ private IDictionaryItemService dictionaryItemService;
+
+ @Transactional
+ @Override
+ public void add(Integer partId, List params) {
+ if (CollectionUtil.isNotEmpty(params)){
+ saveBatch(
+ params.stream()
+ .map(it -> new ProductPartParams()
+ .setPartId(partId)
+ .setDictionaryItemId(it.getDictionaryItemId())
+ .setLanguageCode(it.getLanguageCode())
+ .setValue(it.getValue())
+ .setCreateBy(AdminUserUtil.getUserName())
+ .setCreateTime(LocalDateTime.now())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+
+ @Transactional
+ @Override
+ public void update(List params) {
+ if (CollectionUtil.isNotEmpty(params)){
+ updateBatchById(
+ params.stream()
+ .map(it -> new ProductPartParams()
+ .setId(it.getId())
+ .setValue(it.getValue())
+ .setUpdateBy(AdminUserUtil.getUserName())
+ .setUpdateTime(LocalDateTime.now())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+
+ @Override
+ public List getInfo(Integer partId, String language) {
+ List datas = baseMapper.getInfo(partId, language);
+ if (CollectionUtil.isEmpty(datas)) {
+ return Collections.emptyList();
+ } else {
+ Map> maps = datas.stream().collect(Collectors.groupingBy(ProductParamsDTO::getDictionaryId));
+ return maps.entrySet()
+ .stream()
+ .map(e -> new ProductParamsVO()
+ .setDictionaryId(e.getKey())
+ .setDictionaryName(e.getValue().get(0).getDictionaryName())
+ .setItems(e.getValue().stream().map(it ->
+ new ProductParamsInfoVO()
+ .setDictionaryItemId(it.getDictionaryItemId())
+ .setDictionaryItemName(it.getDictionaryItemName())
+ ).collect(Collectors.toList()))
+ )
+ .collect(Collectors.toList());
+ }
+ }
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductPartServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductPartServiceImpl.java
new file mode 100644
index 00000000..894e4191
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductPartServiceImpl.java
@@ -0,0 +1,78 @@
+package com.nflg.mobilebroken.repository.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.mobilebroken.common.pojo.PageData;
+import com.nflg.mobilebroken.common.pojo.request.ProductPartAddRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductPartSearchRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductPartUpdateRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductPartInfoVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductPartSearchVO;
+import com.nflg.mobilebroken.common.util.AdminUserUtil;
+import com.nflg.mobilebroken.repository.entity.ProductPart;
+import com.nflg.mobilebroken.repository.mapper.ProductPartMapper;
+import com.nflg.mobilebroken.repository.service.IProductPartInfoService;
+import com.nflg.mobilebroken.repository.service.IProductPartParamsService;
+import com.nflg.mobilebroken.repository.service.IProductPartService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.Objects;
+
+/**
+ *
+ * 产品中心-部件 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class ProductPartServiceImpl extends ServiceImpl implements IProductPartService {
+
+ @Resource
+ private IProductPartInfoService productPartInfoService;
+
+ @Resource
+ private IProductPartParamsService productPartParamsService;
+
+ @Transactional
+ @Override
+ public void add(ProductPartAddRequest request) {
+ ProductPart part = new ProductPart()
+ .setMaterialNo(request.getMaterialNo())
+ .setCreateBy(AdminUserUtil.getUserName())
+ .setCreateTime(LocalDateTime.now());
+ save(part);
+ productPartInfoService.add(part.getId(), request.getItems());
+ productPartParamsService.add(part.getId(), request.getParams());
+ }
+
+ @Transactional
+ @Override
+ public void update(ProductPartUpdateRequest request) {
+ lambdaUpdate()
+ .set(ProductPart::getMaterialNo, request.getMaterialNo())
+ .set(ProductPart::getUpdateBy, AdminUserUtil.getUserName())
+ .set(ProductPart::getUpdateTime, LocalDateTime.now())
+ .update();
+ productPartInfoService.update(request.getItems());
+ productPartParamsService.update(request.getParams());
+ }
+
+ @Override
+ public PageData getList(ProductPartSearchRequest request) {
+ return baseMapper.getList(request, new Page<>(request.getPage(), request.getPageSize()));
+ }
+
+ @Override
+ public ProductPartInfoVO getInfo(Integer partId, String language) {
+ ProductPartInfoVO part = baseMapper.getInfo(partId, language);
+ if (Objects.nonNull(part)) {
+ part.setParams(productPartParamsService.getInfo(partId, language));
+ }
+ return part;
+ }
+}
\ No newline at end of file
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductSeriesInfoServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductSeriesInfoServiceImpl.java
new file mode 100644
index 00000000..240f1c5a
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductSeriesInfoServiceImpl.java
@@ -0,0 +1,65 @@
+package com.nflg.mobilebroken.repository.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.mobilebroken.common.pojo.request.ProductSeriesInfoAddRequest;
+import com.nflg.mobilebroken.common.util.AdminUserUtil;
+import com.nflg.mobilebroken.repository.entity.ProductSeriesInfo;
+import com.nflg.mobilebroken.repository.mapper.ProductSeriesInfoMapper;
+import com.nflg.mobilebroken.repository.service.IProductSeriesInfoService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 产品中心-产品系列详情 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class ProductSeriesInfoServiceImpl extends ServiceImpl implements IProductSeriesInfoService {
+
+ @Transactional
+ @Override
+ public void add(Integer seriesId, List items) {
+ if (CollectionUtil.isNotEmpty(items)) {
+ saveBatch(
+ items.stream()
+ .map(it -> new ProductSeriesInfo()
+ .setSeriesId(seriesId)
+ .setLanguageCode(it.getLanguageCode())
+ .setImage(it.getImage())
+ .setContent(it.getContent())
+ .setCreateBy(AdminUserUtil.getUserName())
+ .setCreateTime(LocalDateTime.now())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+
+ @Transactional
+ @Override
+ public void update(List items) {
+ if (CollectionUtil.isNotEmpty(items)) {
+ updateBatchById(
+ items.stream()
+ .map(it -> new ProductSeriesInfo()
+ .setId(it.getId())
+ .setLanguageCode(it.getLanguageCode())
+ .setImage(it.getImage())
+ .setContent(it.getContent())
+ .setUpdateBy(AdminUserUtil.getUserName())
+ .setUpdateTime(LocalDateTime.now())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductSeriesServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductSeriesServiceImpl.java
new file mode 100644
index 00000000..88320cfd
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductSeriesServiceImpl.java
@@ -0,0 +1,69 @@
+package com.nflg.mobilebroken.repository.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.mobilebroken.common.pojo.PageData;
+import com.nflg.mobilebroken.common.pojo.request.ProductSeriesAddRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductSeriesSearchRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductSeriesUpdateRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductSeriesSearchVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductSeriesVO;
+import com.nflg.mobilebroken.common.util.AdminUserUtil;
+import com.nflg.mobilebroken.repository.entity.ProductSeries;
+import com.nflg.mobilebroken.repository.mapper.ProductSeriesMapper;
+import com.nflg.mobilebroken.repository.service.IProductSeriesInfoService;
+import com.nflg.mobilebroken.repository.service.IProductSeriesService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ *
+ * 产品中心-产品系列 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class ProductSeriesServiceImpl extends ServiceImpl implements IProductSeriesService {
+
+ @Resource
+ private IProductSeriesInfoService productSeriesInfoService;
+
+ @Transactional
+ @Override
+ public void add(ProductSeriesAddRequest request) {
+ ProductSeries productSeries = new ProductSeries()
+ .setSort(request.getSort())
+ .setCreateBy(AdminUserUtil.getUserName())
+ .setCreateTime(LocalDateTime.now());
+ save(productSeries);
+ productSeriesInfoService.add(productSeries.getId(),request.getItems());
+ }
+
+ @Transactional
+ @Override
+ public void update(ProductSeriesUpdateRequest request) {
+ lambdaUpdate()
+ .set(ProductSeries::getSort, request.getSort())
+ .set(ProductSeries::getUpdateBy, AdminUserUtil.getUserName())
+ .set(ProductSeries::getUpdateTime, LocalDateTime.now())
+ .eq(ProductSeries::getId, request.getId())
+ .update();
+ productSeriesInfoService.update(request.getItems());
+ }
+
+ @Override
+ public PageData getList(ProductSeriesSearchRequest request) {
+ return baseMapper.getList(request,new Page<>(request.getPage(), request.getPageSize()));
+ }
+
+ @Override
+ public List get(String language) {
+ return baseMapper.get(language);
+ }
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductTypeInfoServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductTypeInfoServiceImpl.java
new file mode 100644
index 00000000..1b693d7f
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductTypeInfoServiceImpl.java
@@ -0,0 +1,67 @@
+package com.nflg.mobilebroken.repository.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.mobilebroken.common.pojo.request.ProductTypeInfoAddRequest;
+import com.nflg.mobilebroken.common.util.AdminUserUtil;
+import com.nflg.mobilebroken.repository.entity.ProductTypeInfo;
+import com.nflg.mobilebroken.repository.mapper.ProductTypeInfoMapper;
+import com.nflg.mobilebroken.repository.service.IProductTypeInfoService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 产品中心-产品类型详情 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class ProductTypeInfoServiceImpl extends ServiceImpl implements IProductTypeInfoService {
+
+ @Transactional
+ @Override
+ public void add(Integer typeId, List items) {
+ if (CollectionUtil.isNotEmpty(items)) {
+ saveBatch(
+ items.stream()
+ .map(it -> new ProductTypeInfo()
+ .setTypeId(typeId)
+ .setLanguageCode(it.getLanguageCode())
+ .setName(it.getName())
+ .setContent(it.getContent())
+ .setImage(it.getImage())
+ .setCreateBy(AdminUserUtil.getUserName())
+ .setCreateTime(LocalDateTime.now())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+
+ @Transactional
+ @Override
+ public void update(List items) {
+ if (CollectionUtil.isNotEmpty(items)){
+ updateBatchById(
+ items.stream()
+ .map(it -> new ProductTypeInfo()
+ .setId(it.getId())
+ .setLanguageCode(it.getLanguageCode())
+ .setName(it.getName())
+ .setImage(it.getImage())
+ .setContent(it.getContent())
+ .setUpdateBy(AdminUserUtil.getUserName())
+ .setUpdateTime(LocalDateTime.now())
+ )
+ .collect(Collectors.toList())
+ );
+ }
+ }
+}
diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductTypeServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductTypeServiceImpl.java
new file mode 100644
index 00000000..a7bc3a91
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductTypeServiceImpl.java
@@ -0,0 +1,69 @@
+package com.nflg.mobilebroken.repository.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.mobilebroken.common.pojo.PageData;
+import com.nflg.mobilebroken.common.pojo.request.ProductTypeAddRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductTypeSearchRequest;
+import com.nflg.mobilebroken.common.pojo.request.ProductTypeUpdateRequest;
+import com.nflg.mobilebroken.common.pojo.vo.ProductTypeSearchVO;
+import com.nflg.mobilebroken.common.pojo.vo.ProductTypeVO;
+import com.nflg.mobilebroken.common.util.AdminUserUtil;
+import com.nflg.mobilebroken.repository.entity.ProductType;
+import com.nflg.mobilebroken.repository.mapper.ProductTypeMapper;
+import com.nflg.mobilebroken.repository.service.IProductTypeInfoService;
+import com.nflg.mobilebroken.repository.service.IProductTypeService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ *
+ * 产品中心-产品类型 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class ProductTypeServiceImpl extends ServiceImpl implements IProductTypeService {
+
+ @Resource
+ private IProductTypeInfoService productTypeInfoService;
+
+ @Transactional
+ @Override
+ public void add(ProductTypeAddRequest request) {
+ ProductType productType = new ProductType()
+ .setSort(request.getSort())
+ .setCreateBy(AdminUserUtil.getUserName())
+ .setCreateTime(LocalDateTime.now());
+ save(productType);
+ productTypeInfoService.add(productType.getId(),request.getItems());
+ }
+
+ @Transactional
+ @Override
+ public void update(ProductTypeUpdateRequest request) {
+ lambdaUpdate()
+ .set(ProductType::getSort, request.getSort())
+ .set(ProductType::getUpdateBy, AdminUserUtil.getUserName())
+ .set(ProductType::getUpdateTime, LocalDateTime.now())
+ .eq(ProductType::getId, request.getId())
+ .update();
+ productTypeInfoService.update(request.getItems());
+ }
+
+ @Override
+ public PageData getList(ProductTypeSearchRequest request) {
+ return baseMapper.getList(request,new Page<>(request.getPage(), request.getPageSize()));
+ }
+
+ @Override
+ public List get(Integer seriesId,String language) {
+ return baseMapper.get(seriesId,language);
+ }
+}
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/ProductCaseInfoMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductCaseInfoMapper.xml
new file mode 100644
index 00000000..a196017d
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductCaseInfoMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/ProductCaseMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductCaseMapper.xml
new file mode 100644
index 00000000..1ccde7db
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductCaseMapper.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/ProductHonorInfoMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductHonorInfoMapper.xml
new file mode 100644
index 00000000..5ab00fd3
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductHonorInfoMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/ProductHonorMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductHonorMapper.xml
new file mode 100644
index 00000000..308decdc
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductHonorMapper.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/ProductIntroInfoMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductIntroInfoMapper.xml
new file mode 100644
index 00000000..1a525339
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductIntroInfoMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/ProductIntroMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductIntroMapper.xml
new file mode 100644
index 00000000..dd115129
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductIntroMapper.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelFileMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelFileMapper.xml
new file mode 100644
index 00000000..e5c3e5b4
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelFileMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelImageMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelImageMapper.xml
new file mode 100644
index 00000000..372b2bee
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelImageMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelInfoMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelInfoMapper.xml
new file mode 100644
index 00000000..e741c8a4
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelInfoMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelMapper.xml
new file mode 100644
index 00000000..ecb411b5
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelMapper.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelParamsMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelParamsMapper.xml
new file mode 100644
index 00000000..da00c265
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelParamsMapper.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelVideoMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelVideoMapper.xml
new file mode 100644
index 00000000..7c34dc31
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductModelVideoMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/ProductPartInfoMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductPartInfoMapper.xml
new file mode 100644
index 00000000..56b1eb76
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductPartInfoMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/ProductPartMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductPartMapper.xml
new file mode 100644
index 00000000..027bfc9f
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductPartMapper.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/ProductPartParamsMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductPartParamsMapper.xml
new file mode 100644
index 00000000..b5e51562
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductPartParamsMapper.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/ProductSeriesInfoMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductSeriesInfoMapper.xml
new file mode 100644
index 00000000..0497596c
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductSeriesInfoMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/ProductSeriesMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductSeriesMapper.xml
new file mode 100644
index 00000000..8c7ab019
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductSeriesMapper.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/ProductTypeInfoMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductTypeInfoMapper.xml
new file mode 100644
index 00000000..b0bd8e80
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductTypeInfoMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/ProductTypeMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductTypeMapper.xml
new file mode 100644
index 00000000..6e0fb7b5
--- /dev/null
+++ b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductTypeMapper.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
diff --git a/nflg-mobilebroken-repository/src/test/java/com/nflg/mobilebroken/repository/CodeGenerator.java b/nflg-mobilebroken-repository/src/test/java/com/nflg/mobilebroken/repository/CodeGenerator.java
index 0543aa6d..477a24c7 100644
--- a/nflg-mobilebroken-repository/src/test/java/com/nflg/mobilebroken/repository/CodeGenerator.java
+++ b/nflg-mobilebroken-repository/src/test/java/com/nflg/mobilebroken/repository/CodeGenerator.java
@@ -33,7 +33,8 @@ public class CodeGenerator {
, Paths.get(System.getProperty("user.dir")) + "/src/main/resources/mapper"))
)
.strategyConfig(builder -> {
- builder.addInclude("ticket_call,ticket_call_join") //只生成指定表
+ builder
+ .addInclude("^product_.*") //只生成指定表
.entityBuilder()
.enableLombok()
.enableChainModel()
diff --git a/pom.xml b/pom.xml
index 0e806969..a39dd11c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,6 +21,7 @@
nflg-mobilebroken-repository
nflg-mobilebroken-auth
nflg-mobilebroken-push
+ nflg-mobilebroken-product
11
From 1d493b3b2f707a954d96c132b86335f18665c5a8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?=
Date: Mon, 26 May 2025 11:33:10 +0800
Subject: [PATCH 07/19] =?UTF-8?q?feat:=20=E4=BA=A7=E5=93=81=E4=B8=AD?=
=?UTF-8?q?=E5=BF=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../controller/MultilingualController.java | 11 +-
.../admin/controller/TestController.java | 10 ++
.../admin/controller/TicketController.java | 157 ++++++++++--------
.../admin/event/TicketCallBeginEvent.java | 48 ++++++
.../admin/event/TicketCallEndEvent.java | 46 +++++
.../admin/listener/TicketEventListener.java | 17 +-
.../admin/publisher/TicketEventPublisher.java | 17 +-
.../admin/service/SsePushService.java | 36 +++-
.../cfs/controller/TicketController.java | 90 ++++++----
.../cfs/event/TicketCallBeginEvent.java | 48 ++++++
.../cfs/event/TicketCallEndEvent.java | 46 +++++
.../cfs/listener/TicketEventListener.java | 12 ++
.../cfs/publisher/TicketEventPublisher.java | 12 ++
.../cfs/service/SsePushService.java | 33 +++-
.../common/pojo/dto/PushMessageDataBody.java | 5 +
.../mobilebroken/push/UserSseEmitter.java | 6 +
.../mobilebroken/push/config/CorsConfig.java | 25 ---
.../push/controller/SSEController.java | 14 ++
.../push/service/SSEManagerBase.java | 40 +++--
.../service/ITicketCallJoinService.java | 2 +-
.../service/ITicketCallService.java | 2 +-
.../impl/TicketCallJoinServiceImpl.java | 8 +-
.../service/impl/TicketCallServiceImpl.java | 6 +-
.../resources/mapper/TicketCallJoinMapper.xml | 11 +-
.../starter/config/CorsConfig.java | 25 ---
.../starter/config/RedisConfig.java | 3 +
26 files changed, 543 insertions(+), 187 deletions(-)
create mode 100644 nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCallBeginEvent.java
create mode 100644 nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCallEndEvent.java
create mode 100644 nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCallBeginEvent.java
create mode 100644 nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCallEndEvent.java
delete mode 100644 nflg-mobilebroken-push/src/main/java/com/nflg/mobilebroken/push/config/CorsConfig.java
delete mode 100644 nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/config/CorsConfig.java
diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/MultilingualController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/MultilingualController.java
index e8810fd0..842f8b54 100644
--- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/MultilingualController.java
+++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/MultilingualController.java
@@ -27,6 +27,7 @@ import com.nflg.mobilebroken.repository.service.ILanguageService;
import com.nflg.mobilebroken.repository.service.IWebComponentService;
import com.nflg.mobilebroken.repository.service.IWebComponentTranslateService;
import com.nflg.mobilebroken.starter.annotation.MethodInfoMark;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.FileSystemResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
@@ -55,6 +56,7 @@ import java.util.stream.Collectors;
*
* @author 曹鹏飞
*/
+@Slf4j
@RestController
@RequestMapping("/multilingual")
public class MultilingualController extends ControllerBase {
@@ -204,8 +206,15 @@ public class MultilingualController extends ControllerBase {
List