瀏覽代碼

Merge remote-tracking branch 'origin/master'

wujiefeng 1 年之前
父節點
當前提交
c9ea21167d
共有 24 個文件被更改,包括 588 次插入156 次删除
  1. 113 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/devices/DeviceInfoStoreModel.java
  2. 43 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/login/LoginBusModel.java
  3. 3 3
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/UserCountSimpleModel.java
  4. 37 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/UserJoinBusOrgModel.java
  5. 56 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/school/CardInfoStoreModel.java
  6. 6 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/ProjectOpenAPIController.java
  7. 24 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/org/TestController.java
  8. 10 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/user/IndexController.java
  9. 4 9
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/devices/DeviceUseRecordDao.java
  10. 3 6
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/devices/extend/DeviceUseRecordDaoExtend.java
  11. 6 12
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/devices/impl/DeviceUseRecordDaoImpl.java
  12. 2 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/org/OrganizationUserDao.java
  13. 1 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/school/CardInfoDao.java
  14. 15 15
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/devices/DeviceUseRecords.java
  15. 20 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/DeviceInfoServiceImpl.java
  16. 0 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/DeviceSyncFromIotService.java
  17. 96 85
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/DeviceUseRecordService.java
  18. 48 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/IndexService.java
  19. 30 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/OrganizationServiceImpl.java
  20. 7 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/orgManager/OrganizationManagerServiceImpl.java
  21. 11 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/orgManager/ProjectBindOrgServiceImpl.java
  22. 32 16
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/ExpenseFlowServiceImpl.java
  23. 11 7
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/projectAbout/CardInfoPoolService.java
  24. 10 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/projectAbout/CardInfoServiceImpl.java

+ 113 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/devices/DeviceInfoStoreModel.java

@@ -0,0 +1,113 @@
+package com.zhongshu.card.client.model.devices;
+
+import com.github.microservice.models.type.DeviceType;
+import com.zhongshu.card.client.model.base.SuperModel;
+import com.zhongshu.card.client.model.org.OrganizationMiniModel;
+import com.zhongshu.card.client.model.org.OrganizationSimpleModel;
+import com.zhongshu.card.client.model.school.AreaSimpleModel;
+import com.zhongshu.card.client.type.DataState;
+import com.zhongshu.card.client.type.OnLineState;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.apache.commons.lang3.ObjectUtils;
+
+/**
+ * @author TRX
+ * @date 2024/6/14
+ */
+@Data
+public class DeviceInfoStoreModel extends SuperModel {
+
+    @Schema(description = "设备ID、设备编号")
+    private String deviceId;
+
+    @Schema(description = "设备名称")
+    private String deviceName;
+
+    @Schema(description = "设备类型,如 消费机 门禁机")
+    private DeviceType deviceType;
+
+    private String deviceTypeStr;
+
+    public String getDeviceTypeStr() {
+        if (deviceType != null) {
+            return deviceType.getRemark();
+        }
+        return "";
+    }
+
+    @Schema(description = "网关号")
+    private String gateWayId;
+
+    @Schema(description = "设备名称")
+    private String gateWayName;
+
+    @Schema(description = "关联的项目code")
+    private String projectInfoCode;
+
+    @Schema(description = "关联的项目Name")
+    private String projectInfoName;
+
+    @Schema(description = "所属机构信息")
+    private String beLongOid;
+
+    @Schema(description = "所属机构信息")
+    private String beLongName;
+
+    @Schema(description = "是否在线")
+    private OnLineState onLineState = OnLineState.OnLine;
+
+    private String onLineStateStr;
+
+    public String getOnLineStateStr() {
+        if (onLineState != null) {
+            return onLineState.getRemark();
+        }
+        return "";
+    }
+
+    @Schema(description = "最上线时间")
+    private Long lastOnlineTime;
+
+    @Schema(description = "设备IP地址")
+    private String ip;
+
+    @Schema(description = "数据状态")
+    private DataState state;
+
+    private String stateStr;
+
+    public String getStateStr() {
+        if (state != null) {
+            return state.getRemark();
+        }
+        return "";
+    }
+
+    @Schema(description = "区域信息")
+    private AreaSimpleModel area;
+
+    @Schema(description = "")
+    private String areaId;
+
+    public String getAreaId() {
+        if (ObjectUtils.isNotEmpty(area)) {
+            return area.getId();
+        }
+        return "";
+    }
+
+    private String areaName = "";
+
+    public String getAreaName() {
+        if (ObjectUtils.isNotEmpty(area)) {
+            return area.getName();
+        }
+        return "";
+    }
+
+    private String areaAllName = "";
+
+    @Schema(description = "是否开放使用")
+    private Boolean isOpenUse = Boolean.FALSE;
+}

+ 43 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/login/LoginBusModel.java

@@ -0,0 +1,43 @@
+package com.zhongshu.card.client.model.login;
+
+import com.zhongshu.card.client.model.org.OrganizationSimpleModel;
+import com.zhongshu.card.client.model.org.UserCountModel;
+import com.zhongshu.card.client.model.org.UserJoinBusOrgModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 通用登录返回的数据模型
+ *
+ * @author TRX
+ * @date 2024/9/24
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class LoginBusModel {
+
+    @Schema(description = "token")
+    private String access_token;
+
+    private String token_type;
+
+    @Schema(description = "刷新token的token")
+    private String refresh_token;
+
+    private Integer expires_in;
+
+    private String scope;
+
+    @Schema(description = "用户基本信息")
+    private UserCountModel userInfo;
+
+    @Schema(description = "加入的商户列表")
+    private List<UserJoinBusOrgModel> busList = new ArrayList<>();
+}

+ 3 - 3
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/UserCountSimpleModel.java

@@ -1,9 +1,6 @@
 package com.zhongshu.card.client.model.org;
 
-import com.zhongshu.card.client.model.base.SuperModel;
-import com.zhongshu.card.client.type.CertificateType;
 import com.zhongshu.card.client.type.Sex;
-import com.zhongshu.card.client.type.UserLoginType;
 import com.zhongshu.card.client.type.UserState;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
@@ -59,4 +56,7 @@ public class UserCountSimpleModel {
         }
         return "";
     }
+
+    @Schema(description = "用户状态")
+    private UserState state = UserState.Normal;
 }

