Kaynağa Gözat

刷脸,ic卡消费支持推送多人

guq 6 yıl önce
ebeveyn
işleme
f245c61b52

+ 3 - 1
applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/mapper/IcCardMapper.java

@@ -4,6 +4,8 @@ import com.usoftchina.smartschool.school.dto.SysSchoolDTO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * @Author ChenWei
  * @Date 2019/03/12
@@ -11,7 +13,7 @@ import org.apache.ibatis.annotations.Param;
 @Mapper
 public interface IcCardMapper {
 
-    String SelectParentOpenId(@Param("code") String code, @Param("schoolId") Long schoolId);
+    List<String> SelectParentOpenId(@Param("code") String code, @Param("schoolId") Long schoolId);
 
     SysSchoolDTO getSchoolIdByName(@Param("name") String name);
 

+ 20 - 12
applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/service/impl/AccessControlServiceImpl.java

@@ -12,18 +12,19 @@ import com.usoftchina.smartschool.device.service.AccessControlService;
 import com.usoftchina.smartschool.file.api.FileApi;
 import com.usoftchina.smartschool.file.api.util.ByteArrayMultipartFile;
 import com.usoftchina.smartschool.file.dto.FileInfoDTO;
-import com.usoftchina.smartschool.file.dto.ImageFile;
 import com.usoftchina.smartschool.school.enums.NoticeTemplate;
 import com.usoftchina.smartschool.utils.DateUtils;
 import com.usoftchina.smartschool.utils.StringUtils;
 import com.usoftchina.smartschool.wechat.api.WechatApi;
 import com.usoftchina.smartschool.wechat.dto.MessageInfoDTO;
+import com.usoftchina.smartschool.wechat.dto.TransferDTO;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -114,17 +115,24 @@ public class AccessControlServiceImpl implements AccessControlService{
             logger.error("模板未配置");
             return;
         }
-        MessageInfoDTO msg = new MessageInfoDTO();
-        msg.setUrl(wechatBaseUrl + "/accessnoticedetail/" + record.getRecord_id());
-        msg.setAppId(studentInfo.getAppId());
-        msg.setSecret(studentInfo.getSecret());
-        msg.setTouser(studentInfo.getOpenId());
-        msg.setTemplateId(schoolTemplate.getSt_templateid());
-        msg.setTitle((type == 1 ? "入" : "出") + "校提醒");
-        msg.setKeyword1(studentInfo.getStuName());
-        msg.setKeyword2(DateUtils.format());
-        msg.setRemark("您好! 你的孩子: " + studentInfo.getStuName() + (type == 1 ? " 进入" : " 离开") + "学校");
-        wechatApi.sendMsg(msg);
+        //支持发送多个人员
+        List<MessageInfoDTO> msgs = new ArrayList<>();
+        information.forEach(data -> {
+            MessageInfoDTO msg = new MessageInfoDTO();
+            msg.setUrl(wechatBaseUrl + "/accessnoticedetail/" + record.getRecord_id());
+            msg.setAppId(data.getAppId());
+            msg.setSecret(data.getSecret());
+            msg.setTouser(data.getOpenId());
+            msg.setTemplateId(schoolTemplate.getSt_templateid());
+            msg.setTitle((type == 1 ? "入" : "出") + "校提醒");
+            msg.setKeyword1(studentInfo.getStuName());
+            msg.setKeyword2(DateUtils.format());
+            msg.setRemark("您好! 你的孩子: " + data.getStuName() + (type == 1 ? " 进入" : " 离开") + "学校");
+            msgs.add(msg);
+        });
+        if (msgs.size() > 0) {
+            wechatApi.largeMessages(new TransferDTO(msgs));
+        }
     }
 
     /**

+ 33 - 29
applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/service/impl/IcCardServiceImpl.java

@@ -8,6 +8,7 @@ import com.usoftchina.smartschool.device.po.Transaction;
 import com.usoftchina.smartschool.device.service.IcCardService;
 import com.usoftchina.smartschool.school.dto.SysSchoolDTO;
 import com.usoftchina.smartschool.school.enums.NoticeTemplate;
+import com.usoftchina.smartschool.utils.CollectionUtils;
 import com.usoftchina.smartschool.utils.ObjectUtils;
 import com.usoftchina.smartschool.utils.http.HmacUtils;
 import com.usoftchina.smartschool.wechat.api.WechatApi;
@@ -61,36 +62,39 @@ public class IcCardServiceImpl implements IcCardService {
                 String oldType = accTransDetail.getAccTransType();
                 accTransDetail.setAccTransType(Transaction.getName(accTransDetail.getAccTransType()));
                 //构造messageInfo对象
-                String openId = icCardMapper.SelectParentOpenId(accTransDetail.getEmpNo(), schoolId);
-                if(StringUtils.hasText(openId)){
-                    MessageInfoDTO messageInfo = new MessageInfoDTO();
-                    messageInfo.setMsgId(accTransDetail.getGuid());
-                    sb.append(accTransDetail.getGuid() + ",");
-                    messageInfo.setTouser(openId);
-                    messageInfo.setAppId(appId);
-                    messageInfo.setSecret(secret);
-                    messageInfo.setTemplateId(templateId);
-                    String accNo = accTransDetail.getAccNo();
-                    String cardNo = StringUtils.isEmpty(accNo) ? null : accNo.substring(accTransDetail.getAccNo().length() - 4);
-                    String header = "您好,您的小孩" + accTransDetail.getEmpName() + "在校的校园卡(卡号:*** " + cardNo + ")发生如下交易";
-                    messageInfo.setTitle(header);
-                    Date accTransDay = accTransDetail.getAccTransDay();
-                    if (null != accTransDay) {
-                        messageInfo.setKeyword1(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(accTransDetail.getAccTransDay()));
-                    }
-                    if (Integer.parseInt(oldType) > 15) {
-                        messageInfo.setKeyword2(String.format("%.2f", accTransDetail.getoMoneyValue()));
-                    } else {
-                        messageInfo.setKeyword2(String.format("%.2f", accTransDetail.getiMoneyValue()));
-                    }
-                    messageInfo.setKeyword3(accTransDetail.getAccTransType());
-                    messageInfo.setKeyword4(String.format("%.2f", accTransDetail.getCardMoneyValue()));
-                    messageInfo.setRemark("感谢您使用!");
-                    messageInfoList.add(messageInfo);
-                }else {
-                    logger.info("GUID={}未找到对应的推送人", accTransDetail.getGuid());
+                List<String> openIds = icCardMapper.SelectParentOpenId(accTransDetail.getEmpNo(), schoolId);
+                if (!CollectionUtils.isEmpty(openIds)) {
+                    openIds.forEach(openId -> {
+                        if (StringUtils.hasText(openId)) {
+                            MessageInfoDTO messageInfo = new MessageInfoDTO();
+                            messageInfo.setMsgId(accTransDetail.getGuid());
+                            sb.append(accTransDetail.getGuid() + ",");
+                            messageInfo.setTouser(openId);
+                            messageInfo.setAppId(appId);
+                            messageInfo.setSecret(secret);
+                            messageInfo.setTemplateId(templateId);
+                            String accNo = accTransDetail.getAccNo();
+                            String cardNo = StringUtils.isEmpty(accNo) ? null : accNo.substring(accTransDetail.getAccNo().length() - 4);
+                            String header = "您好,您的小孩" + accTransDetail.getEmpName() + "在校的校园卡(卡号:*** " + cardNo + ")发生如下交易";
+                            messageInfo.setTitle(header);
+                            Date accTransDay = accTransDetail.getAccTransDay();
+                            if (null != accTransDay) {
+                                messageInfo.setKeyword1(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(accTransDetail.getAccTransDay()));
+                            }
+                            if (Integer.parseInt(oldType) > 15) {
+                                messageInfo.setKeyword2(String.format("%.2f", accTransDetail.getoMoneyValue()));
+                            } else {
+                                messageInfo.setKeyword2(String.format("%.2f", accTransDetail.getiMoneyValue()));
+                            }
+                            messageInfo.setKeyword3(accTransDetail.getAccTransType());
+                            messageInfo.setKeyword4(String.format("%.2f", accTransDetail.getCardMoneyValue()));
+                            messageInfo.setRemark("感谢您使用!");
+                            messageInfoList.add(messageInfo);
+                        } else {
+                            logger.info("GUID={}未找到对应的推送人", accTransDetail.getGuid());
+                        }
+                    });
                 }
-
             });
             //3.传输
             Result result = wechatApi.sendOutMessages(JSON.toJSONString(messageInfoList));

+ 1 - 1
applications/device/device-server/src/main/resources/mapper/IcCardMapper.xml

@@ -15,7 +15,7 @@
       (SELECT stu_id FROM sys_student WHERE stu_number = #{code} and school_id = #{schoolId})
     )
     and school_id=#{schoolId}
-    and   ifnull(openid,'')  != ''  limit 0,1
+    and   ifnull(openid,'')  != ''
   </select>
 
   <select id="selectTemplateId" resultType="string">

+ 4 - 0
applications/wechat/wechat-dto/src/main/java/com/usoftchina/smartschool/wechat/dto/TransferDTO.java

@@ -18,4 +18,8 @@ public class TransferDTO implements Serializable{
     public void setData(List<MessageInfoDTO> data) {
         this.data = data;
     }
+
+    public TransferDTO(List<MessageInfoDTO> data) {
+        this.data = data;
+    }
 }