diff --git a/src/main/java/com/qs/serve/common/model/consts/RedisCacheKeys.java b/src/main/java/com/qs/serve/common/model/consts/RedisCacheKeys.java index 9db3743d..de9ac611 100644 --- a/src/main/java/com/qs/serve/common/model/consts/RedisCacheKeys.java +++ b/src/main/java/com/qs/serve/common/model/consts/RedisCacheKeys.java @@ -22,4 +22,12 @@ public class RedisCacheKeys { /** 手机号验证吗 */ public final static String PHONE_KEY = "phone_code_:"; + /** + * 0-无需操作 + * 1-未处理 + * 2-同步中 + * 3-同步完成,但未更新表 + */ + public final static String HIS_UPDATE = "update_his_flag:"; + } diff --git a/src/main/java/com/qs/serve/common/model/enums/BizType.java b/src/main/java/com/qs/serve/common/model/enums/BizType.java index dae22d8a..21ea78b2 100644 --- a/src/main/java/com/qs/serve/common/model/enums/BizType.java +++ b/src/main/java/com/qs/serve/common/model/enums/BizType.java @@ -44,6 +44,7 @@ public enum BizType { QUERY("查询"), LEAVE("离职"), + EXPORT("导出"), RESET("重置"); diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsRegionUserController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsRegionUserController.java index 95977092..5540a262 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsRegionUserController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsRegionUserController.java @@ -57,6 +57,7 @@ public class BmsRegionUserController { private HisUserSupplierService hisUserSupplierService; + /** * 列表 * @param param diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java index a6c5c144..49da0c3a 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java @@ -26,6 +26,7 @@ import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.entity.bo.SysRelateSuppliersParam; import com.qs.serve.modules.sys.entity.bo.SysRelateSuppliersParam2; import com.qs.serve.modules.sys.entity.dto.SysUserSimpleVo; +import com.qs.serve.modules.sys.entity.dto.SysUserVo; import com.qs.serve.modules.sys.service.SysPostUserService; import com.qs.serve.modules.sys.service.SysUserService; import com.qs.serve.modules.tbs.common.TbsCenterType; @@ -362,6 +363,28 @@ public class BmsSupplierController { return R.ok(); } + /** + * 获取负责人接口(用于后续成本中心) + * @param supplierId + * @return + */ + @GetMapping("/getMgrUser") + public R> getMgrUser(Long supplierId){ + BmsSupplier supplier = bmsSupplierService.getById(supplierId); + List userIds = new ArrayList<>(); + if(CollectionUtil.isNotEmpty(supplier.getOtherUserIds())){ + userIds = Arrays.asList(supplier.getOtherUserIds()); + } + if(supplier.getUserId()==null){ + return R.ok(); + } + Set otherUserIdSet = new HashSet<>(userIds); + otherUserIdSet.add(supplier.getUserId()); + List userList = sysUserService.listByIds(otherUserIdSet); + List sysUsers = userList.stream().map(SysUser::toSysUserVo).collect(Collectors.toList()); + return R.ok(sysUsers); + } + /** * 根据ID查询 * @param id diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java index 22ffb4d8..29c4fea5 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java @@ -12,6 +12,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.qs.serve.common.framework.mybatis.handler.meta.SplitStringTypeHandler; import com.qs.serve.modules.his.entity.HisUserSupplier; +import com.qs.serve.modules.his.entity.HisUserSupplierTemp; import com.qs.serve.modules.sys.entity.dto.SysUserVo; import lombok.Data; import org.apache.ibatis.type.JdbcType; @@ -298,5 +299,29 @@ public class BmsSupplier implements Serializable { return userSupplier; } + public HisUserSupplierTemp toHisUserSupplierTemp(String userId, Integer type){ + HisUserSupplierTemp userSupplier = new HisUserSupplierTemp(); + userSupplier.setUserId(userId); + if(this.getUserId()!=null){ + userSupplier.setSupplierId(Long.parseLong(this.getId())); + } + if(this.getId()!=null){ + userSupplier.setSupplierId(Long.parseLong(this.getId())); + } + userSupplier.setSupplierName(this.getName()); + userSupplier.setSupplierCode(this.getCode()); + userSupplier.setSaleRegionFirst(this.getRegionFirst()); + userSupplier.setSaleRegionSecond(this.getRegionSecond()); + userSupplier.setSaleRegionThird(this.getRegionThird()); + userSupplier.setSaleRegionFourthly(this.getRegionFourthly()); + userSupplier.setBizRegionFirst(this.getRegion2First()); + userSupplier.setBizRegionSecond(this.getRegion2Second()); + userSupplier.setBizRegionThird(this.getRegion2Third()); + userSupplier.setBizRegionFourthly(this.getRegion2Fourthly()); + userSupplier.setType(type); + userSupplier.setCostFlag(this.costFlag); + return userSupplier; + } + } diff --git a/src/main/java/com/qs/serve/modules/check/common/DataSupplierSo.java b/src/main/java/com/qs/serve/modules/check/common/DataSupplierSo.java new file mode 100644 index 00000000..271d4859 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/check/common/DataSupplierSo.java @@ -0,0 +1,32 @@ +package com.qs.serve.modules.check.common; + +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; + +/** + * @author YenHex + * @since 2023/5/31 + */ +@Data +public class DataSupplierSo { + + /** + * 供应商id + */ + private String supplierId; + + /** + * 开始时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate startDate; + + /** + * 结束时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate endDate; + +} diff --git a/src/main/java/com/qs/serve/modules/check/controller/DateCheckApplyController.java b/src/main/java/com/qs/serve/modules/check/controller/DateCheckApplyController.java new file mode 100644 index 00000000..1cae791c --- /dev/null +++ b/src/main/java/com/qs/serve/modules/check/controller/DateCheckApplyController.java @@ -0,0 +1,101 @@ +package com.qs.serve.modules.check.controller; + +import com.qs.serve.common.model.annotation.RepeatSubmit; +import com.qs.serve.common.model.annotation.SysLog; +import com.qs.serve.common.model.dto.R; +import com.qs.serve.common.model.enums.BizType; +import com.qs.serve.common.model.enums.SystemModule; +import com.qs.serve.modules.bms.mapper.BmsSupplierMapper; +import com.qs.serve.modules.check.common.DataSupplierSo; +import com.qs.serve.modules.check.entity.DataCheckApplyDetailInfo; +import com.qs.serve.modules.check.entity.DataCheckApplyDetailItem; +import com.qs.serve.modules.check.entity.DataCheckApplyMainInfo; +import lombok.AllArgsConstructor; +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 java.math.BigDecimal; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +/** + * 数据 对账单 + * @author YenHex + * @since 2023/5/31 + */ +@Slf4j +@AllArgsConstructor +@RestController +@RequestMapping("data/checkApply") +public class DateCheckApplyController { + + private BmsSupplierMapper supplierMapper; + + /** + * 汇总账单 + * @return + */ + @RepeatSubmit + @GetMapping("/summary") + @SysLog(module = SystemModule.Verification, title = "客户汇总账单", biz = BizType.EXPORT) + public R getSummary(DataSupplierSo param){ + param.getSupplierId(); + DataCheckApplyMainInfo info = new DataCheckApplyMainInfo(); + info.setCostApplyAmt(BigDecimal.ONE); + info.setCheckedAmt(BigDecimal.ONE); + info.setCheckingAmt(BigDecimal.ONE); + info.setNotCheckAmt(BigDecimal.ONE); + info.setDontCheckAmt(BigDecimal.ONE); + info.setPayAmt(BigDecimal.ONE); + info.setUnPayAmt(BigDecimal.ONE); + info.setNotPayAmt(BigDecimal.ONE); + info.setCusName("测试一同胡"); + info.setCusAddress("辽宁省-本溪市-本溪满族自治县-ABKDJFflJKLSDF"); + info.setCusCode("465465465"); + info.setContactUser("测试人"); + info.setContactMobile("13200000000"); + info.setStartDate(LocalDate.now()); + info.setEndDate(LocalDate.now()); + return R.ok(); + } + + /** + * 明细帐 + * @return + */ + @RepeatSubmit + @GetMapping("/itemized") + @SysLog(module = SystemModule.Verification, title = "客户明细帐", biz = BizType.EXPORT) + public R getItemized(DataSupplierSo param){ + DataCheckApplyDetailInfo info = new DataCheckApplyDetailInfo(); + + info.setCusName("测试一同胡"); + info.setCusAddress("辽宁省-本溪市-本溪满族自治县-ABKDJFflJKLSDF"); + info.setCusCode("465465465"); + info.setContactUser("测试人"); + info.setContactMobile("13200000000"); + info.setStartDate(LocalDate.now()); + info.setEndDate(LocalDate.now()); + List detailItemList = new ArrayList<>(); + for (int i = 1; i < 31; i++) { + DataCheckApplyDetailItem item = new DataCheckApplyDetailItem(); + item.setActivityCode(System.currentTimeMillis()+""); + item.setActivityDate("2023-12-"+i); + item.setActivityTheme("2023年12月"+i+"日 375g果乐活动档期补差:0.8/包*12000=9600元"); + item.setCostApplyAmt(BigDecimal.ONE); + item.setCheckedAmt(BigDecimal.ONE); + item.setCheckingAmt(BigDecimal.ONE); + item.setNotCheckAmt(BigDecimal.ONE); + item.setDontCheckAmt(BigDecimal.ONE); + item.setPayAmt(BigDecimal.ONE); + item.setUnPayAmt(BigDecimal.ONE); + item.setNotPayAmt(BigDecimal.ONE); + detailItemList.add(item); + } + info.setDetailList(detailItemList); + return R.ok(info); + } + +} diff --git a/src/main/java/com/qs/serve/modules/check/entity/DataCheckApplyDetailInfo.java b/src/main/java/com/qs/serve/modules/check/entity/DataCheckApplyDetailInfo.java new file mode 100644 index 00000000..293d8179 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/check/entity/DataCheckApplyDetailInfo.java @@ -0,0 +1,58 @@ +package com.qs.serve.modules.check.entity; + +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; + +/** + * 对账单 + * @author YenHex + * @since 2023/5/30 + */ +@Data +public class DataCheckApplyDetailInfo { + + + /** + * 客户名 + */ + private String cusName; + + /** + * 客户地址 + */ + private String cusAddress; + + /** + * 客户编码 + */ + private String cusCode; + + /** + * 联系人用户 + */ + private String contactUser; + + /** + * 联系人 + */ + private String contactMobile; + + /** + * 起始日期 + */ + private LocalDate startDate; + + /** + * 截止日期 + */ + private LocalDate endDate; + + /** + * 明细列表 + */ + private List detailList; + +} diff --git a/src/main/java/com/qs/serve/modules/check/entity/DataCheckApplyDetailItem.java b/src/main/java/com/qs/serve/modules/check/entity/DataCheckApplyDetailItem.java new file mode 100644 index 00000000..a1e1e913 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/check/entity/DataCheckApplyDetailItem.java @@ -0,0 +1,71 @@ +package com.qs.serve.modules.check.entity; + +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * 对账单 + * @author YenHex + * @since 2023/5/30 + */ +@Data +public class DataCheckApplyDetailItem { + + /** + * 活动编号 + */ + private String activityCode; + + /** + * 申请时间 + */ + private String activityDate; + + /** + * 活动主题 + */ + private String activityTheme; + + /** + * 已批准(费用申请) + */ + private BigDecimal costApplyAmt; + + /** + * 已核销 + */ + private BigDecimal checkedAmt; + + /** + * 申请中 + */ + private BigDecimal checkingAmt; + + /** + * 未申请 + */ + private BigDecimal notCheckAmt; + + /** + * 不予核销 + */ + private BigDecimal dontCheckAmt; + + /** + * 已支付 + */ + private BigDecimal payAmt; + + /** + * 待支付 + */ + private BigDecimal unPayAmt; + + /** + * 不再支付 + */ + private BigDecimal notPayAmt; + +} diff --git a/src/main/java/com/qs/serve/modules/check/entity/ExcelCheckApplyMain.java b/src/main/java/com/qs/serve/modules/check/entity/DataCheckApplyMainInfo.java similarity index 97% rename from src/main/java/com/qs/serve/modules/check/entity/ExcelCheckApplyMain.java rename to src/main/java/com/qs/serve/modules/check/entity/DataCheckApplyMainInfo.java index d6b20070..3c8ac7e8 100644 --- a/src/main/java/com/qs/serve/modules/check/entity/ExcelCheckApplyMain.java +++ b/src/main/java/com/qs/serve/modules/check/entity/DataCheckApplyMainInfo.java @@ -11,7 +11,7 @@ import java.time.LocalDate; * @since 2023/5/30 */ @Data -public class ExcelCheckApplyMain { +public class DataCheckApplyMainInfo { /** * 已批准(费用申请) diff --git a/src/main/java/com/qs/serve/modules/his/controller/HistTestController.java b/src/main/java/com/qs/serve/modules/his/controller/HistTestController.java index 37122188..feaa9636 100644 --- a/src/main/java/com/qs/serve/modules/his/controller/HistTestController.java +++ b/src/main/java/com/qs/serve/modules/his/controller/HistTestController.java @@ -7,6 +7,7 @@ import com.qs.serve.common.model.dto.R; import com.qs.serve.common.util.PageUtil; import com.qs.serve.modules.his.service.HisUserChannelPointService; import com.qs.serve.modules.oms.entity.OmsOrder; +import com.qs.serve.task.HisTask; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.prepost.PreAuthorize; @@ -27,6 +28,16 @@ import java.util.List; public class HistTestController { HisUserChannelPointService hisUserChannelPointService; + HisTask hisTask; + + @GetMapping("/initSupplier") + public R initSupplier(){ + if(DevEnvironmentConfig.isDev()){ + hisTask.buildTempTable(); + } + return R.ok(); + } + /** * diff --git a/src/main/java/com/qs/serve/modules/his/entity/HisUserSupplierTemp.java b/src/main/java/com/qs/serve/modules/his/entity/HisUserSupplierTemp.java new file mode 100644 index 00000000..ccaa1252 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/his/entity/HisUserSupplierTemp.java @@ -0,0 +1,134 @@ +package com.qs.serve.modules.his.entity; + +import java.time.LocalDate; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.NotBlank; + +/** + * 供应商负责人 实体类 + * @author YenHex + * @since 2023-05-31 + */ +@Data +@TableName("his_user_supplier_temp") +public class HisUserSupplierTemp implements Serializable { + + private static final long serialVersionUID = 1L; + + /** id */ + @TableId(type = IdType.AUTO) + private Long id; + + /** 用户id */ + @NotBlank(message = "用户id不能为空") + @Length(max = 32,message = "用户id长度不能超过32字") + private String userId; + + /** 供应商id */ + @NotNull(message = "供应商id不能为空") + private Long supplierId; + + /** 供应商名称 */ + @Length(max = 50,message = "供应商名称长度不能超过50字") + private String supplierName; + + /** 供应商编码 */ + @Length(max = 30,message = "供应商编码长度不能超过30字") + private String supplierCode; + + /** 类型:0=销售区域;1=行政区域;2-供应商负责人;9-无相关数据 */ + private Integer type; + + /** 区域id */ + @Length(max = 32,message = "区域id长度不能超过32字") + private String regionId; + + /** 销售区域1 */ + @Length(max = 32,message = "销售区域1长度不能超过32字") + private String saleRegionFirst; + + /** 销售区域2 */ + @Length(max = 32,message = "销售区域2长度不能超过32字") + private String saleRegionSecond; + + /** 销售区域3 */ + @Length(max = 32,message = "销售区域3长度不能超过32字") + private String saleRegionThird; + + /** 销售区域4 */ + @Length(max = 32,message = "销售区域4长度不能超过32字") + private String saleRegionFourthly; + + /** 主要负责人 */ + @NotNull(message = "主要负责人不能为空") + private Integer masterFlag; + + /** 创建时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** 行政区域1 */ + @Length(max = 32,message = "行政区域1长度不能超过32字") + private String bizRegionFirst; + + /** 行政区域2 */ + @Length(max = 32,message = "行政区域2长度不能超过32字") + private String bizRegionSecond; + + /** 行政区域3 */ + @Length(max = 32,message = "行政区域3长度不能超过32字") + private String bizRegionThird; + + /** 行政区域4 */ + @Length(max = 32,message = "行政区域4长度不能超过32字") + private String bizRegionFourthly; + + /** */ + @JsonIgnore + @JsonProperty + private String tenantId; + + /** */ + private Integer costFlag; + + + public static HisUserSupplierTemp toNewObject(HisUserSupplierTemp source){ + HisUserSupplierTemp userSupplierTemp = new HisUserSupplierTemp(); + userSupplierTemp.setId(source.getId()); + userSupplierTemp.setUserId(source.getUserId()); + userSupplierTemp.setSupplierId(source.getSupplierId()); + userSupplierTemp.setSupplierName(source.getSupplierName()); + userSupplierTemp.setSupplierCode(source.getSupplierCode()); + userSupplierTemp.setType(source.getType()); + userSupplierTemp.setRegionId(source.getRegionId()); + userSupplierTemp.setSaleRegionFirst(source.getSaleRegionFirst()); + userSupplierTemp.setSaleRegionSecond(source.getSaleRegionSecond()); + userSupplierTemp.setSaleRegionThird(source.getSaleRegionThird()); + userSupplierTemp.setSaleRegionFourthly(source.getSaleRegionFourthly()); + userSupplierTemp.setMasterFlag(source.getMasterFlag()); + userSupplierTemp.setCreateTime(source.getCreateTime()); + userSupplierTemp.setBizRegionFirst(source.getBizRegionFirst()); + userSupplierTemp.setBizRegionSecond(source.getBizRegionSecond()); + userSupplierTemp.setBizRegionThird(source.getBizRegionThird()); + userSupplierTemp.setBizRegionFourthly(source.getBizRegionFourthly()); + userSupplierTemp.setTenantId(source.getTenantId()); + userSupplierTemp.setCostFlag(source.getCostFlag()); + return userSupplierTemp; + } + +} + diff --git a/src/main/java/com/qs/serve/modules/his/mapper/HisUserSupplierTempMapper.java b/src/main/java/com/qs/serve/modules/his/mapper/HisUserSupplierTempMapper.java new file mode 100644 index 00000000..60a0505c --- /dev/null +++ b/src/main/java/com/qs/serve/modules/his/mapper/HisUserSupplierTempMapper.java @@ -0,0 +1,22 @@ +package com.qs.serve.modules.his.mapper; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qs.serve.modules.his.entity.HisUserSupplierTemp; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Select; + +/** + * 供应商负责人 Mapper + * @author YenHex + * @date 2023-05-31 + */ +public interface HisUserSupplierTempMapper extends BaseMapper { + + @InterceptorIgnore(tenantLine = "1") + //@Select("SELECT * INTO his_user_supplier FROM his_user_supplier_temp") + @Insert("INSERT INTO his_user_supplier SELECT * FROM his_user_supplier_temp") + int selectIntoHis(); + +} + diff --git a/src/main/java/com/qs/serve/modules/his/service/HisUserSupplierService.java b/src/main/java/com/qs/serve/modules/his/service/HisUserSupplierService.java index 43c3d2ab..170e15b5 100644 --- a/src/main/java/com/qs/serve/modules/his/service/HisUserSupplierService.java +++ b/src/main/java/com/qs/serve/modules/his/service/HisUserSupplierService.java @@ -35,7 +35,7 @@ public interface HisUserSupplierService extends IService { /** - * 删除 + * 更新标识(取消删除操作) * @return */ void cleanTable(); diff --git a/src/main/java/com/qs/serve/modules/his/service/HisUserSupplierTempService.java b/src/main/java/com/qs/serve/modules/his/service/HisUserSupplierTempService.java new file mode 100644 index 00000000..92a002e0 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/his/service/HisUserSupplierTempService.java @@ -0,0 +1,21 @@ +package com.qs.serve.modules.his.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.qs.serve.modules.his.entity.HisUserSupplierTemp; + +/** + * 供应商负责人 服务接口 + * @author YenHex + * @date 2023-05-31 + */ +public interface HisUserSupplierTempService extends IService { + + /** + * 重新创建表数据 + */ + void reloadHis(); + + void selectInfoHis(); + +} + diff --git a/src/main/java/com/qs/serve/modules/his/service/impl/HisUserSupplierServiceImpl.java b/src/main/java/com/qs/serve/modules/his/service/impl/HisUserSupplierServiceImpl.java index ffacc267..d8a8becc 100644 --- a/src/main/java/com/qs/serve/modules/his/service/impl/HisUserSupplierServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/his/service/impl/HisUserSupplierServiceImpl.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.pagehelper.PageHelper; +import com.qs.serve.common.framework.redis.RedisService; +import com.qs.serve.common.model.consts.RedisCacheKeys; import com.qs.serve.common.model.dto.PageVo; import com.qs.serve.common.model.dto.R; import com.qs.serve.common.util.AuthContextUtils; @@ -45,6 +47,7 @@ public class HisUserSupplierServiceImpl extends ServiceImpl selectHisSupplier(BmsSupplier param, boolean usePage) { @@ -108,20 +111,12 @@ public class HisUserSupplierServiceImpl extends ServiceImpl existUserIds = new ArrayList<>(); - if(nextChilds) { - List childUserList = sysPostUserService.listByChildIds(userId); - for (String childUserId : childUserList) { - this.initByUserId(childUserId, false, existUserIds); - } - } - return initByUserId(userId, hasCheck,existUserIds); - } - + @Deprecated @Override public boolean initByUserId(String userId,boolean hasCheck, List existUserIds) { + if(1==1){ + return true; + } if(!hasCheck){ if(existUserIds==null){ existUserIds = new ArrayList<>(); @@ -187,6 +182,22 @@ public class HisUserSupplierServiceImpl extends ServiceImpl existUserIds = new ArrayList<>(); + if(nextChilds) { + List childUserList = sysPostUserService.listByChildIds(userId); + for (String childUserId : childUserList) { + this.initByUserId(childUserId, false, existUserIds); + } + } + return initByUserId(userId, hasCheck,existUserIds); + } + private void toHisUserSupplier(List userSuppliers,Integer type,List regionIds,Integer level,String userId){ if(regionIds.size()>0){ @@ -200,7 +211,10 @@ public class HisUserSupplierServiceImpl extends ServiceImpl()); + Integer opt = redisService.getInteger(RedisCacheKeys.HIS_UPDATE); + if(opt==null||opt.equals(0)){ + redisService.set(RedisCacheKeys.HIS_UPDATE,1); + } } } diff --git a/src/main/java/com/qs/serve/modules/his/service/impl/HisUserSupplierTempServiceImpl.java b/src/main/java/com/qs/serve/modules/his/service/impl/HisUserSupplierTempServiceImpl.java new file mode 100644 index 00000000..fe201090 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/his/service/impl/HisUserSupplierTempServiceImpl.java @@ -0,0 +1,143 @@ +package com.qs.serve.modules.his.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qs.serve.common.framework.redis.RedisService; +import com.qs.serve.modules.bms.entity.BmsRegion; +import com.qs.serve.modules.bms.entity.BmsRegion2; +import com.qs.serve.modules.bms.entity.BmsRegionUser; +import com.qs.serve.modules.bms.entity.BmsSupplier; +import com.qs.serve.modules.bms.mapper.BmsRegion2Mapper; +import com.qs.serve.modules.bms.mapper.BmsRegionMapper; +import com.qs.serve.modules.bms.service.BmsRegionUserService; +import com.qs.serve.modules.bms.service.BmsSupplierService; +import com.qs.serve.modules.his.entity.HisUserSupplier; +import com.qs.serve.modules.his.mapper.HisUserSupplierMapper; +import com.qs.serve.modules.sys.entity.SysUser; +import com.qs.serve.modules.sys.mapper.SysUserMapper; +import com.qs.serve.modules.sys.service.SysPostUserService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.qs.serve.modules.his.entity.HisUserSupplierTemp; +import com.qs.serve.modules.his.service.HisUserSupplierTempService; +import com.qs.serve.modules.his.mapper.HisUserSupplierTempMapper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 供应商负责人 服务实现类 + * @author YenHex + * @since 2023-05-31 + */ +@Slf4j +@Service +@AllArgsConstructor +public class HisUserSupplierTempServiceImpl extends ServiceImpl implements HisUserSupplierTempService { + + private final SysUserMapper sysUserMapper; + private final SysPostUserService sysPostUserService; + private final BmsSupplierService bmsSupplierService; + private BmsRegionMapper saleRegionMapper; + private BmsRegion2Mapper bmsRegion2Mapper; + private BmsRegionUserService regionUserService; + private RedisService redisService; + private HisUserSupplierMapper hisUserSupplierMapper; + + @Override + public void selectInfoHis() { + hisUserSupplierMapper.delete(new QueryWrapper<>()); + baseMapper.selectIntoHis(); + } + + @Override + public void reloadHis() { + //移除所有历史 + this.remove(new QueryWrapper<>()); + //加载所有用户 + List sysUser = sysUserMapper.selectList(new QueryWrapper<>()); + List userIds = sysUser.stream().map(a->a.getId()).collect(Collectors.toList()); + //初始化 + for (String userId : userIds) { + this.initByUserId(userId,null); + } + } + + void initByUserId(String userId,List existUserIds){ + if(existUserIds==null){ + existUserIds = new ArrayList<>(); + } + if(existUserIds.contains(userId)){ + return; + }else { + existUserIds.add(userId); + } + List childUserIds = sysPostUserService.listByChildIds(userId); + for (String childUserId : childUserIds) { + this.initByUserId(childUserId, existUserIds); + } + BmsSupplier param = new BmsSupplier(); + param.setCurrUserId(userId); + List list = bmsSupplierService.selectSupplierList(param); + List userSuppliers = new ArrayList<>(); + for (BmsSupplier supplier : list) { + HisUserSupplierTemp userSupplier = supplier.toHisUserSupplierTemp(userId,3); + userSuppliers.add(userSupplier); + } + LambdaQueryWrapper regionUserLqw = new LambdaQueryWrapper<>(); + regionUserLqw.eq(BmsRegionUser::getUserId,userId); + List regionUsers = regionUserService.list(regionUserLqw); + List regionSaleIds = regionUsers.stream() + .filter(a->a.getType().equals(0)) + .map(BmsRegionUser::getRegionId) + .collect(Collectors.toList()); + if(regionSaleIds.size()>0){ + List saleRegions = saleRegionMapper.selectBatchIds(regionSaleIds); + Map> saleRegionsMap = saleRegions.stream().collect(Collectors.groupingBy(BmsRegion::getLevel)); + for (Integer level : saleRegionsMap.keySet()) { + List saleRegionListByLevel = saleRegionsMap.get(level); + List regionIds = saleRegionListByLevel.stream().map(BmsRegion::getId).collect(Collectors.toList()); + toHisUserSupplier(userSuppliers,0,regionIds,level,userId); + } + } + List regionBizIds = regionUsers.stream() + .filter(a->a.getType().equals(1)) + .map(BmsRegionUser::getRegionId) + .collect(Collectors.toList()); + if(regionBizIds.size()>0){ + List bizRegions = bmsRegion2Mapper.selectBatchIds(regionBizIds); + Map> saleRegionsMap = bizRegions.stream().collect(Collectors.groupingBy(BmsRegion2::getLevel)); + for (Integer level : saleRegionsMap.keySet()) { + List region2List = saleRegionsMap.get(level); + List region2Ids = region2List.stream().map(BmsRegion2::getId).collect(Collectors.toList()); + toHisUserSupplier(userSuppliers,1,region2Ids,level,userId); + } + } + if(userSuppliers.size()>0){ + this.saveBatch(userSuppliers); + }else { + HisUserSupplierTemp userSupplier = new HisUserSupplierTemp(); + userSupplier.setUserId(userId); + userSupplier.setSupplierId(0L); + userSupplier.setType(9); + this.save(userSupplier); + } + } + + + private void toHisUserSupplier(List userSuppliers,Integer type,List regionIds,Integer level,String userId){ + if(regionIds.size()>0){ + List supplierList = bmsSupplierService.listByRegionIds(regionIds,level); + for (BmsSupplier supplier : supplierList) { + HisUserSupplierTemp userSupplier = supplier.toHisUserSupplierTemp(userId,type); + userSuppliers.add(userSupplier); + } + } + } + +} + diff --git a/src/main/java/com/qs/serve/task/HisTask.java b/src/main/java/com/qs/serve/task/HisTask.java new file mode 100644 index 00000000..14fdb13c --- /dev/null +++ b/src/main/java/com/qs/serve/task/HisTask.java @@ -0,0 +1,58 @@ +package com.qs.serve.task; + +import com.qs.serve.common.framework.redis.RedisService; +import com.qs.serve.common.model.consts.RedisCacheKeys; +import com.qs.serve.common.util.AuthContextUtils; +import com.qs.serve.modules.his.service.HisUserSupplierTempService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.time.Duration; +import java.time.LocalDateTime; +import java.util.concurrent.TimeUnit; + +/** + * @author YenHex + * @since 2023/5/31 + */ +@Slf4j +@Component +@AllArgsConstructor +public class HisTask { + + RedisService redisService; + HisUserSupplierTempService tempService; + + /** + * 每隔半小时执行一次,串行 + */ + @Scheduled(cron="0 0/30 * * * ?") + public void buildTempTable(){ + AuthContextUtils.setTenant("001"); + Integer opt = redisService.getInteger(RedisCacheKeys.HIS_UPDATE); + //设置默认值 + if (opt==null){ + redisService.set(RedisCacheKeys.HIS_UPDATE,0); + return; + } + //忽略状态 + if (opt==1){ + //执行同步 + log.warn("======================执行同步======================"); + LocalDateTime s1 = LocalDateTime.now(); + //防卡死,加入超时 + redisService.set(RedisCacheKeys.HIS_UPDATE,2,1, TimeUnit.HOURS); + tempService.reloadHis(); + LocalDateTime s2 = LocalDateTime.now(); + long diff = Duration.between(s1, s2).getSeconds(); + tempService.selectInfoHis(); + redisService.set(RedisCacheKeys.HIS_UPDATE,0); + log.warn("======================执行同步完成,耗时[ {} 秒]======================",diff); + } + + } + + +} diff --git a/src/main/java/com/qs/serve/task/TbsTask.java b/src/main/java/com/qs/serve/task/TbsTask.java index 12f5aa8c..1ecd7822 100644 --- a/src/main/java/com/qs/serve/task/TbsTask.java +++ b/src/main/java/com/qs/serve/task/TbsTask.java @@ -25,6 +25,7 @@ public class TbsTask { private final TbsActivityService activityService; private final TbsActivityTemplateService activityTemplateService; + //todo 每日更新过期的活动,过期则进行冻结 public void task1(){ AuthContextUtils.setTenant("001");