+ 37 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/UserJoinBusOrgModel.java

@@ -0,0 +1,37 @@
+package com.zhongshu.card.client.model.org;
+
+import com.github.microservice.auth.security.type.AuthType;
+import com.zhongshu.card.client.model.base.SuperModel;
+import com.zhongshu.card.client.type.OrganizationState;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 用户加入的商户列表
+ *
+ * @author TRX
+ * @date 2024/5/31
+ */
+@Data
+public class UserJoinBusOrgModel {
+
+    @Schema(description = "商户oid")
+    private String busOid;
+
+    @Schema(description = "商户名称")
+    private String busName;
+
+    @Schema(description = "商户编码")
+    private String busCode;
+
+    @Schema(description = "商户logo")
+    private String busLogo;
+
+    @Schema(description = "项目Oid")
+    private String projectOid;
+
+    @Schema(description = "项目名称")
+    private String projectName;
+}

+ 56 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/CardInfoStoreModel.java

@@ -0,0 +1,56 @@
+package com.zhongshu.card.client.model.school;
+
+import com.zhongshu.card.client.type.school.CardState;
+import com.zhongshu.card.client.type.school.CardType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author TRX
+ * @date 2024/6/13
+ */
+@Data
+public class CardInfoStoreModel {
+
+    @Schema(description = "数据ID")
+    private String id;
+
+    @Schema(description = "所属项目oid")
+    private String projectOid;
+
+    @Schema(description = "卡片名称")
+    private String name;
+
+    @Schema(description = "卡片类型")
+    private CardType cardType;
+
+    @Schema(description = "卡片号码")
+    private String code;
+
+    @Schema(description = "卡片状态")
+    private CardState cardState;
+
+    private String cardStateStr;
+
+    public String getCardStateStr() {
+        if (cardState != null) {
+            return cardState.getRemark();
+        }
+        return "";
+    }
+
+    @Schema(description = "所属用户UserId")
+    private String userId;
+
+    @Schema(description = "学校oid")
+    private String schoolOid;
+
+    @Schema(description = "是否作废")
+    private Boolean isCanceled = Boolean.FALSE;
+
+    @Schema(description = "作废时间")
+    private Long cancelTime;
+
+    @Schema(description = "作废用户userId")
+    private String cancelUserId;
+}

+ 6 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/ProjectOpenAPIController.java

@@ -59,4 +59,10 @@ public class ProjectOpenAPIController {
         return this.deviceUseRecordService.saveDeviceLogs(param);
     }
 
+    @Operation(summary = "门闸 认证识别人员信息上传", description = "认证识别人员信息上传")
+    @RequestMapping(value = "recPush", method = {RequestMethod.POST})
+    public ResultContent recPush(@RequestBody GateDoorUseParam param) {
+        return this.deviceUseRecordService.saveDeviceLogs(param);
+    }
+
 }

+ 24 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/org/TestController.java

@@ -1,5 +1,6 @@
 package com.zhongshu.card.server.core.controller.org;
 
+import com.github.microservice.core.util.bytes.BytesUtil;
 import com.github.microservice.net.ResultContent;
 import com.zhongshu.card.server.core.service.TestService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -10,6 +11,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
+import java.util.Collections;
+
 @Slf4j
 @RestController
 @RequestMapping("test")
@@ -25,8 +29,28 @@ public class TestController {
 
 //        openAPIRegisterService.initRegisterPAIS();
 
+        try{
+            byte[] bins = BytesUtil.longToBin(Long.parseLong("2152525002"), 4);
+//            var ret = reverse(bins);
+            String str = BytesUtil.binToHex(bins);
+            log.info("str; {}", str.toUpperCase());
+        }catch (Exception e){
+            e.printStackTrace();
+        }
         return this.testService.text();
     }
 
+    public static byte[] reverse(byte[] bin) {
+        var items = new ArrayList<Byte>();
+        for (var b : bin) {
+            items.add(b);
+        }
+        Collections.reverse(items);
+        byte[] ret = new byte[items.size()];
+        for (int i = 0; i < items.size(); i++) {
+            ret[i] = items.get(i);
+        }
+        return ret;
+    }
 
 }

+ 10 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/user/IndexController.java

@@ -60,6 +60,16 @@ public class IndexController {
         return result;
     }
 
