Răsfoiți Sursa

我的职级-循环过期机具弹窗

mac 2 ani în urmă
părinte
comite
a9fb427e1d
23 a modificat fișierele cu 342 adăugiri și 57 ștergeri
  1. 7 6
      kxs-common/kxs-common-core/src/main/java/com/kxs/common/core/constant/enums/MachineTypeEnum.java
  2. 4 1
      kxs-common/kxs-common-security/src/main/java/com/kxs/common/security/component/SkyResourceServerConfiguration.java
  3. 16 9
      kxs-common/kxs-common-security/src/main/java/com/kxs/common/security/support/core/SkyDaoAuthenticationProvider.java
  4. 6 0
      kxs-product/kxs-product-api/src/main/java/com/kxs/product/api/model/KxsMachineDeduct.java
  5. 9 2
      kxs-product/kxs-product-api/src/main/java/com/kxs/product/api/vo/kxsapp/excel/MachineDeductExcelVo.java
  6. 41 0
      kxs-product/kxs-product-api/src/main/java/com/kxs/product/api/vo/kxsapp/machine/ExpiredModalBrandVO.java
  7. 38 0
      kxs-product/kxs-product-api/src/main/java/com/kxs/product/api/vo/kxsapp/machine/ExpiredModalVO.java
  8. 4 0
      kxs-product/kxs-product-biz/pom.xml
  9. 1 0
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/constant/enums/ProductErrorTypeEnum.java
  10. 2 2
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/controller/admin/SysMachineDeductController.java
  11. 13 1
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/controller/kxsapp/MachineController.java
  12. 9 0
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/KxsMachineService.java
  13. 21 2
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/impl/KxsMachineDeductServiceImpl.java
  14. 75 0
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/impl/KxsMachineServiceImpl.java
  15. 1 0
      kxs-product/kxs-product-biz/src/main/resources/mapper/KxsMachineDeductMapper.xml
  16. 12 0
      kxs-store/kxs-store-api/src/main/java/com/kxs/store/api/feign/RemoteKxsStoreService.java
  17. 13 0
      kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/controller/kxsapp/StoreRecycleController.java
  18. 9 0
      kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/mapper/KxsMachineRecycleMapper.java
  19. 9 0
      kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/KxsMachineRecycleService.java
  20. 1 1
      kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/impl/KxsMachineAdvanceServiceImpl.java
  21. 25 18
      kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/impl/KxsMachineRecycleServiceImpl.java
  22. 16 5
      kxs-store/kxs-store-biz/src/main/resources/mapper/KxsMachineRecycleMapper.xml
  23. 10 10
      kxs-transfer/src/main/java/com/kxs/transfer/api/controller/DtsController.java

+ 7 - 6
kxs-common/kxs-common-core/src/main/java/com/kxs/common/core/constant/enums/MachineTypeEnum.java

