diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AdminUserController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AdminUserController.java index 993ddeaf..c0de1864 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AdminUserController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AdminUserController.java @@ -13,14 +13,12 @@ import com.nflg.mobilebroken.common.pojo.PageData; import com.nflg.mobilebroken.common.pojo.request.*; import com.nflg.mobilebroken.common.pojo.vo.AdminUserVO; import com.nflg.mobilebroken.common.pojo.vo.DepartmentSimpleVO; +import com.nflg.mobilebroken.common.pojo.vo.SimpleVO; import com.nflg.mobilebroken.common.pojo.vo.TitleSimpleVO; import com.nflg.mobilebroken.common.util.AdminUserUtil; import com.nflg.mobilebroken.common.util.VUtils; import com.nflg.mobilebroken.repository.entity.AdminUser; -import com.nflg.mobilebroken.repository.service.IAdminUserService; -import com.nflg.mobilebroken.repository.service.IDictionaryItemTranslateService; -import com.nflg.mobilebroken.repository.service.ITBaseDepartmentService; -import com.nflg.mobilebroken.repository.service.ITBasePositionService; +import com.nflg.mobilebroken.repository.service.*; import com.nflg.mobilebroken.starter.annotation.MethodInfoMark; import com.nflg.mobilebroken.starter.service.EmailService; import lombok.extern.slf4j.Slf4j; @@ -81,6 +79,9 @@ public class AdminUserController extends ControllerBase { @Resource private RedisTemplate redisTemplate; + @Resource + private IProductionLineService productionLineService; + /** * 获取部门列表 * @return 部门列表 @@ -101,6 +102,16 @@ public class AdminUserController extends ControllerBase { return ApiResult.success(positionService.getSimpleTitles(1)); } + /** + * 获取产品线下拉列表 + * @return 产品线下拉列表 + */ + @GetMapping("getSimpleProductionLines") + @ApiMark(moduleName = "账号管理", apiName = "获取产品线下拉列表") + private List getSimpleProductionLines(){ + return productionLineService.getSimples(); + } + /** * 新增账号 * @param request 请求参数 diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/vo/CmrDeviceResultVO.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/vo/CmrDeviceResultVO.java index 7e9d88af..0bb947bc 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/vo/CmrDeviceResultVO.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/vo/CmrDeviceResultVO.java @@ -26,4 +26,24 @@ public class CmrDeviceResultVO { private Integer CfsStatus__c; private String Id; + + /** + * 产品线 + */ + private String ProductLine__c; + + /** + * 发货日期 + */ + private String LastCarDevliverDate__c; + + /** + * 质保开始日期 + */ + private String WarrantyStartDate__c; + + /** + * 质保期(月) + */ + private Integer WarrantyPeriod1__c; } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminDeviceService.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminDeviceService.java index 28ed3c21..3e9c68e0 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminDeviceService.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminDeviceService.java @@ -14,11 +14,14 @@ import com.nflg.mobilebroken.common.constant.STATE; import com.nflg.mobilebroken.common.util.AdminUserUtil; import com.nflg.mobilebroken.common.util.VUtils; import com.nflg.mobilebroken.repository.entity.Device; +import com.nflg.mobilebroken.repository.entity.ProductionLine; import com.nflg.mobilebroken.repository.service.IDeviceService; +import com.nflg.mobilebroken.repository.service.IProductionLineService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -38,6 +41,9 @@ public class AdminDeviceService { @Resource CrmService crmService; + @Resource + private IProductionLineService productionLineService; + @Transactional(rollbackFor = Exception.class) public void add(DeviceDTO deviceDTO) { Device device = Convert.convert(Device.class, deviceDTO); @@ -128,11 +134,29 @@ public class AdminDeviceService { Map deviceMap = deviceList.stream().collect(Collectors.toMap(Device::getSourceId, device -> device)); crmDeviceList.forEach(u -> { + Integer plId = 0; + String productionLine = StrUtil.trim(u.getProductLine__c()); + if (StrUtil.isNotBlank(productionLine)) { + ProductionLine pl = productionLineService.getByName(productionLine); + if (Objects.isNull(pl)) { + pl = new ProductionLine() + .setName(productionLine) + .setCreateBy("CRM同步") + .setCreateTime(LocalDateTime.now()); + productionLineService.save(pl); + } + plId = pl.getId(); + } if (StrUtil.isNotBlank(u.getMachine_Number__c())) { Device ent = deviceMap.get(u.getId()); if (Objects.nonNull(ent)) { ent.setUpdateBy("crm"); ent.setUpdateTime(LocalDateTime.now()); + if (!StrUtil.equals(productionLine,"移动破碎")){ + if (Objects.isNull(ent.getShipmentDate()) && StrUtil.isNotBlank(u.getLastCarDevliverDate__c())){ + ent.setShipmentDate(LocalDate.parse(u.getLastCarDevliverDate__c())); + } + } } else { ent = new Device(); ent.setSourceId(u.getId()); @@ -141,9 +165,9 @@ public class AdminDeviceService { } ent.setDeviceState(u.getCfsStatus__c()); ent.setDeviceNo(u.getMachine_Number__c()); - ent.setDeviceType(u.getAssetProductLine3__c()); - ent.setDeviceTypeSub(u.getAssetProductLine4__c()); - ent.setModelNo(u.getProductLine5__c()); + ent.setDeviceType(Optional.ofNullable(u.getAssetProductLine3__c()).orElse("")); + ent.setDeviceTypeSub(Optional.ofNullable(u.getAssetProductLine4__c()).orElse("")); + ent.setModelNo(Optional.ofNullable(u.getProductLine5__c()).orElse("")); if (StrUtil.isNotBlank(u.getAccount())) { JSONObject jsonObject = JSONObject.parseObject(u.getAccount()); String cname = jsonObject.getString("Name"); @@ -152,21 +176,21 @@ public class AdminDeviceService { ent.setSourceFrom(DeviceSourceFromEnum.FROM_CRM.getSourceKey()); ent.setCustomerId(0); + ent.setProductionLineId(plId); result.add(ent); } }); if (CollUtil.isNotEmpty(result)) { //将设备类型放入-设备类型表维护客户质量管理人 - List deviceTypes = result.stream().map(u -> u.getDeviceType()).collect(Collectors.toList()); + List deviceTypes = result.stream().map(Device::getDeviceType).filter(StrUtil::isNotBlank).collect(Collectors.toList()); adminDeviceTypeService.batchAddDeviceType(deviceTypes); //将设备机型 - List models = result.stream().map(u -> u.getModelNo()).collect(Collectors.toList()); + List models = result.stream().map(Device::getModelNo).filter(StrUtil::isNotBlank).collect(Collectors.toList()); adminDeviceComponentService.batchAddModelNo(models); deviceService.saveOrUpdateBatch(result); } - // } } } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/CrmService.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/CrmService.java index be48f7ef..f8343115 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/CrmService.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/CrmService.java @@ -13,6 +13,7 @@ import com.nflg.mobilebroken.common.constant.STATE; import com.nflg.mobilebroken.common.exception.NflgException; import com.nflg.mobilebroken.common.util.HttpUtils; import com.nflg.mobilebroken.common.util.VUtils; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Service; @@ -23,7 +24,7 @@ import java.util.*; /** * CRM 服务 */ - +@Slf4j @Service @RefreshScope public class CrmService { @@ -102,6 +103,7 @@ public class CrmService { // reBody.put("CrLsDate", date); String token = StrUtil.join(" ", "Bearer", getToken()); String orderResult = httpUtils.doPost(getAgentUrl, JSON.toJSONString(dateParam), token); + log.debug("【代理商】CRM返回数据:{}",orderResult); JSONObject jsonObject = JSONObject.parseObject(orderResult); String code = jsonObject.getString("code"); if (Objects.equals(code, "0")) { @@ -126,6 +128,7 @@ public class CrmService { // reBody.put("CrLsDate", startDate); String token = StrUtil.join(" ", "Bearer", getToken()); String orderResult = httpUtils.doPost(getDeviceUrl, JSON.toJSONString(dateParam), token); + log.debug("【设备信息】CRM返回数据:{}",orderResult); JSONObject jsonObject = JSONObject.parseObject(orderResult); String code = jsonObject.getString("code"); if (Objects.equals(code, "0")) { diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AccountAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AccountAddRequest.java index d5f5b824..2c5b86c8 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AccountAddRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AccountAddRequest.java @@ -42,4 +42,10 @@ public class AccountAddRequest { //密码 @JsonIgnore private String password; + + /** + * 产品线id + */ + @NotNull + private Integer productionLineId; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/SimpleVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/SimpleVO.java new file mode 100644 index 00000000..2bab2144 --- /dev/null +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/SimpleVO.java @@ -0,0 +1,15 @@ +package com.nflg.mobilebroken.common.pojo.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@AllArgsConstructor +@Accessors(chain = true) +public class SimpleVO { + + private Integer id; + + private String name; +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Device.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Device.java index e89540db..13d05d42 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Device.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Device.java @@ -123,6 +123,11 @@ public class Device implements Serializable { */ private String sourceId; + /** + * 产品线id + */ + private Integer productionLineId; + /** * 创建人 */ diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductionLine.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductionLine.java new file mode 100644 index 00000000..c3b83099 --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductionLine.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("production_line") +public class ProductionLine implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 名称 + */ + private String name; + + /** + * 创建人id + */ + private String createBy; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 最后更新人id + */ + private String updateBy; + + /** + * 最后更新时间 + */ + private LocalDateTime updateTime; +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductionLineMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductionLineMapper.java new file mode 100644 index 00000000..ebb43f2c --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/ProductionLineMapper.java @@ -0,0 +1,16 @@ +package com.nflg.mobilebroken.repository.mapper; + +import com.nflg.mobilebroken.repository.entity.ProductionLine; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 产品线 Mapper 接口 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +public interface ProductionLineMapper extends BaseMapper { + +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductionLineService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductionLineService.java new file mode 100644 index 00000000..bce37697 --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductionLineService.java @@ -0,0 +1,22 @@ +package com.nflg.mobilebroken.repository.service; + +import com.nflg.mobilebroken.common.pojo.vo.SimpleVO; +import com.nflg.mobilebroken.repository.entity.ProductionLine; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 产品线 服务类 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +public interface IProductionLineService extends IService { + + ProductionLine getByName(String productionLine); + + List getSimples(); +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductionLineServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductionLineServiceImpl.java new file mode 100644 index 00000000..0ef01f6f --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductionLineServiceImpl.java @@ -0,0 +1,38 @@ +package com.nflg.mobilebroken.repository.service.impl; + +import com.nflg.mobilebroken.common.pojo.vo.SimpleVO; +import com.nflg.mobilebroken.repository.entity.ProductionLine; +import com.nflg.mobilebroken.repository.mapper.ProductionLineMapper; +import com.nflg.mobilebroken.repository.service.IProductionLineService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +/** + *

+ * 产品线 服务实现类 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +@Service +public class ProductionLineServiceImpl extends ServiceImpl implements IProductionLineService { + + @Override + public ProductionLine getByName(String productionLine) { + return lambdaQuery().eq(ProductionLine::getName, productionLine).one(); + } + + @Override + public List getSimples() { + return lambdaQuery() + .select(ProductionLine::getId, ProductionLine::getName) + .list() + .stream() + .map(productionLine -> new SimpleVO(productionLine.getId(), productionLine.getName())) + .collect(Collectors.toList()); + } +} diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/ProductionLineMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductionLineMapper.xml new file mode 100644 index 00000000..94df2b0a --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/ProductionLineMapper.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 477a24c7..6b09091e 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 @@ -34,7 +34,7 @@ public class CodeGenerator { ) .strategyConfig(builder -> { builder - .addInclude("^product_.*") //只生成指定表 + .addInclude("^production_line*") //只生成指定表 .entityBuilder() .enableLombok() .enableChainModel()