TRX 1 жил өмнө
parent
commit
c55d4343c8

+ 30 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/CardInfoBindImportParam.java

@@ -0,0 +1,30 @@
+package com.zhongshu.card.client.model.school;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/7/30
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CardInfoBindImportParam {
+
+    @Excel(name = "卡号")
+    @Schema(description = "卡片号码,唯一标识, 卡号")
+    private String code;
+
+    @Excel(name = "手机号码")
+    @Schema(description = "手机号码")
+    private String phone;
+
+    @Excel(name = "备注")
+    @Schema(description = "备注")
+    private String remark;
+
+}

+ 2 - 4
FullCardClient/src/main/java/com/zhongshu/card/client/service/school/CardInfoService.java

@@ -73,10 +73,8 @@ public interface CardInfoService {
     ResultContent restoreCardCancel(String id);
 
     ResultContent<ImportResultModel> importCard(
-            HttpServletRequest request,
-            HttpServletResponse response,
-            MultipartFile file,
-            OidModel param);
+            HttpServletRequest request, HttpServletResponse response,
+            MultipartFile file, OidModel param);
 
     void exportProjectCard(HttpServletRequest request, HttpServletResponse response,
             CardInfoSearch param);

+ 2 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/school/CardInfoDao.java

@@ -18,6 +18,8 @@ public interface CardInfoDao extends MongoDao<CardInfo>, CardInfoDaoExtend {
 
     CardInfo findByCode(String code);
 
+    CardInfo findTopByProjectOidAndCode(String projectOid, String code);
+
     // 查询用户所有的卡片
     List<CardInfo> findByUserIdAndOid(String userId, String oid);
 

+ 3 - 3
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/school/CardInfoPoolDao.java

@@ -24,9 +24,9 @@ public interface CardInfoPoolDao extends MongoDao<CardInfoPool>, CardInfoPoolDao
 
     CardInfoPool findTopByCodeAndProjectOid(String code, String projectOid);
 
-    List<CardInfoPool> findTop10ByProjectOidAndCodeLikeAndIsUsedAndCardCancelState(
-            String projectOid, String code,
-            Boolean isUsed, CardCancelState cardCancelState);
+    List<CardInfoPool> findTop10ByProjectOidAndCodeLikeAndIsUsedAndCardCancelState(String projectOid, String code, Boolean isUsed, CardCancelState cardCancelState);
+
+    CardInfoPool findTopByProjectOidAndCodeAndIsUsedAndCardCancelState(String projectOid, String code, Boolean isUsed, CardCancelState cardCancelState);
 
     boolean existsByCodeAndProjectOid(String code, String projectOid);
 

+ 1 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/school/impl/CardInfoDaoImpl.java

@@ -100,7 +100,7 @@ public class CardInfoDaoImpl extends BaseImpl implements CardInfoDaoExtend {
                     Criteria.where("phone").regex(pattern)
             );
         }
-        criteria.and("isDelete").is(Boolean.FALSE);
+
         Sort sort = buildSort(param);
         Query query = Query.query(criteria);
         query.with(sort);

+ 10 - 15
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/openAPI/OpenApiRequestService.java

@@ -9,19 +9,15 @@ import com.github.microservice.core.util.net.apache.MethodType;
 import com.github.microservice.core.util.net.apache.ResponseModel;
 import com.github.microservice.http.APIResponseModel;
 import com.github.microservice.models.iot.IotSendParam;
-import com.github.microservice.models.requestModel.SuperResponseModel;
 import com.github.microservice.net.ResultContent;
-import com.zhongshu.card.client.model.payment.RequestInfoSaveParam;
-import com.zhongshu.card.client.type.payment.RequestType;
 import com.zhongshu.card.client.utils.DateUtils;
 import com.zhongshu.card.server.core.dao.org.OrganizationDao;
 import com.zhongshu.card.server.core.dao.projectAbout.ProjectIotInfoDao;
-import com.zhongshu.card.server.core.domain.org.Organization;
 import com.zhongshu.card.server.core.domain.projectAbout.ProjectIotInfo;
 import com.zhongshu.card.server.core.service.base.SuperService;
 import com.zhongshu.card.server.core.service.payment.RequestInfoService;
-import com.zhongshu.card.server.core.util.AesUtils;
 import com.zhongshu.card.server.core.util.CommonUtil;
+import com.zhongshu.opengateway.client.util.SignUtil;
 import com.zhongshu.payment.client.payModel.unionFrictionlessPay.model.ApiConfParam;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