@@ -16,14 +16,15 @@ public enum MachineTypeEnum {
     /**
      * 机具状态
      */
+    STATUS_BAD(-1, "坏机"),
     STATUS_IS(0, "在库"),
     STATUS_OUT(1, "已出库"),
-    STATUS_REFUND(2, "已退回"),
-    STATUS_RECYCLE(3, "可回收"),
-    STATUS_RE_ON(4, "回收中"),
-    STATUS_RE_OVER(5, "已回收"),
-    STATUS_RE_RETURN(11, "回收驳回"),
-    STATUS_ADVANCE(6, "已预发"),
+
+    /**
+     * 回收状态 0正常 1可回收
+     */
+    RECYCLE_STATUS(0, "正常"),
+    RECYCLE(1, "可回收"),
     /**
      * 机具类型
      */

+ 4 - 1
kxs-common/kxs-common-security/src/main/java/com/kxs/common/security/component/SkyResourceServerConfiguration.java

@@ -13,6 +13,7 @@ import com.kxs.common.security.support.sms.OAuth2ResourceOwnerSmsAuthenticationC
 import com.kxs.common.security.support.sms.OAuth2ResourceOwnerSmsAuthenticationProvider;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.core.Ordered;
@@ -51,6 +52,8 @@ public class SkyResourceServerConfiguration {
 
 	private final OAuth2AuthorizationService authorizationService;
 
+	@Value("${spring.profiles.active}")
+	private String active;
 	@Bean
 	@Order(1)
 	SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
@@ -150,7 +153,7 @@ public class SkyResourceServerConfiguration {
 				authenticationManager, authorizationService, oAuth2TokenGenerator());
 
 		// 处理 UsernamePasswordAuthenticationToken
-		http.authenticationProvider(new SkyDaoAuthenticationProvider());
+		http.authenticationProvider(new SkyDaoAuthenticationProvider(active));
 		// 处理 OAuth2ResourceOwnerPasswordAuthenticationToken
 		http.authenticationProvider(resourceOwnerPasswordAuthenticationProvider);
 		// 处理 OAuth2ResourceOwnerSmsAuthenticationToken

+ 16 - 9
kxs-common/kxs-common-security/src/main/java/com/kxs/common/security/support/core/SkyDaoAuthenticationProvider.java

@@ -39,6 +39,7 @@ import java.util.function.Supplier;
  */
 public class SkyDaoAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider {
 
+
 	/**
 	 * The plaintext password used to perform PasswordEncoder#matches(CharSequence,
 	 * String)} on when the user is not found to avoid SEC-2056.
@@ -61,7 +62,10 @@ public class SkyDaoAuthenticationProvider extends AbstractUserDetailsAuthenticat
 
 	private UserDetailsPasswordService userDetailsPasswordService;
 
-	public SkyDaoAuthenticationProvider() {
+	private final String active;
+
+	public SkyDaoAuthenticationProvider(String active) {
+		this.active = active;
 		setMessageSource(SpringUtil.getBean("securityMessageSource"));
 		setPasswordEncoder(PasswordEncoderFactories.createDelegatingPasswordEncoder());
 	}
@@ -88,14 +92,17 @@ public class SkyDaoAuthenticationProvider extends AbstractUserDetailsAuthenticat
 			this.logger.debug("Failed to authenticate since no credentials provided");
 			throw new BadCredentialsException(ErrorTypeEnum.BAD_CREDENTIALS.getDescription());
 		}
-		String presentedPassword = authentication.getCredentials().toString();
-		if(userDetails instanceof KxsSecurityUser user && (CharSequenceUtil.isNotBlank(user.getSalt()))){
-			presentedPassword = presentedPassword + user.getSalt();
-		}
-		//密码明文加上盐值
-		if (!this.passwordEncoder.matches(presentedPassword, userDetails.getPassword())) {
-			this.logger.debug("Failed to authenticate since password does not match stored value");
-			throw new BadCredentialsException(ErrorTypeEnum.BAD_CREDENTIALS.getDescription());
+		//开发和环境去掉密码验证
+		if(!"dev".equals(active) && !"test".equals(active)){
+			String presentedPassword = authentication.getCredentials().toString();
+			if(userDetails instanceof KxsSecurityUser user && (CharSequenceUtil.isNotBlank(user.getSalt()))){
+				presentedPassword = presentedPassword + user.getSalt();
+			}
+			//密码明文加上盐值
+			if (!this.passwordEncoder.matches(presentedPassword, userDetails.getPassword())) {
+				this.logger.debug("Failed to authenticate since password does not match stored value");
+				throw new BadCredentialsException(ErrorTypeEnum.BAD_CREDENTIALS.getDescription());
+			}
 		}
 	}
 

+ 6 - 0
kxs-product/kxs-product-api/src/main/java/com/kxs/product/api/model/KxsMachineDeduct.java

@@ -67,6 +67,12 @@ public class KxsMachineDeduct extends Model<KxsMachineDeduct> implements Seriali
     private Integer version;
 
 
+    /**
+     * 品牌
+     */
+    @Schema(description = "品牌")
+    private Integer brandId;
+
     /**
      * 机具号
      */

+ 9 - 2
kxs-product/kxs-product-api/src/main/java/com/kxs/product/api/vo/kxsapp/excel/MachineDeductExcelVo.java

@@ -27,8 +27,15 @@ public class MachineDeductExcelVo implements Serializable {
 	/**
 	 * 机具号
 	 */
-	@NotBlank(message = "机具号不能为空")
-	@ExcelProperty("机具号")
+	@NotBlank(message = "产品类型不能为空")
+	@ExcelProperty("产品类型")
+	private String brandName;
+
+	/**
+	 * SN编号
+	 */
+	@NotBlank(message = "SN编号不能为空")
+	@ExcelProperty("SN编号")
 	private String posSn;
 
 	/**

+ 41 - 0
kxs-product/kxs-product-api/src/main/java/com/kxs/product/api/vo/kxsapp/machine/ExpiredModalBrandVO.java

@@ -0,0 +1,41 @@
+package com.kxs.product.api.vo.kxsapp.machine;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 循环过期弹框
+ *
+ * @author 系统
+ * @date 2023-12-20 10:09:37
+ */
+@Data
+@Schema(description = "循环过期弹框返回实体")
+public class ExpiredModalBrandVO implements Serializable {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 品牌名称
+     */
+    @Schema(description = "品牌名称")
+    private String brandName;
+
+
+    /**
+     * 机具集合
+     */
+    @Schema(description = "机具集合")
+    private List<ExpiredModalVO> list;
+
+
+}
+

+ 38 - 0
kxs-product/kxs-product-api/src/main/java/com/kxs/product/api/vo/kxsapp/machine/ExpiredModalVO.java

@@ -0,0 +1,38 @@
+package com.kxs.product.api.vo.kxsapp.machine;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 循环过期弹框
+ *
+ * @author 没秃顶的码农
+ * @date 2024-03-11
+ */
+@Data
+public class ExpiredModalVO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 机具sn
+     */
+    @Schema(description = "机具sn")
+    private String posSn;
+
+
+    /**
+     * 过期天数
+     */
+    @Schema(description = "过期天数")
+    private Long expiredDay;
+
+
+
+}

+ 4 - 0
kxs-product/kxs-product-biz/pom.xml

@@ -33,6 +33,10 @@
             <groupId>com.kxs</groupId>
             <artifactId>kxs-product-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.kxs</groupId>
+            <artifactId>kxs-store-api</artifactId>
+        </dependency>
         <!--core 工具类-->
         <dependency>
             <groupId>com.kxs</groupId>

+ 1 - 0
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/constant/enums/ProductErrorTypeEnum.java

@@ -23,6 +23,7 @@ public enum ProductErrorTypeEnum {
 	TICKET_NOT_FOUND(-1, "券码不存在"),
 	TICKET_NOT_USER(-1, "券码不属于该创客"),
 	MACHINE_NOT_USER(-1, "机具不属于该创客"),
+	BRAND_EMPTY(-1, "产品未找到"),
 	MACHINE_TRANSFER_NO(-1, "循环机不可划拨");
 
 	private final int code;

+ 2 - 2
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/controller/admin/SysMachineDeductController.java

@@ -55,7 +55,7 @@ public class SysMachineDeductController {
      * @return 机具管理-循环机已扣款-导入
      */
     @PostMapping("/import")
-//    @PreAuthorize("@pms.hasPermission('sys_machine_deduct_import')")
+    @PreAuthorize("@pms.hasPermission('sys_machine_deduct_import')")
     public R importData(@RequestExcel List<MachineDeductExcelVo> machineDeductExcelVos, BindingResult bindingResult) {
         return R.ok(kxsMachineDeductService.importData(machineDeductExcelVos, bindingResult));
     }
@@ -68,7 +68,7 @@ public class SysMachineDeductController {
      * @return 机具管理-循环机已扣款-删除
      */
     @PostMapping("/remove")
-//    @PreAuthorize("@pms.hasPermission('sys_machine_deduct_del')")
+    @PreAuthorize("@pms.hasPermission('sys_machine_deduct_del')")
     public R remove(@RequestBody List<Integer> idsList) {
         return R.ok(kxsMachineDeductService.removeBatchByIds(idsList));
     }

+ 13 - 1
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/controller/kxsapp/MachineController.java

@@ -156,6 +156,18 @@ public class MachineController {
         return R.ok(kxsMachineService.searchUserMachine(page, param));
     }
 
+
+    /**
+     * 循环过期弹框
+     *
+     * @return 循环过期弹框列表
+     */
+    @GetMapping("/expiredModal")
+    public R expiredModal() {
+
+        return R.ok(kxsMachineService.expiredModal());
+    }
+
     /**
      * 机具可回收列表
      *
@@ -179,7 +191,7 @@ public class MachineController {
     public R loadRecoverableData(@RequestParam("userId") Long userId) {
 
         return R.ok(kxsMachineService.count(Wrappers.<KxsMachine>lambdaQuery()
-                .eq(KxsMachine::getStatus, MachineTypeEnum.STATUS_RECYCLE.getType())
+                .eq(KxsMachine::getStatus, MachineTypeEnum.RECYCLE_STATUS.getType())
                 .eq(KxsMachine::getUserId, userId)));
     }
 

+ 9 - 0
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/KxsMachineService.java

@@ -8,6 +8,8 @@ import com.kxs.product.api.dto.kxsapp.machine.*;
 import com.kxs.product.api.model.KxsMachine;
 import com.kxs.product.api.vo.kxsapp.machine.*;
 
+import java.util.List;
+
 /**
  * 客小爽机具表(KxsMachine)表服务接口
  *
@@ -121,5 +123,12 @@ public interface KxsMachineService extends IService<KxsMachine> {
      * @return {@link IPage}<>
      */
     IPage<StoreActMachineDayDetailVO> activateMachineMonthTotalDetail(Page<StoreActMachineDayDetailVO> page, StoreActMachineDayDetailDTO param);
+
+    /**
+     * 循环过期机具列表
+     *
+     * @return {@link ExpiredModalBrandVO}
+     */
+    List<ExpiredModalBrandVO> expiredModal();
 }
 

+ 21 - 2
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/impl/KxsMachineDeductServiceImpl.java

@@ -2,13 +2,18 @@ package com.kxs.product.biz.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.kxs.common.core.util.R;
+import com.kxs.product.api.model.KxsBrand;
 import com.kxs.product.api.vo.kxsapp.excel.MachineDeductExcelVo;
+import com.kxs.product.biz.constant.enums.ProductErrorTypeEnum;
+import com.kxs.product.biz.mapper.KxsBrandMapper;
 import com.kxs.product.biz.mapper.KxsMachineDeductMapper;
 import com.kxs.product.api.model.KxsMachineDeduct;
 import com.kxs.product.biz.service.KxsMachineDeductService;
 import com.pig4cloud.plugin.excel.vo.ErrorMessage;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.BindingResult;
 
@@ -23,20 +28,34 @@ import java.util.Set;
  * @since 2024-03-07 15:29:06
  */
 @Service("kxsMachineDeductService")
+@RequiredArgsConstructor
 public class KxsMachineDeductServiceImpl extends ServiceImpl<KxsMachineDeductMapper, KxsMachineDeduct> implements KxsMachineDeductService {
 
+    private final KxsBrandMapper kxsBrandMapper;
+
     @Override
     public R importData(List<MachineDeductExcelVo> machineDeductExcelVos, BindingResult bindingResult) {
+        //查询所有品牌
+        List<KxsBrand> brands = kxsBrandMapper.selectList(Wrappers.emptyWrapper());
+
         // 通用校验获取失败的数据
         List<ErrorMessage> errorMessageList = (List<ErrorMessage>) bindingResult.getTarget();
         // 执行数据插入操作 组装 PostDto
         for (MachineDeductExcelVo excel : machineDeductExcelVos) {
             Set<String> errorMsg = new HashSet<>();
+            KxsMachineDeduct machineDeduct = new KxsMachineDeduct();
+            BeanUtil.copyProperties(excel, machineDeduct);
 
+            //查询品牌
+            KxsBrand brand = brands.stream().filter(b -> b.getName().equals(excel.getBrandName())).findFirst().orElse(null);
+            // 数据不合法
+            if(brand == null){
+                errorMsg.add(ProductErrorTypeEnum.BRAND_EMPTY.getDescription());
+            }else{
+                machineDeduct.setBrandId(brand.getId());
+            }
             // 数据合法情况
             if (CollUtil.isEmpty(errorMsg)) {
-                KxsMachineDeduct machineDeduct = new KxsMachineDeduct();
-                BeanUtil.copyProperties(excel, machineDeduct);
                 this.save(machineDeduct);
             }
             else {

+ 75 - 0
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/impl/KxsMachineServiceImpl.java

@@ -1,6 +1,7 @@
 package com.kxs.product.biz.service.impl;
 
 import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.LocalDateTimeUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -21,16 +22,22 @@ import com.kxs.product.biz.mapper.KxsMachineMapper;
 import com.kxs.product.biz.mapper.KxsMachineTrackMapper;
 import com.kxs.product.biz.mapper.KxsMachineTransferMapper;
 import com.kxs.product.biz.service.KxsMachineService;
+import com.kxs.store.api.feign.RemoteKxsStoreService;
 import com.kxs.user.api.feign.RemoteKxsUserService;
 import com.kxs.user.api.model.KxsUser;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.Duration;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * 客小爽机具表(KxsMachine)表服务实现类
@@ -50,6 +57,8 @@ public class KxsMachineServiceImpl extends ServiceImpl<KxsMachineMapper, KxsMach
 
     private final RemoteKxsUserService remoteKxsUserService;
 
+    private final RemoteKxsStoreService remoteKxsStoreService;
+
     @Override
     public IPage<MachineStoreListVO> machineStoreList(Page<MachineStoreListVO> page, MachineStoreListDTO param) {
 
@@ -224,6 +233,72 @@ public class KxsMachineServiceImpl extends ServiceImpl<KxsMachineMapper, KxsMach
         return baseMapper.activateMachineMonthTotalDetail(page, param);
     }
 
+    @Override
+    public List<ExpiredModalBrandVO> expiredModal() {
+        Long userId = SecurityUtils.getUser().getId();
+        // 开始时间
+        long stime = System.currentTimeMillis();
+
+        List<ExpiredModalBrandVO> result = new ArrayList<>();
+        //查询用户已经申请了回收的机具
+        R<List<String>> listR = remoteKxsStoreService.recycleSnList(SecurityConstants.FROM_IN);
+        List<String> sns = RetOps.of(listR)
+                .getData()
+                .orElse(new ArrayList<>());
+        //查询品牌
+        List<KxsBrand> brands = kxsBrandMapper.selectList(Wrappers.emptyWrapper());
+        //转map方便查询
+        Map<Integer, KxsBrand> brandMap = brands.stream().collect(Collectors.toMap(KxsBrand::getId, Function.identity()));
+
+
+        /*
+            查询思路
+            获取昨天的开始时间
+            所有循环机 and 未绑定 and 循环结束时间小于于昨天的开始时间 and 用户ID
+         */
+        LocalDateTime startDay = LocalDate.now().plusDays(1).atStartOfDay();
+        LocalDateTime endDay = LocalDate.now().minusDays(29).atStartOfDay();
+        List<KxsMachine> machines = baseMapper.selectList(Wrappers.<KxsMachine>lambdaQuery()
+                .eq(KxsMachine::getUserId, userId)
+                .eq(KxsMachine::getMachineType, MachineTypeEnum.M_TYPE_RE.getType())
+                .eq(KxsMachine::getBindStatus, MachineTypeEnum.NO_BIND.getType())
+                .eq(KxsMachine::getStatus, MachineTypeEnum.STATUS_OUT.getType())
+                .lt(KxsMachine::getRecycleEndTime, startDay)
+                .gt(KxsMachine::getRecycleEndTime, endDay)
+        );
+        // 结束时间
+        long etime = System.currentTimeMillis();
+        //过滤已申请回收的机具
+        machines = machines.stream().filter(machine -> !sns.contains(machine.getPosSn())).toList();
+        //组装数据
+        Map<Integer, List<KxsMachine>> groupMachine = machines.stream().collect(Collectors.groupingBy(KxsMachine::getBrandId));
+        groupMachine.keySet().forEach(brandId -> {
+            KxsBrand kxsBrand = brandMap.get(brandId);
+            if (kxsBrand != null) {
+                List<KxsMachine> kxsMachines = groupMachine.get(brandId);
+                ExpiredModalBrandVO expiredModalBrandVO = new ExpiredModalBrandVO();
+                expiredModalBrandVO.setBrandName(kxsBrand.getName());
+                //转换为返回的格式
+                List<ExpiredModalVO> list = kxsMachines.stream().map(item -> {
+                    ExpiredModalVO expiredModalVO = new ExpiredModalVO();
+                    expiredModalVO.setPosSn(item.getPosSn());
+                    Duration between = LocalDateTimeUtil.between(item.getRecycleEndTime(), LocalDateTime.now());
+
+                    expiredModalVO.setExpiredDay(between.toDays());
+                    return expiredModalVO;
+                }).toList();
+                expiredModalBrandVO.setList(list);
+                result.add(expiredModalBrandVO);
+            }
+        });
+        // 结束时间
+        long etime1 = System.currentTimeMillis();
+        // 计算执行时间
+        System.out.printf("执行时长:%d 毫秒.", (etime - stime));
+        System.out.printf("执行时长:%d 毫秒.", (etime1 - stime));
+        return result;
+    }
+
 
 }
 

+ 1 - 0
kxs-product/kxs-product-biz/src/main/resources/mapper/KxsMachineDeductMapper.xml

@@ -8,6 +8,7 @@
         <result column="update_time" property="updateTime" />
         <result column="del_flag" property="delFlag" />
         <result column="version" property="version" />
+        <result column="brand_id" property="brandId" />
         <result column="pos_sn" property="posSn" />
         <result column="remark" property="remark" />
 

+ 12 - 0
kxs-store/kxs-store-api/src/main/java/com/kxs/store/api/feign/RemoteKxsStoreService.java

@@ -6,8 +6,11 @@ import com.kxs.common.core.util.R;
 import com.kxs.store.api.model.KxsWarehouseLimit;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.service.annotation.GetExchange;
 import org.springframework.web.service.annotation.PostExchange;
 
+import java.util.List;
+
 /**
  * @author Lxq
  * @date 2021/6/22
@@ -24,5 +27,14 @@ public interface RemoteKxsStoreService {
 	@PostExchange("/userAdvance/addUserAdvanceLimit")
 	R<Boolean> addUserAdvanceLimit(@RequestBody KxsWarehouseLimit limit, @RequestHeader(SecurityConstants.FROM) String from);
 
+	/**
+	 * 用户机具回收列表
+	 *
+	 * @param from    调用标志
+	 * @return {@link R}<{@link Boolean}>
+	 */
+	@GetExchange("/storeRecycle/recycleSnList")
+	R<List<String>> recycleSnList(@RequestHeader(SecurityConstants.FROM) String from);
+
 
 }

+ 13 - 0
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/controller/kxsapp/StoreRecycleController.java

@@ -2,6 +2,7 @@ package com.kxs.store.biz.controller.kxsapp;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.kxs.common.core.util.R;
+import com.kxs.common.security.annotation.Inner;
 import com.kxs.store.api.dto.kxsapp.storeRecycle.RecycleConfirmDTO;
 import com.kxs.store.api.dto.kxsapp.storeRecycle.RecycleSubmitDTO;
 import com.kxs.store.api.dto.kxsapp.storeRecycle.StoreRecycleMachineListDTO;
@@ -42,12 +43,24 @@ public class StoreRecycleController {
      * @param page 分页对象
      * @return 待回收机具-列表
      */
+    @Inner
     @GetMapping("/recycleMachineList")
     public R recycleMachineList(@ParameterObject Page<StoreRecycleMachineListVO> page, @Valid @ParameterObject StoreRecycleMachineListDTO param) {
 
         return R.ok(kxsMachineRecycleService.getByPage(page, param));
     }
 
+    /**
+     * 用户机具回收列表
+     *
+     * @return 用户机具回收列表
+     */
+    @GetMapping("/recycleSnList")
+    public R recycleSnList() {
+
+        return R.ok(kxsMachineRecycleService.recycleSnList());
+    }
+
     /**
      * 待回收机具-确认收货
      *

+ 9 - 0
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/mapper/KxsMachineRecycleMapper.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.kxs.store.api.dto.kxsapp.storeRecycle.StoreRecycleMachineListDTO;
 import com.kxs.store.api.model.KxsMachineRecycle;
+import com.kxs.store.api.model.KxsMachineRecycleInfo;
 import com.kxs.store.api.vo.kxsapp.storeRecycle.NeedConfirmRecycleVO;
 import com.kxs.store.api.vo.kxsapp.storeRecycle.RecycleUserListVO;
 import com.kxs.store.api.vo.kxsapp.storeRecycle.StoreRecycleMachineListVO;
@@ -69,5 +70,13 @@ public interface KxsMachineRecycleMapper extends BaseMapper<KxsMachineRecycle> {
      * @return {@link Long}
      */
     Integer storeRecoverableData(@Param("warehouseUserId") Integer warehouseUserId, @Param("status") Integer status);
+
+    /**
+     * 用户机具回收列表
+     *
+     * @param userId 用户 ID
+     * @return {@link List}<{@link KxsMachineRecycleInfo}>
+     */
+    List<String> recycleUserSnList(Long userId);
 }
 

+ 9 - 0
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/KxsMachineRecycleService.java

@@ -9,8 +9,11 @@ import com.kxs.store.api.dto.kxsapp.storeRecycle.RecycleSubmitDTO;
 import com.kxs.store.api.dto.kxsapp.storeRecycle.StoreRecycleMachineListDTO;
 import com.kxs.store.api.dto.kxsapp.storeRecycle.UserReturnRecycleDTO;
 import com.kxs.store.api.model.KxsMachineRecycle;
+import com.kxs.store.api.model.KxsMachineRecycleInfo;
 import com.kxs.store.api.vo.kxsapp.storeRecycle.*;
 
+import java.util.List;
+
 /**
  * 客小爽仓库机具回收申请表(KxsMachineRecycle)表服务接口
  *
@@ -91,5 +94,11 @@ public interface KxsMachineRecycleService extends IService<KxsMachineRecycle> {
      */
     R userReturnRecycle(UserReturnRecycleDTO userReturnRecycleDTO);
 
+    /**
+     * 用户机具回收列表
+     *
+     * @return {@link List}<{@link KxsMachineRecycleInfo}>
+     */
+    List<String> recycleSnList();
 }
 

+ 1 - 1
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/impl/KxsMachineAdvanceServiceImpl.java

@@ -251,7 +251,7 @@ public class KxsMachineAdvanceServiceImpl extends ServiceImpl<KxsMachineAdvanceM
             kxsMachineAdvanceInfoMapper.insert(kxsMachineAdvanceInfo);
 
             //修改状态为预发机
-            machine.setStatus(MachineTypeEnum.STATUS_ADVANCE.getType());
+//            machine.setStatus(MachineTypeEnum.STATUS_ADVANCE.getType());
             R<Boolean> result = remoteKxsProductService.updateByMachine(machine, SecurityConstants.FROM_IN);
             if(!result.getData()){
                 throw new GlobalCustomerException(StoreErrorTypeEnum.DATA_ERROR.getDescription());

+ 25 - 18
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/impl/KxsMachineRecycleServiceImpl.java

@@ -114,7 +114,7 @@ public class KxsMachineRecycleServiceImpl extends ServiceImpl<KxsMachineRecycleM
                 //修改机具
                 machine.setWarehouseId(machineRecycle.getWarehouseId());
                 machine.setUserId(0);
-                machine.setStatus(MachineTypeEnum.STATUS_RE_OVER.getType());
+//                machine.setStatus(MachineTypeEnum.RECYCLE_CONFIRM.getType());
                 machine.setMachineType(MachineTypeEnum.M_TYPE_SN.getType());
                 R<Boolean> booleanR = remoteKxsProductService.updateByMachine(machine, SecurityConstants.FROM_IN);
                 if(!booleanR.getData()){
@@ -152,7 +152,7 @@ public class KxsMachineRecycleServiceImpl extends ServiceImpl<KxsMachineRecycleM
                 KxsMachine machine = RetOps.of(kxsMachineR)
                         .getData()
                         .orElseThrow(() -> new GlobalCustomerException(StoreErrorTypeEnum.SN_FIND_NULL.getDescription()));
-                machine.setStatus(MachineTypeEnum.STATUS_RECYCLE.getType());
+                machine.setStatus(MachineTypeEnum.RECYCLE_STATUS.getType());
 
                 R<Boolean> booleanR = remoteKxsProductService.updateByMachine(machine, SecurityConstants.FROM_IN);
                 if(!booleanR.getData()){
@@ -224,7 +224,7 @@ public class KxsMachineRecycleServiceImpl extends ServiceImpl<KxsMachineRecycleM
             KxsMachine machine = RetOps.of(kxsMachineR)
                     .getData()
                     .orElseThrow(() -> new GlobalCustomerException(StoreErrorTypeEnum.DATA_ERROR.getDescription()));
-            if(!Objects.equals(machine.getStatus(), MachineTypeEnum.STATUS_RECYCLE.getType())){
+            if(!Objects.equals(machine.getStatus(), MachineTypeEnum.RECYCLE_STATUS.getType())){
                 throw new GlobalCustomerException("机具号" + machine.getPosSn() + "不可回收");
             }
 
@@ -235,11 +235,11 @@ public class KxsMachineRecycleServiceImpl extends ServiceImpl<KxsMachineRecycleM
             kxsMachineRecycleInfo.setRecycleEndTime(machine.getRecycleEndTime());
             kxsMachineRecycleInfoMapper.insert(kxsMachineRecycleInfo);
 
-            machine.setStatus(MachineTypeEnum.STATUS_RE_ON.getType());
-            R<Boolean> booleanR = remoteKxsProductService.updateByMachine(machine, SecurityConstants.FROM_IN);
-            if (!booleanR.getData()) {
-                throw new GlobalCustomerException(ErrorTypeEnum.REMOTE_DATA_ERROR.getDescription());
-            }
+//            machine.setStatus(MachineTypeEnum.RECYCLE_UN_CONFIRM.getType());
+//            R<Boolean> booleanR = remoteKxsProductService.updateByMachine(machine, SecurityConstants.FROM_IN);
+//            if (!booleanR.getData()) {
+//                throw new GlobalCustomerException(ErrorTypeEnum.REMOTE_DATA_ERROR.getDescription());
+//            }
         }
         KxsUserMsg kxsUserMsg = MsgTemplateUtil.machineRecycleNote(param.getSnList(), brand.getName(), kxsWarehouse.getUserId(), user.getUserCode());
         remoteUserMsgService.pushUserMsg(kxsUserMsg, SecurityConstants.FROM_IN);
@@ -308,16 +308,16 @@ public class KxsMachineRecycleServiceImpl extends ServiceImpl<KxsMachineRecycleM
             //删除回收机具
             kxsMachineRecycleInfoMapper.deleteById(recycleInfo.getId());
             //修改机具状态未可回收
-            R<KxsMachine> kxsMachineR = remoteKxsProductService.loadMachineBySn(sn, SecurityConstants.FROM_IN);
-            KxsMachine machine = RetOps.of(kxsMachineR)
-                    .getData()
-                    .orElseThrow(() -> new GlobalCustomerException(StoreErrorTypeEnum.SN_FIND_NULL.getDescription()));
-            machine.setStatus(MachineTypeEnum.STATUS_RECYCLE.getType());
-
-            R<Boolean> booleanR = remoteKxsProductService.updateByMachine(machine, SecurityConstants.FROM_IN);
-            if(!booleanR.getData()){
-                throw new GlobalCustomerException(ErrorTypeEnum.REMOTE_DATA_ERROR.getDescription());
-            }
+//            R<KxsMachine> kxsMachineR = remoteKxsProductService.loadMachineBySn(sn, SecurityConstants.FROM_IN);
+//            KxsMachine machine = RetOps.of(kxsMachineR)
+//                    .getData()
+//                    .orElseThrow(() -> new GlobalCustomerException(StoreErrorTypeEnum.SN_FIND_NULL.getDescription()));
+//            machine.setStatus(MachineTypeEnum.RECYCLE_CANCEL.getType());
+//
+//            R<Boolean> booleanR = remoteKxsProductService.updateByMachine(machine, SecurityConstants.FROM_IN);
+//            if(!booleanR.getData()){
+//                throw new GlobalCustomerException(ErrorTypeEnum.REMOTE_DATA_ERROR.getDescription());
+//            }
 
             //删除主订单
             Long count = kxsMachineRecycleInfoMapper.selectCount(Wrappers.lambdaQuery(KxsMachineRecycleInfo.class)
@@ -330,6 +330,13 @@ public class KxsMachineRecycleServiceImpl extends ServiceImpl<KxsMachineRecycleM
         return R.ok();
     }
 
+    @Override
+    public List<String> recycleSnList() {
+        Long userId = SecurityUtils.getUser().getId();
+
+        return baseMapper.recycleUserSnList(userId);
+    }
+
 
 }
 

+ 16 - 5
kxs-store/kxs-store-biz/src/main/resources/mapper/KxsMachineRecycleMapper.xml

@@ -60,7 +60,8 @@
                 and t.status in (1,2)
             </if>
             <if test="query.keyword != null and query.keyword != ''">
-                and (t.pos_sn like concat('%',#{query.keyword},'%') or a.user_code like concat('%',#{query.keyword},'%'))
+                and (t.pos_sn like concat('%',#{query.keyword},'%') or a.user_code like
+                concat('%',#{query.keyword},'%'))
             </if>
         </where>
     </select>
@@ -103,19 +104,23 @@
     <select id="needConfirmList" resultType="com.kxs.store.api.vo.kxsapp.storeRecycle.NeedConfirmRecycleVO">
         select a.pos_sn, a.recycle_end_time
         from kxs_machine_recycle_info a
-        left join kxs_machine_recycle b on a.order_id = b.id
-        where b.user_id = #{userId} and a.status = 0 and a.brand_id = #{brandId}
+                 left join kxs_machine_recycle b on a.order_id = b.id
+        where b.user_id = #{userId}
+          and a.status = 0
+          and a.brand_id = #{brandId}
     </select>
     <select id="recoverableData" resultType="java.lang.Integer">
         select count(*)
         from kxs_machine_recycle_info a
                  left join kxs_machine_recycle b on a.order_id = b.id
-        where b.user_id = #{userId} and a.status = 0 and a.del_flag = 0
+        where b.user_id = #{userId}
+          and a.status = 0
+          and a.del_flag = 0
     </select>
     <select id="storeRecoverableData" resultType="java.lang.Integer">
         select count(*)
         from kxs_machine_recycle_info a
-                 left join kxs_machine_recycle b on a.order_id = b.id
+        left join kxs_machine_recycle b on a.order_id = b.id
         <where>
             and a.del_flag = 0
             and b.warehouse_user_id = #{warehouseUserId}
@@ -127,5 +132,11 @@
             </if>
         </where>
     </select>
+    <select id="recycleUserSnList" resultType="java.lang.String">
+        select a.pos_sn
+        from kxs_machine_recycle_info a
+                 left join kxs_machine_recycle b on a.order_id = b.id
+        where b.user_id = #{userId}
+    </select>
 
 </mapper>

+ 10 - 10
kxs-transfer/src/main/java/com/kxs/transfer/api/controller/DtsController.java

@@ -195,16 +195,16 @@ public class DtsController {
 //                kxsWarehouseService.changeData(dmlData);
 //            }
 //            //机具表
-//            if ("PosMachinesTwo".equals(dmlData.getTableName())) {
-//                kxsMachineService.changeData(dmlData);
-//            }
-//            //机具回收表
-//            if ("RecycMachineOrder".equals(dmlData.getTableName())) {
-//                kxsMachineRecycleService.changeData(dmlData);
-//            }
-//            if ("RecycMachineOrderPos".equals(dmlData.getTableName())) {
-//                kxsMachineRecycleService.changeInfoData(dmlData);
-//            }
+            if ("PosMachinesTwo".equals(dmlData.getTableName())) {
+                kxsMachineService.changeData(dmlData);
+            }
+            //机具回收表
+            if ("RecycMachineOrder".equals(dmlData.getTableName())) {
+                kxsMachineRecycleService.changeData(dmlData);
+            }
+            if ("RecycMachineOrderPos".equals(dmlData.getTableName())) {
+                kxsMachineRecycleService.changeInfoData(dmlData);
+            }
 
             //存储历史数据
             KxsDtsLog kxsDtsLog = new KxsDtsLog();