+    @Operation(summary = "商户小程序登录", description = "商户小程序登录")
+    @RequestMapping(value = "busLogin", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
+    public ResultContent busLogin(@RequestBody LoginParam param, HttpServletRequest request, HttpServletResponse response) {
+        param.setLoginFromType(LoginFromType.Shop);
+        ResultContent result = indexService.busLogin(param);
+        if (result.isSuccess()) {
+        }
+        return result;
+    }
+
     @Operation(summary = "web通用登录", description = "web通用登录")
     @RequestMapping(value = "commonLogin", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
     public ResultContent commonLogin(@RequestBody LoginParam param, HttpServletRequest request, HttpServletResponse response) {

+ 4 - 9
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/devices/DeviceUseRecordDao.java

@@ -1,13 +1,8 @@
 package com.zhongshu.card.server.core.dao.devices;
 
 import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
-import com.zhongshu.card.server.core.dao.devices.extend.DeviceInfoDaoExtend;
 import com.zhongshu.card.server.core.dao.devices.extend.DeviceUseRecordDaoExtend;
-import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
-import com.zhongshu.card.server.core.domain.devices.DeviceUseRecord;
-import com.zhongshu.card.server.core.domain.payment.ExpenseFlow;
-
-import java.util.List;
+import com.zhongshu.card.server.core.domain.devices.DeviceUseRecords;
 
 /**
  * 设备使用记录Dao
@@ -15,10 +10,10 @@ import java.util.List;
  * @author TRX
  * @date 2024/3/21
  */
-public interface DeviceUseRecordDao extends MongoDao<DeviceUseRecord>, DeviceUseRecordDaoExtend {
+public interface DeviceUseRecordDao extends MongoDao<DeviceUseRecords>, DeviceUseRecordDaoExtend {
 
-    DeviceUseRecord findTopById(String id);
+    DeviceUseRecords findTopById(String id);
 
-    DeviceUseRecord findTopByMqttDataId(String mqttDataId);
+    DeviceUseRecords findTopByMqttDataId(String mqttDataId);
 
 }

+ 3 - 6
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/devices/extend/DeviceUseRecordDaoExtend.java

@@ -1,10 +1,7 @@
 package com.zhongshu.card.server.core.dao.devices.extend;
 
-import com.zhongshu.card.client.model.devices.DeviceInfoSearch;
 import com.zhongshu.card.client.model.devices.DeviceUseRecordSearch;
-import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
-import com.zhongshu.card.server.core.domain.devices.DeviceUseRecord;
-import com.zhongshu.card.server.core.domain.payment.ExpenseFlow;
+import com.zhongshu.card.server.core.domain.devices.DeviceUseRecords;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
@@ -17,8 +14,8 @@ import org.springframework.data.domain.Pageable;
  */
 public interface DeviceUseRecordDaoExtend {
 
-    Page<DeviceUseRecord> page(Pageable pageable, DeviceUseRecordSearch param);
+    Page<DeviceUseRecords> page(Pageable pageable, DeviceUseRecordSearch param);
 
-    DeviceUseRecord init(String mqttDataId, String token);
+    DeviceUseRecords init(String mqttDataId, String token);
 
 }

+ 6 - 12
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/devices/impl/DeviceUseRecordDaoImpl.java

@@ -1,16 +1,10 @@
 package com.zhongshu.card.server.core.dao.devices.impl;
 
 import com.github.microservice.components.data.mongo.mongo.helper.DBHelper;
-import com.zhongshu.card.client.model.devices.DeviceInfoSearch;
 import com.zhongshu.card.client.model.devices.DeviceUseRecordSearch;
 import com.zhongshu.card.server.core.dao.BaseImpl;
-import com.zhongshu.card.server.core.dao.devices.extend.DeviceInfoDaoExtend;
 import com.zhongshu.card.server.core.dao.devices.extend.DeviceUseRecordDaoExtend;
-import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
-import com.zhongshu.card.server.core.domain.devices.DeviceUseRecord;
-import com.zhongshu.card.server.core.domain.payment.ExpenseFlow;
-import com.zhongshu.card.server.core.domain.school.Area;
-import com.zhongshu.card.server.core.util.CommonUtil;
+import com.zhongshu.card.server.core.domain.devices.DeviceUseRecords;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -43,7 +37,7 @@ public class DeviceUseRecordDaoImpl extends BaseImpl implements DeviceUseRecordD
     private DBHelper dbHelper;
 
     @Override
-    public Page<DeviceUseRecord> page(Pageable pageable, DeviceUseRecordSearch param) {
+    public Page<DeviceUseRecords> page(Pageable pageable, DeviceUseRecordSearch param) {
         Criteria criteria = buildCriteriaNotOid(param);
 
         // 所属项目
@@ -68,11 +62,11 @@ public class DeviceUseRecordDaoImpl extends BaseImpl implements DeviceUseRecordD
         Sort sort = buildSort(param);
         Query query = Query.query(criteria);
         query.with(sort);
-        return dbHelper.pages(query, pageable, DeviceUseRecord.class);
+        return dbHelper.pages(query, pageable, DeviceUseRecords.class);
     }
 
-    public DeviceUseRecord init(String mqttDataId, String token) {
-        DeviceUseRecord doc = null;
+    public DeviceUseRecords init(String mqttDataId, String token) {
+        DeviceUseRecords doc = null;
         try {
             Query query = Query.query(Criteria.where("mqttDataId").is(mqttDataId).and("token").isNull());
             Update update = new Update()
@@ -81,7 +75,7 @@ public class DeviceUseRecordDaoImpl extends BaseImpl implements DeviceUseRecordD
             FindAndModifyOptions options = new FindAndModifyOptions().upsert(true)
                     .returnNew(true);
             doc = mongoTemplate.findAndModify(query, update, options,
-                    DeviceUseRecord.class);
+                    DeviceUseRecords.class);
         } catch (Exception e) {
             log.error("init {}", e.getMessage());
         }

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

@@ -39,6 +39,8 @@ public interface OrganizationUserDao extends MongoDao<OrganizationUser>, Organiz
 
     long countByUserAndStateAndAuthType(UserAccount user, UserState state, AuthType authType);
 
+    long countByOrganization(Organization organization);
+
     void deleteByOrganization(Organization organization);
 
     // 查询用户所在机构

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

@@ -28,7 +28,7 @@ public interface CardInfoDao extends MongoDao<CardInfo>, CardInfoDaoExtend {
 
     List<CardInfo> findByUserIdAndProjectOid(String userId, String projectOid);
 
-    List<CardInfo> findByProjectOidAndUserIdInAndCardState(String projectOid, List<String> userIds, CardState state);
+    List<CardInfo> findByProjectOidAndUserIdInAndCardStateOrderByUpdateTimeDesc(String projectOid, List<String> userIds, CardState state);
 
     void deleteByUserIdAndOid(String userId, String oid);
 }

+ 15 - 15
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/devices/DeviceUseRecord.java → FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/devices/DeviceUseRecords.java

@@ -1,18 +1,16 @@
 package com.zhongshu.card.server.core.domain.devices;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
-import com.github.microservice.components.data.mongo.mongo.domain.SuperEntity;
 import com.github.microservice.models.type.DeviceType;
+import com.zhongshu.card.client.model.devices.DeviceInfoStoreModel;
+import com.zhongshu.card.client.model.org.UserCountSimpleModel;
+import com.zhongshu.card.client.model.school.CardInfoStoreModel;
 import com.zhongshu.card.server.core.domain.base.SuperMain;
-import com.zhongshu.card.server.core.domain.org.Organization;
-import com.zhongshu.card.server.core.domain.org.UserAccount;
-import com.zhongshu.card.server.core.domain.school.CardInfo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.springframework.data.mongodb.core.index.Indexed;
-import org.springframework.data.mongodb.core.mapping.DBRef;
 import org.springframework.data.mongodb.core.mapping.Document;
 
 import java.util.Date;
@@ -27,12 +25,15 @@ import java.util.Date;
 @Document
 @NoArgsConstructor
 @AllArgsConstructor
-public class DeviceUseRecord extends SuperMain {
+public class DeviceUseRecords extends SuperMain {
 
     @Indexed(unique = true, sparse = true)
     @Schema(description = "mqtt推送生成的业务数据ID")
     private String mqttDataId;
 
+    @Schema(description = "token")
+    private String token;
+
     //----------------------------设备信息start ---------------------
     @Schema(description = "设备ID")
     private String deviceId;
@@ -41,19 +42,15 @@ public class DeviceUseRecord extends SuperMain {
     private DeviceType deviceType;
 
     @Schema(description = "设备信息")
-    private DeviceInfo deviceInfo;
+    private DeviceInfoStoreModel deviceInfo;
 
     @Schema(description = "网关ID")
     private String gateWayId;
 
-    @Schema(description = "设备所属机构")
-    @DBRef(lazy = true)
-    private Organization beLongOrganization;
-
-    @Schema(description = "所属机构oid")
+    @Schema(description = "设备所属机构oid")
     private String beLongOid;
 
-    @Schema(description = "所属机构name")
+    @Schema(description = "设备所属机构name")
     private String beLongName;
 
     //----------------------卡片信息 start-------------------
@@ -62,14 +59,14 @@ public class DeviceUseRecord extends SuperMain {
     private String cardNo;
 
     @Schema(description = "卡片信息")
-    private CardInfo cardInfo;
+    private CardInfoStoreModel cardInfo;
 
     //------------------用户信息 start-------------------
     @Schema(description = "用户userId")
     private String userId;
 
     @Schema(description = "用户信息")
-    public UserAccount userAccount;
+    public UserCountSimpleModel userAccount;
 
     @Schema(description = "使用模式(0:刷卡 1:人脸认证 2:指纹 3:密码)")
     private Integer mode;
@@ -80,6 +77,9 @@ public class DeviceUseRecord extends SuperMain {
     @Schema(description = "时间")
     private Long timestamp;
 
+    @Schema(description = "人脸内容")
+    private String pic;
+
     //-----------------------验证是否通过
 
     @Schema(description = "创建时间,可阅读的")

+ 20 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/DeviceInfoServiceImpl.java

@@ -317,4 +317,24 @@ public class DeviceInfoServiceImpl extends SuperService implements DeviceInfoSer
         return model;
     }
 
+    public DeviceInfoStoreModel toStoreModel(DeviceInfo entity) {
+        DeviceInfoStoreModel model = null;
+        if (ObjectUtils.isNotEmpty(entity)) {
+            model = new DeviceInfoStoreModel();
+            BeanUtils.copyProperties(entity, model);
+
+            model.setProjectInfoName(organizationServiceImpl.getOrgNameByCode(entity.getProjectInfoCode()));
+
+            // 所属区域信息
+            List<AreaSimpleModel> areaModels = areaService.getParents(entity.getArea());
+            if (ObjectUtils.isNotEmpty(areaModels)) {
+                model.setArea(areaModels.get(0));
+                Collections.reverse(areaModels);
+                List<String> areaNames = areaModels.stream().map(it -> it.getName()).collect(Collectors.toList());
+                model.setAreaAllName(String.join("/", areaNames));
+            }
+        }
+        return model;
+    }
+
 }

+ 0 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/DeviceSyncFromIotService.java

@@ -90,7 +90,6 @@ public class DeviceSyncFromIotService {
         HashMap<String, Object> map = new HashMap<>();
         map.put("lastOnlineTime", param.getLastOnlineTime());
         map.put("onLineState", CommonUtil.getEnumByName(OnLineState.class, param.getOnLineState()));
-        log.info("-------------------------== {}", param.getState());
         DataState state = CommonUtil.getEnumByName(DataState.class, param.getState());
         if (state == null) {
             DeviceInfo deviceInfo = deviceInfoDao.findTopByDeviceId(param.getDeviceId());

+ 96 - 85
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/DeviceUseRecordService.java

@@ -5,9 +5,6 @@ import com.github.microservice.models.gateDoor.use.GateDoorUseParam;
 import com.github.microservice.models.gateDoor.use.GateDoorUseResult;
 import com.github.microservice.net.ResultContent;
 import com.zhongshu.card.client.model.devices.DeviceUseRecordModel;
-import com.zhongshu.card.client.type.DataState;
-import com.zhongshu.card.client.type.UserState;
-import com.zhongshu.card.client.type.school.CardState;
 import com.zhongshu.card.client.utils.DateUtils;
 import com.zhongshu.card.server.core.dao.devices.DeviceInfoDao;
 import com.zhongshu.card.server.core.dao.devices.DevicePermissDao;
@@ -15,11 +12,12 @@ import com.zhongshu.card.server.core.dao.devices.DeviceUseRecordDao;
 import com.zhongshu.card.server.core.dao.org.UserCountDao;
 import com.zhongshu.card.server.core.dao.school.CardInfoDao;
 import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
-import com.zhongshu.card.server.core.domain.devices.DevicePermiss;
-import com.zhongshu.card.server.core.domain.devices.DeviceUseRecord;
+import com.zhongshu.card.server.core.domain.devices.DeviceUseRecords;
 import com.zhongshu.card.server.core.domain.org.UserAccount;
 import com.zhongshu.card.server.core.domain.school.CardInfo;
 import com.zhongshu.card.server.core.service.base.SuperService;
+import com.zhongshu.card.server.core.service.projectAbout.CardInfoServiceImpl;
+import com.zhongshu.card.server.core.service.user.UserAccountServiceImpl;
 import com.zhongshu.card.server.core.util.BeanUtils;
 import com.zhongshu.card.server.core.util.TokenUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -51,6 +49,15 @@ public class DeviceUseRecordService extends SuperService {
     @Autowired
     private UserCountDao userCountDao;
 
+    @Autowired
+    private UserAccountServiceImpl userAccountService;
+
+    @Autowired
+    private CardInfoServiceImpl cardInfoService;
+
+    @Autowired
+    private DeviceInfoServiceImpl deviceInfoService;
+
     /**
      * 设备使用日志 (物联网来的数据)
      *
@@ -61,13 +68,15 @@ public class DeviceUseRecordService extends SuperService {
         // 返回数据
         GateDoorUseResult result = new GateDoorUseResult();
         String mqttDataId = param.getMqttDataId();
+        log.info("saveDeviceUseRecord mqttDataId: {}", mqttDataId);
         if (StringUtils.isNotEmpty(mqttDataId)) {
-            DeviceUseRecord deviceUseRecord = init(mqttDataId);
+            DeviceUseRecords deviceUseRecord = init(mqttDataId);
             if (ObjectUtils.isNotEmpty(deviceUseRecord)) {
                 BeanUtils.copyProperties(param, deviceUseRecord);
                 String deviceId = param.getDeviceId();
                 String cardNo = param.getCardNo();
                 String userId = param.getUserId();
+
                 String projectOid = "";
                 DeviceInfo deviceInfo = null;
                 if (StringUtils.isNotEmpty(deviceId)) {
@@ -79,11 +88,10 @@ public class DeviceUseRecordService extends SuperService {
                 deviceUseRecord.setDeviceId(deviceId);
                 if (ObjectUtils.isNotEmpty(deviceInfo)) {
                     // 设备信息
-                    deviceUseRecord.setDeviceInfo(deviceInfo);
+                    deviceUseRecord.setDeviceInfo(deviceInfoService.toStoreModel(deviceInfo));
                     deviceUseRecord.setDeviceType(deviceInfo.getDeviceType());
                     deviceUseRecord.setGateWayId(deviceInfo.getGateWayId());
 
-                    deviceUseRecord.setBeLongOrganization(deviceInfo.getOrganization());
                     deviceUseRecord.setBeLongOid(deviceInfo.getBeLongOid());
                     deviceUseRecord.setBeLongName(deviceInfo.getBeLongName());
                 }
@@ -99,14 +107,15 @@ public class DeviceUseRecordService extends SuperService {
                 deviceUseRecord.setCardNo(cardNo);
                 if (ObjectUtils.isNotEmpty(cardInfo)) {
                     // 卡片信息
-                    deviceUseRecord.setCardInfo(cardInfo);
+                    deviceUseRecord.setCardInfo(cardInfoService.toStoreModel(cardInfo));
                 }
+
                 UserAccount userAccount = null;
                 if (StringUtils.isNotEmpty(userId)) {
                     userAccount = userCountDao.findTopByUserId(userId);
                 }
                 deviceUseRecord.setUserId(userId);
-                deviceUseRecord.setUserAccount(userAccount);
+                deviceUseRecord.setUserAccount(userAccountService.toSimpleModel(userAccount));
 
                 if (StringUtils.isNotEmpty(param.getTime())) {
                     deviceUseRecord.setTimestamp(DateUtils.timeToLong(param.getTime(), DateUtils.FORMAT_LONG));
@@ -154,10 +163,13 @@ public class DeviceUseRecordService extends SuperService {
         return ResultContent.buildSuccess(JSONUtil.toJsonStr(result));
     }
 
-    public DeviceUseRecord init(String mqttDataId) {
-        DeviceUseRecord entity = deviceUseRecordDao.init(mqttDataId, TokenUtil.create());
-        entity.setCreateTimeStr(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
-        return entity;
+    public DeviceUseRecords init(String mqttDataId) {
+        DeviceUseRecords entity = deviceUseRecordDao.init(mqttDataId, TokenUtil.create());
+        if (ObjectUtils.isNotEmpty(entity)) {
+            entity.setCreateTimeStr(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
+            return entity;
+        }
+        return null;
     }
 
     /**
@@ -165,76 +177,75 @@ public class DeviceUseRecordService extends SuperService {
      *
      * @param entity
      */
-    public void checkUseDeviceData(DeviceUseRecord entity) {
-        // 主要是从设备、卡片等的基础信息验证
-        if (ObjectUtils.isNotEmpty(entity)) {
-            // 1. 检查设备
-            if (ObjectUtils.isEmpty(entity.getDeviceInfo())) {
-                entity.setIsPassed(Boolean.FALSE);
-                entity.setMsg("设备信息未找到");
-                return;
-            }
-            DeviceInfo deviceInfo = entity.getDeviceInfo();
-            if (deviceInfo.getState() == null || deviceInfo.getState() != DataState.Enable) {
-                entity.setIsPassed(Boolean.FALSE);
-                entity.setMsg("设备未启用");
-                return;
-            }
-            //2. 验证用户信息
-            UserAccount userAccount = entity.getUserAccount();
-            if (ObjectUtils.isEmpty(userAccount)) {
-                entity.setIsPassed(Boolean.FALSE);
-                entity.setMsg("用户信息未确定");
-                return;
-            }
-            if (userAccount.getState() == null || userAccount.getState() != UserState.Normal) {
-                entity.setIsPassed(Boolean.FALSE);
-                entity.setMsg(String.format("用户已禁用"));
-                return;
-            }
-            // 验证用户是否有设备申请权限
-            if (deviceInfo.getIsOpenUse() == null || !deviceInfo.getIsOpenUse()) {
-                DevicePermiss devicePermiss = devicePermissDao.findTopByUserIdAndDeviceIdAndProjectOid(entity.getUserId(), entity.getDeviceId(), entity.getProjectOid());
-                if (ObjectUtils.isEmpty(devicePermiss)) {
-                    entity.setIsPassed(Boolean.FALSE);
-                    entity.setMsg("用户没有设备权限");
-                    return;
-                }
-                if (devicePermiss.getDataState() == null || devicePermiss.getDataState() != DataState.Enable) {
-                    entity.setIsPassed(Boolean.FALSE);
-                    entity.setMsg("用户权限未启用");
-                    return;
-                }
-            }
-
-            Integer mode = entity.getMode();
-            if (mode == null) {
-                entity.setIsPassed(Boolean.FALSE);
-                entity.setMsg("使用模式未确定");
-                return;
-            }
-            if (mode == 0) {
-                // 刷卡
-                if (ObjectUtils.isEmpty(entity.getCardInfo())) {
-                    entity.setIsPassed(Boolean.FALSE);
-                    entity.setMsg("卡片未找到");
-                    return;
-                }
-                CardInfo cardInfo = entity.getCardInfo();
-                if (cardInfo.getIsCanceled() != null && cardInfo.getIsCanceled()) {
-                    entity.setIsPassed(Boolean.FALSE);
-                    entity.setMsg("卡片已作废");
-                    return;
-                }
-
-                if (cardInfo.getCardState() == null || cardInfo.getCardState() != CardState.Enable) {
-                    entity.setIsPassed(Boolean.FALSE);
-                    entity.setMsg(String.format("卡片%s", cardInfo.getCardState().getRemark()));
-                    return;
-                }
-            }
-
-        }
+    public void checkUseDeviceData(DeviceUseRecords entity) {
+//        // 主要是从设备、卡片等的基础信息验证
+//        if (ObjectUtils.isNotEmpty(entity)) {
+//            // 1. 检查设备
+//            if (ObjectUtils.isEmpty(entity.getDeviceInfo())) {
+//                entity.setIsPassed(Boolean.FALSE);
+//                entity.setMsg("设备信息未找到");
+//                return;
+//            }
+//            DeviceInfoStoreModel deviceInfo = entity.getDeviceInfo();
+//            if (deviceInfo.getState() == null || deviceInfo.getState() != DataState.Enable) {
+//                entity.setIsPassed(Boolean.FALSE);
+//                entity.setMsg("设备未启用");
+//                return;
+//            }
+//            //2. 验证用户信息
+//            UserCountSimpleModel userAccount = entity.getUserAccount();
+//            if (ObjectUtils.isEmpty(userAccount)) {
+//                entity.setIsPassed(Boolean.FALSE);
+//                entity.setMsg("用户信息未确定");
+//                return;
+//            }
+//            if (userAccount.getState() == null || userAccount.getState() != UserState.Normal) {
+//                entity.setIsPassed(Boolean.FALSE);
+//                entity.setMsg(String.format("用户已禁用"));
+//                return;
+//            }
+//            // 验证用户是否有设备申请权限
+//            if (deviceInfo.getIsOpenUse() == null || !deviceInfo.getIsOpenUse()) {
+//                DevicePermiss devicePermiss = devicePermissDao.findTopByUserIdAndDeviceIdAndProjectOid(entity.getUserId(), entity.getDeviceId(), entity.getProjectOid());
+//                if (ObjectUtils.isEmpty(devicePermiss)) {
+//                    entity.setIsPassed(Boolean.FALSE);
+//                    entity.setMsg("用户没有设备权限");
+//                    return;
+//                }
+//                if (devicePermiss.getDataState() == null || devicePermiss.getDataState() != DataState.Enable) {
+//                    entity.setIsPassed(Boolean.FALSE);
+//                    entity.setMsg("用户权限未启用");
+//                    return;
+//                }
+//            }
+//
+//            Integer mode = entity.getMode();
+//            if (mode == null) {
+//                entity.setIsPassed(Boolean.FALSE);
+//                entity.setMsg("使用模式未确定");
+//                return;
+//            }
+//            if (mode == 0) {
+//                // 刷卡
+//                if (ObjectUtils.isEmpty(entity.getCardInfo())) {
+//                    entity.setIsPassed(Boolean.FALSE);
+//                    entity.setMsg("卡片未找到");
+//                    return;
+//                }
+//                CardInfoStoreModel cardInfo = entity.getCardInfo();
+//                if (cardInfo.getIsCanceled() != null && cardInfo.getIsCanceled()) {
+//                    entity.setIsPassed(Boolean.FALSE);
+//                    entity.setMsg("卡片已作废");
+//                    return;
+//                }
+//
+//                if (cardInfo.getCardState() == null || cardInfo.getCardState() != CardState.Enable) {
+//                    entity.setIsPassed(Boolean.FALSE);
+//                    entity.setMsg(String.format("卡片%s", cardInfo.getCardState().getRemark()));
+//                    return;
+//                }
+//            }
+//        }
     }
 
     /**
@@ -243,7 +254,7 @@ public class DeviceUseRecordService extends SuperService {
      * @param entity
      * @return
      */
-    public DeviceUseRecordModel toModel(DeviceUseRecord entity) {
+    public DeviceUseRecordModel toModel(DeviceUseRecords entity) {
         DeviceUseRecordModel model = null;
         if (ObjectUtils.isNotEmpty(entity)) {
             model = new DeviceUseRecordModel();

+ 48 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/IndexService.java

@@ -10,6 +10,7 @@ import com.github.microservice.auth.security.model.AuthDetails;
 import com.github.microservice.auth.security.type.AuthType;
 import com.github.microservice.components.data.mongo.mongo.helper.DBHelper;
 import com.github.microservice.core.util.net.IPUtil;
+import com.zhongshu.card.client.model.login.LoginBusModel;
 import com.zhongshu.card.client.model.login.LoginCommonModel;
 import com.zhongshu.card.client.model.org.*;
 import com.zhongshu.card.client.model.setting.PlatFormLoginConfig;
@@ -153,6 +154,53 @@ public class IndexService {
         return ResultContent.buildSuccess(commonModel);
     }
 
+    /**
+     * 商户小程序登录
+     *
+     * @param param
+     * @return
+     */
+    public ResultContent<LoginBusModel> busLogin(LoginParam param) {
+        StopWatch stopWatch = new StopWatch();
+        stopWatch.start("1");
+
+        UserAuthLoginModel userAuthLoginModel = new UserAuthLoginModel();
+        BeanUtils.copyProperties(param, userAuthLoginModel);
+        // 登录
+        ResultContent<LoginTokenModel> resultContent = commonLogin(userAuthLoginModel);
+        if (resultContent.isFailed()) {
+            return ResultContent.buildFail(resultContent.getMsg());
+        }
+
+        String phone = param.getLoginValue();
+        UserAccount userAccount = userCountDao.findTopByLoginName(phone);
+        UserCountModel userCountModel = userAccountService.toModel(userAccount);
+
+        // 用户加入的商户列表
+        List<UserJoinBusOrgModel> busModels = organizationService.getUserAboutShopList(userAccount.getUserId());
+        if (ObjectUtils.isEmpty(busModels)) {
+            return ResultContent.buildFail("用户未关联商户,登录失败");
+        }
+
+        LoginBusModel commonModel = new LoginBusModel();
+        LoginTokenModel loginTokenModel = resultContent.getContent();
+        com.zhongshu.card.server.core.util.BeanUtils.copyProperties(loginTokenModel, commonModel);
+        stopWatch.stop();
+        commonModel.setBusList(busModels);
+
+        stopWatch.start("2");
+        commonModel.setUserInfo(userCountModel);
+        stopWatch.stop();
+
+        stopWatch.start("3");
+        // 用户所有的权限
+//        Set<String> auth = roleServiceImpl.getUserAllAuths(userAccount.getUserId());
+//        commonModel.setAuths(auth);
+        stopWatch.stop();
+        log.info(stopWatch.prettyPrint());
+        return ResultContent.buildSuccess(commonModel);
+    }
+
     /**
      * 通用用户登录(返回所有权限数据)
      *

+ 30 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/OrganizationServiceImpl.java

@@ -1166,6 +1166,36 @@ public class OrganizationServiceImpl extends SuperService implements Organizatio
         return organizationDao.findTopByAuthType(AuthType.Platform);
     }
 
+    /**
+     * 得到用户加入的商户列表信息
+     *
+     * @param userId
+     */
+    public List<UserJoinBusOrgModel> getUserAboutShopList(String userId) {
+        UserAccount userAccount = userCountDao.findTopByUserId(userId);
+        List<OrganizationUser> list = organizationUserDao.findByUserAndAuthType(userAccount, AuthType.BusinessMain);
+        List<UserJoinBusOrgModel> busOrgModels = new ArrayList<>();
+        if (ObjectUtils.isNotEmpty(list)) {
+            busOrgModels = list.stream().map(it -> {
+                UserJoinBusOrgModel model = new UserJoinBusOrgModel();
+                Organization organization = it.getOrganization();
+                model.setBusOid(organization.getOid());
+                model.setBusName(organization.getName());
+                model.setBusCode(organization.getCode());
+                model.setBusLogo(organization.getLogo());
+
+                String projectOid = it.getProjectOid();
+                model.setProjectOid(projectOid);
+                Organization projectInfo = organizationDao.findTopByOid(projectOid);
+                if (ObjectUtils.isNotEmpty(projectInfo)) {
+                    model.setProjectName(projectInfo.getName());
+                }
+                return model;
+            }).collect(Collectors.toUnmodifiableList());
+        }
+        return busOrgModels;
+    }
+
     public OrganizationModel toModel(Organization entity) {
         OrganizationModel model = new OrganizationModel();
         if (ObjectUtils.isNotEmpty(entity)) {

+ 7 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/orgManager/OrganizationManagerServiceImpl.java

@@ -220,6 +220,13 @@ public class OrganizationManagerServiceImpl extends SuperService {
             return ResultContent.buildFail(String.format("机构已绑定项目,不能删除"));
         }
 
+        if (organization.getAuthType() == AuthType.Project) {
+            long bindOrgNumber = projectBindOrgServiceImpl.countProjectBindNumber(oid);
+            if (bindOrgNumber > 0) {
+                return ResultContent.buildFail(String.format("项目已绑定机构,不能删除"));
+            }
+        }
+
         //2. 删除机构
         organizationDao.delete(organization);
 

+ 11 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/orgManager/ProjectBindOrgServiceImpl.java

@@ -12,9 +12,11 @@ import com.zhongshu.card.client.model.orgModel.ProjectBindOrgsParam;
 import com.zhongshu.card.client.type.OrganizationRelationType;
 import com.zhongshu.card.server.core.dao.org.OrganizationDao;
 import com.zhongshu.card.server.core.dao.org.OrganizationRelationDao;
+import com.zhongshu.card.server.core.dao.org.OrganizationUserDao;
 import com.zhongshu.card.server.core.dao.projectAbout.PayShareListDao;
 import com.zhongshu.card.server.core.domain.org.Organization;
 import com.zhongshu.card.server.core.domain.org.OrganizationRelation;
+import com.zhongshu.card.server.core.domain.org.OrganizationUser;
 import com.zhongshu.card.server.core.domain.paySetting.PayShareList;
 import com.zhongshu.card.server.core.service.base.SuperService;
 import com.zhongshu.card.server.core.service.projectAbout.PayShareListService;
@@ -62,6 +64,9 @@ public class ProjectBindOrgServiceImpl extends SuperService {
     @Autowired
     private PayShareListService payShareListService;
 
+    @Autowired
+    private OrganizationUserDao organizationUserDao;
+
     /**
      * 项目绑定机构信息
      *
@@ -218,6 +223,12 @@ public class ProjectBindOrgServiceImpl extends SuperService {
         if (ObjectUtils.isEmpty(relation)) {
             return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
         }
+        // 判断是否可以删除
+        Organization organization = relation.getRelOrganization();
+        long count = organizationUserDao.countByOrganization(organization);
+        if (count > 0) {
+            return ResultContent.buildFail(String.format("%s已绑定用户,不能删除", organization.getName()));
+        }
         organizationRelationDao.delete(relation);
         return ResultContent.buildSuccess();
     }

+ 32 - 16
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/ExpenseFlowServiceImpl.java

@@ -18,6 +18,7 @@ import com.github.microservice.net.ResultContent;
 import com.github.microservice.net.ResultMessage;
 import com.github.microservice.types.OrderModeType;
 import com.github.microservice.types.OrderState;
+import com.zhongshu.card.client.model.base.SuperSearch;
 import com.zhongshu.card.client.model.operLogs.OperationLogsAddParam;
 import com.zhongshu.card.client.model.payment.ExpenseFlowCount;
 import com.zhongshu.card.client.model.payment.ExpenseFlowModel;
@@ -493,6 +494,16 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, this::toModel));
     }
 
+    private void initSearchProjectOid(SuperSearch param) {
+        if (param != null) {
+            String projectOid = param.getProjectOid();
+            if (StringUtils.isEmpty(projectOid)) {
+                projectOid = getCurrentProjectOid();
+            }
+            param.setProjectOid(projectOid);
+        }
+    }
+
     /**
      * 商户订单查询
      *
@@ -505,12 +516,14 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         // 查询支付成功的
         param.setIsPaySuccess(Boolean.TRUE);
         param.setOrderModeType(OrderModeType.Consume);
+
+        initSearchProjectOid(param);
         // 用户搜索的商户
-        List<String> shopOids = getSearchAllShopOid(param);
-        if (ObjectUtils.isEmpty(shopOids)) {
-            return ResultContent.buildFail("请选择查询商户或所有的");
-        }
-        param.setShopOids(shopOids);
+//        List<String> shopOids = getSearchAllShopOid(param);
+//        if (ObjectUtils.isEmpty(shopOids)) {
+//            return ResultContent.buildFail("请选择查询商户或所有的");
+//        }
+//        param.setShopOids(shopOids);
         Page<ExpenseFlow> page = expenseFlowDao.page(pageable, param);
         return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, this::toModel));
     }
@@ -573,12 +586,14 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         // 查询支付成功的
         param.setIsPaySuccess(Boolean.TRUE);
         param.setOrderModeType(OrderModeType.Consume);
-        // 用户搜索的商户
-        List<String> shopOids = getSearchAllShopOid(param);
-        if (ObjectUtils.isEmpty(shopOids)) {
-            return ResultContent.buildFail("请选择查询商户或所有的");
-        }
-        param.setShopOids(shopOids);
+
+        initSearchProjectOid(param);
+//        // 用户搜索的商户
+//        List<String> shopOids = getSearchAllShopOid(param);
+//        if (ObjectUtils.isEmpty(shopOids)) {
+//            return ResultContent.buildFail("请选择查询商户或所有的");
+//        }
+//        param.setShopOids(shopOids);
         ExpenseFlowCount flowCount = expenseFlowDao.countBuinessMainPayment(param);
         return ResultContent.buildSuccess(flowCount);
     }
@@ -597,11 +612,12 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         param.setOrderModeType(OrderModeType.Consume);
         BeanUtils.copyProperties(statisticSearch, param);
 
-        List<String> shopOids = getSearchAllShopOid(param);
-        if (ObjectUtils.isEmpty(shopOids)) {
-            return ResultContent.buildFail("请选择查询商户或所有的");
-        }
-        param.setShopOids(shopOids);
+        initSearchProjectOid(param);
+//        List<String> shopOids = getSearchAllShopOid(param);
+//        if (ObjectUtils.isEmpty(shopOids)) {
+//            return ResultContent.buildFail("请选择查询商户或所有的");
+//        }
+//        param.setShopOids(shopOids);
 
         param.setYear(DateUtils.getCurrentYear());
         // 统计模型,按 月、周

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

@@ -84,11 +84,13 @@ public class CardInfoPoolService extends SuperService {
         if (ObjectUtils.isEmpty(organization)) {
             return ResultContent.buildFail(String.format("机构不存在:%s", param.getOid()));
         }
+        param.setCode(param.getCode().toUpperCase());
 
         OidAboutInfo oidAboutInfo = organizationManagerService.getOidAboutInfo(oid);
         String projectOid = oidAboutInfo.getProjectOid();
         // 项目唯一
-        CardInfoPool temp = cardInfoPoolDao.findTopByCodeAndProjectOid(param.getCode(), projectOid);
+//        CardInfoPool temp = cardInfoPoolDao.findTopByCodeAndProjectOid(param.getCode(), projectOid);
+        CardInfoPool temp = cardInfoPoolDao.findTopByCode(param.getCode());
         if (StringUtils.isNotEmpty(param.getId())) {
             entity = cardInfoPoolDao.findTopById(param.getId());
             if (ObjectUtils.isEmpty(entity)) {
@@ -107,7 +109,6 @@ public class CardInfoPoolService extends SuperService {
             initEntityNoCheckOid(entity);
         }
         BeanUtils.copyProperties(param, entity, "isUsed");
-
         entity.setOid(oid);
         entity.setProjectOid(projectOid);
         entity.setAboutAuthType(oidAboutInfo.getAuthType());
@@ -238,7 +239,7 @@ public class CardInfoPoolService extends SuperService {
                         failDetails.add(String.format("第%d行卡号不能为空", startRow));
                         continue;
                     }
-                    code = code.trim();
+                    code = code.trim().toUpperCase();
                     if (codeMap.containsKey(code)) {
                         failDetails.add(String.format("第%d行卡号%s已存在", startRow, code));
                         continue;
@@ -258,9 +259,9 @@ public class CardInfoPoolService extends SuperService {
                     }
 
                     // 检查是否已存在 code
-                    boolean exit = cardInfoPoolDao.existsByCode(param1.getCode());
+                    boolean exit = cardInfoPoolDao.existsByCode(code);
                     if (exit) {
-                        failDetails.add(String.format("第%d行卡号%s已存在", startRow, param1.getCode()));
+                        failDetails.add(String.format("第%d行卡号%s已存在", startRow, code));
                         continue;
                     }
 
@@ -363,9 +364,12 @@ public class CardInfoPoolService extends SuperService {
         if (StringUtils.isEmpty(param.getCode())) {
             return ResultContent.buildSuccess(Lists.newArrayList());
         }
-
+        String projectOid = param.getProjectOid();
+        if (StringUtils.isEmpty(projectOid)) {
+            projectOid = getCurrentProjectOid();
+        }
         // 查询前十的卡片数据
-        List<CardInfoPool> list = cardInfoPoolDao.findTop10ByProjectOidAndCodeLikeAndIsUsedAndCardCancelState(param.getProjectOid(), param.getCode(), Boolean.FALSE, CardCancelState.Common);
+        List<CardInfoPool> list = cardInfoPoolDao.findTop10ByProjectOidAndCodeLikeAndIsUsedAndCardCancelState(projectOid, param.getCode(), Boolean.FALSE, CardCancelState.Common);
         List<CardInfoPoolSimpleModel> models = new ArrayList<>();
         if (ObjectUtils.isNotEmpty(list)) {
             models = list.stream().map(this::toSimpleModel).collect(Collectors.toList());

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

@@ -734,7 +734,7 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
 
     public List<CardInfo> getProjectCards(String projectOid, List<String> userIds) {
         if (StringUtils.isNotEmpty(projectOid) && ObjectUtils.isNotEmpty(userIds)) {
-            return cardInfoDao.findByProjectOidAndUserIdInAndCardState(projectOid, userIds, CardState.Enable);
+            return cardInfoDao.findByProjectOidAndUserIdInAndCardStateOrderByUpdateTimeDesc(projectOid, userIds, CardState.Enable);
         }
         return Lists.newArrayList();
     }
@@ -991,4 +991,13 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
         return model;
     }
 
+    public CardInfoStoreModel toStoreModel(CardInfo entity) {
+        CardInfoStoreModel model = null;
+        if (ObjectUtils.isNotEmpty(entity)) {
+            model = new CardInfoStoreModel();
+            BeanUtils.copyProperties(entity, model);
+        }
+        return model;
+    }
+
 }