@@ -30,12 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StopWatch;
 
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.net.URLConnection;
+import java.util.HashMap;
 
 /**
  * openAPI 的请求调用
@@ -72,7 +63,7 @@ public class OpenApiRequestService extends SuperService {
         }
         ProjectIotInfo projectIotInfo = projectIotInfoDao.findTopByProjectOid(projectOid);
         if (ObjectUtils.isEmpty(projectIotInfo)) {
-            return ResultContent.buildFail(String.format("", projectOid));
+            return ResultContent.buildFail(String.format("项目未配置物联网AK/SK信息", projectOid));
         }
 
         return ResultContent.buildSuccess();
@@ -183,16 +174,20 @@ public class OpenApiRequestService extends SuperService {
 //    }
 
 
-    public APIResponseModel requestAPI(String url, Object data) {
+    public APIResponseModel requestAPI(String url, String ak, String sk, Object data) {
         APIResponseModel responseModel = new APIResponseModel();
         try {
+            String authorization = SignUtil.sign(JSONUtil.toJsonStr(data), ak, sk);
+            HashMap<String, Object> headers = new HashMap<>();
+            headers.put("Authorization", authorization);
             ApiConfParam apiConfParam = new ApiConfParam();
             apiConfParam.setApiName(url);
-
             StopWatch stopWatch = new StopWatch();
             stopWatch.start();
             ResponseModel request = HttpClientUtil.request(HttpModel.builder()
-                    .url(url).method(MethodType.Json).charset("utf-8").body(data).build());
+                    .url(url).method(MethodType.Json)
+                    .header(headers)
+                    .charset("utf-8").body(data).build());
             int code = request.getCode();
             if (code == 200) {
                 responseModel = BeanUtil.copyProperties(request.getBody(), APIResponseModel.class);

+ 4 - 5
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/OrganizationUserServiceImpl.java

@@ -161,15 +161,13 @@ public class OrganizationUserServiceImpl extends SuperService {
         orgBindUserAllParam.setId(param.getId());
         orgBindUserAllParam.setUserId(userId);
         orgBindUserAllParam.setOrgOid(organization.getOid());
-        if (temp != null && temp.getOrganization() != null) {
-            orgBindUserAllParam.setOrgOid(temp.getOrganization().getOid());
-        }
         orgBindUserAllParam.setCode(param.getCode());
         orgBindUserAllParam.setPositionId(param.getPositionId());
         orgBindUserAllParam.setDepartmentId(param.getDepartmentId());
         orgBindUserAllParam.setRoleIds(param.getRoleIds());
         orgBindUserAllParam.setState(param.getState());
         orgBindUserAllParam.setIsAdmin(param.getIsAdmin());
+        orgBindUserAllParam.setRemark(param.getRemark());
 
         // 绑定用户到机构
         ResultContent<OrganizationUser> bindUserContent = orgBindUser(orgBindUserAllParam);
@@ -501,7 +499,7 @@ public class OrganizationUserServiceImpl extends SuperService {
 
         ImportResultModel model = new ImportResultModel();
         try {
-            int startRow = 3;
+            int startRow = 2;
             ImportParams params = new ImportParams();
             params.setHeadRows(1);
             params.setTitleRows(1);
@@ -517,6 +515,8 @@ public class OrganizationUserServiceImpl extends SuperService {
 
             if (ObjectUtils.isNotEmpty(list)) {
                 for (ExcelUserParam excelUserParam : list) {
+                    startRow++;
+
                     // 验证数据合法性
                     boolean b = true;
                     if (StringUtils.isEmpty(excelUserParam.getName())) {
@@ -616,7 +616,6 @@ public class OrganizationUserServiceImpl extends SuperService {
                         addParam.setPassWord(passWord);
                         userList.add(addParam);
                     }
-                    startRow++;
                 }
 
                 // 添加到对应的机构中

+ 8 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/projectAbout/CardInfoPoolService.java

@@ -341,7 +341,14 @@ public class CardInfoPoolService extends SuperService {
         ExcelUtils.commonExecuteExcel(request, response, execlParam);
     }
 
-
+    public CardInfoPool getProjectCard(String projectOid, String code) {
+        CardInfoPool cardInfoPool = null;
+        if (StringUtils.isNotEmpty(projectOid) && StringUtils.isNotEmpty(code)) {
+            cardInfoPool = cardInfoPoolDao.findTopByProjectOidAndCodeAndIsUsedAndCardCancelState(
+                    projectOid, code, Boolean.FALSE, CardCancelState.Common);
+        }
+        return cardInfoPool;
+    }
 
     /**
      * 搜索卡片

+ 69 - 49
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/projectAbout/CardInfoServiceImpl.java

@@ -6,21 +6,20 @@ import com.github.microservice.auth.client.content.ResultState;
 import com.github.microservice.auth.client.service.UserService;
 import com.github.microservice.components.data.base.util.PageEntityUtil;
 import com.github.microservice.core.util.bean.BeanUtil;
+import com.github.microservice.net.ResultContent;
+import com.github.microservice.net.ResultMessage;
 import com.zhongshu.card.client.model.base.OidModel;
 import com.zhongshu.card.client.model.org.OidAboutInfo;
 import com.zhongshu.card.client.model.org.OrganizationUserModel;
 import com.zhongshu.card.client.model.school.*;
-import com.github.microservice.net.ResultContent;
-import com.github.microservice.net.ResultMessage;
 import com.zhongshu.card.client.service.school.CardInfoService;
 import com.zhongshu.card.client.type.CardCancelState;
 import com.zhongshu.card.client.type.CardOperationType;
 import com.zhongshu.card.client.type.school.CardState;
-import com.zhongshu.card.client.type.school.CardType;
-import com.zhongshu.card.server.core.dao.org.OrganizationUserDao;
-import com.zhongshu.card.server.core.dao.school.CardInfoDao;
 import com.zhongshu.card.server.core.dao.org.OrganizationDao;
+import com.zhongshu.card.server.core.dao.org.OrganizationUserDao;
 import com.zhongshu.card.server.core.dao.org.UserCountDao;
+import com.zhongshu.card.server.core.dao.school.CardInfoDao;
 import com.zhongshu.card.server.core.dao.school.CardInfoPoolDao;
 import com.zhongshu.card.server.core.dao.user.CardInfoLossRecordDao;
 import com.zhongshu.card.server.core.domain.org.Organization;
@@ -35,7 +34,6 @@ import com.zhongshu.card.server.core.service.org.OrganizationUserServiceImpl;
 import com.zhongshu.card.server.core.service.orgManager.OrganizationManagerServiceImpl;
 import com.zhongshu.card.server.core.service.user.UserAccountServiceImpl;
 import com.zhongshu.card.server.core.util.BeanUtils;
-import com.zhongshu.card.server.core.util.CommonUtil;
 import com.zhongshu.card.server.core.util.ExcelUtils;
 import com.zhongshu.card.server.core.util.excel.CommonExeclParam;
 import com.zhongshu.card.server.core.util.excel.CommonExeclTd;
@@ -54,6 +52,7 @@ import org.springframework.util.Assert;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -101,6 +100,9 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
     @Autowired
     private OrganizationUserServiceImpl organizationUserService;
 
+    @Autowired
+    CardInfoPoolService cardInfoPoolService;
+
     /**
      * 添加或修改卡片信息
      *
@@ -183,6 +185,11 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
         return bindCardFromPoolByOrgId(poolId, list.get(0).getId());
     }
 
+    /**
+     * @param poolId 卡池数据的id
+     * @param id     OrganizationUser id
+     * @return
+     */
     @Transactional
     @Override
     public ResultContent bindCardFromPoolByOrgId(String poolId, String id) {
@@ -685,72 +692,85 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
     public ResultContent<ImportResultModel> importCard(HttpServletRequest request, HttpServletResponse response, MultipartFile file, OidModel param) {
         String oid = param.getOid();
         Assert.hasText(oid, "oid不能为空");
-
         OidAboutInfo oidAboutInfo = organizationManagerService.getOidAboutInfo(oid);
         String projectOid = oidAboutInfo.getProjectOid();
 
         ImportResultModel model = new ImportResultModel();
         try {
-            int startRow = 3;
+            int startRow = 2;
             ImportParams params = new ImportParams();
             params.setHeadRows(1);
             params.setTitleRows(1);
-            List<CardInfoPoolImportParam> list = ExcelImportUtil.importExcel(file.getInputStream(), CardInfoPoolImportParam.class, params);
+            List<CardInfoBindImportParam> list = ExcelImportUtil.importExcel(file.getInputStream(), CardInfoPoolImportParam.class, params);
             model.setTotal(list.size());
 
+            HashMap<String, String> codeMap = new HashMap<>();
+            HashMap<String, OrganizationUser> phone2OrgId = new HashMap<>();
+
             List<String> failDetails = new ArrayList<>();
-            List<CardInfoPool> cardInfoPools = new ArrayList<>();
+            List<CardInfoPoolBind2OrgUserParam> cardInfoPools = new ArrayList<>();
             if (ObjectUtils.isNotEmpty(list)) {
-                for (CardInfoPoolImportParam param1 : list) {
+                for (CardInfoBindImportParam bindImportParam : list) {
+                    startRow++;
+                    CardInfoPoolBind2OrgUserParam bind2OrgUserParam = new CardInfoPoolBind2OrgUserParam();
                     // 验证数据合法性
-                    boolean b = true;
-                    if (b && StringUtils.isEmpty(param1.getCode())) {
-                        b = false;
+                    String code = bindImportParam.getCode();
+                    if (StringUtils.isEmpty(code)) {
                         failDetails.add(String.format("第%d行卡号不能为空", startRow));
+                        continue;
                     }
-                    if (b && StringUtils.isEmpty(param1.getCardType())) {
-                        b = false;
-                        failDetails.add(String.format("第%d行卡片类型不能为空", startRow));
+                    String phone = bindImportParam.getPhone();
+                    if (StringUtils.isEmpty(phone)) {
+                        failDetails.add(String.format("第%d行手机号码不能为空", startRow));
+                        continue;
+                    }
+                    if (codeMap.containsKey(code)) {
+                        failDetails.add(String.format("第%d行卡号已存在", startRow));
+                        continue;
+                    }
+                    CardInfo cardInfo = cardInfoDao.findTopByProjectOidAndCode(projectOid, code);
+                    if (ObjectUtils.isNotEmpty(cardInfo)) {
+                        failDetails.add(String.format("第%d行卡号%s已绑定", startRow, code));
+                        continue;
                     }
 
-                    if (b && StringUtils.isNotEmpty(param1.getCardType())) {
-                        CardType cardType = CommonUtil.getCardTypeByStr(param1.getCardType());
-                        if (cardType == null) {
-                            b = false;
-                            failDetails.add(String.format("第%d行卡片类型不正确", startRow));
-                        }
+                    CardInfoPool cardInfoPool = cardInfoPoolService.getProjectCard(projectOid, code);
+                    if (ObjectUtils.isEmpty(cardInfoPool)) {
+                        failDetails.add(String.format("第%d行卡号 %s不存在或已使用", startRow, code));
+                        continue;
                     }
+                    bind2OrgUserParam.setPoolId(cardInfoPool.getId());
 
-                    if (b) {
-                        // 检查是否已存在 code
-                        boolean exit = cardInfoPoolDao.existsByCode(param1.getCode());
-                        if (exit) {
-                            b = false;
+
+                    // 查询用户
+                    UserAccount userAccount = userCountDao.findTopByLoginName(phone);
+                    if (ObjectUtils.isEmpty(userAccount)) {
+                        failDetails.add(String.format("第%d行用户%s不存在", startRow, phone));
+                        continue;
+                    }
+                    OrganizationUser organizationUser = null;
+                    if (phone2OrgId.containsKey(phone)) {
+                        organizationUser = phone2OrgId.get(phone);
+                    } else {
+                        List<OrganizationUser> organizationUsers = organizationUserService.getUserOrgList(userAccount.getUserId(), projectOid);
+                        if (ObjectUtils.isNotEmpty(organizationUsers)) {
+                            organizationUser = organizationUsers.get(0);
+                        }
+                        if (ObjectUtils.isEmpty(organizationUser)) {
+                            failDetails.add(String.format("第%d行用户%s未加入当前项目", startRow, phone));
+                            continue;
                         }
+                        phone2OrgId.put(phone, organizationUser);
                     }
-
-                    if (b) {
-                        // 验证通过
-                        CardInfoPool pool = new CardInfoPool();
-                        initEntity(pool);
-                        param1.setCode(param1.getCode().trim());
-                        BeanUtils.copyProperties(param1, pool, "cardType");
-                        pool.setSchoolOid("");
-                        pool.setProjectOid(projectOid);
-                        pool.setOid(oid);
-                        pool.setAboutOid(oidAboutInfo.getOid());
-                        pool.setAboutAuthType(oidAboutInfo.getAuthType());
-
-                        // 初始状态为  未使用
-                        pool.setIsUsed(Boolean.FALSE);
-                        // 对比出卡片类型
-                        CardType cardType = CommonUtil.getCardTypeByStr(param1.getCardType());
-                        pool.setCardType(cardType);
-                        cardInfoPools.add(pool);
+                    codeMap.put(code, phone);
+                    bind2OrgUserParam.setId(organizationUser.getId());
+                    cardInfoPools.add(bind2OrgUserParam);
+                }
+                if (ObjectUtils.isNotEmpty(cardInfoPools)) {
+                    for (CardInfoPoolBind2OrgUserParam bind2OrgUserParam : cardInfoPools) {
+                        bindCardFromPoolByOrgId(bind2OrgUserParam.getPoolId(), bind2OrgUserParam.getId());
                     }
-                    startRow++;
                 }
-                cardInfoPoolDao.saveAll(cardInfoPools);
                 model.setSuccess(cardInfoPools.size());
                 model.setFailDetails(failDetails);
             }