Explorar el Código

Merge remote-tracking branch 'origin/master'

jzh hace 1 año
padre
commit
64059818da

+ 72 - 29
client_h5/src/pages/myLogs/Receive/index.vue

@@ -13,35 +13,44 @@
           :key="index"
           @click="toDetail(item)"
         >
-          <div class="title">
-            {{ item.userNickname ?? "匿名" }}的{{
-              item.reportType == "weekly" ? "周报" : "日报"
-            }}
+          <div class="time-box" v-if="isSameDay(item, index)">
+            <span class="timer">{{ timeFont(item.fillingDate) }}</span>
           </div>
-          <div v-if="item.reportType == 'weekly'">
-            <div>
-              <span class="label">开始日期:</span
+          <div class="card-box">
+            <div class="title">
+              {{ item.userNickname ?? "匿名" }}的{{
+                item.reportType == "weekly" ? "周报" : "日报"
+              }}
+            </div>
+            <div v-if="item.reportType == 'weekly'">
+              <div>
+                <span class="label">开始日期:</span
+                >{{ moment(item.reportStartDate).format("YYYY-MM-DD") }}
+              </div>
+              <div>
+                <span class="label">结束日期:</span
+                >{{ moment(item.reportEndDate).format("YYYY-MM-DD") }}
+              </div>
+            </div>
+            <div v-else>
+              <span class="label">日志日期:</span
               >{{ moment(item.reportStartDate).format("YYYY-MM-DD") }}
             </div>
-            <div>
-              <span class="label">结束日期:</span
-              >{{ moment(item.reportEndDate).format("YYYY-MM-DD") }}
+            <div class="label">
+              {{ item.reportType == "weekly" ? "本周" : "今日" }}完成工作:
             </div>
-          </div>
-          <div v-else>
-            <span class="label">日志日期:</span
-            >{{ moment(item.reportStartDate).format("YYYY-MM-DD") }}
-          </div>
-          <div class="label">
-            {{ item.reportType == "weekly" ? "本周" : "今日" }}完成工作:
-          </div>
-          <div class="van-multi-ellipsis--l2">
-            <div>{{ item.reportContent }}</div>
-          </div>
-          <div class="label">工作量分配:</div>
-          <div class="work-list">
-            <div v-for="work in item.workload" :key="work.id" class="work-item">
-              {{ `(${work.workTime}小时)${work.projectName}` }}
+            <div class="van-multi-ellipsis--l2">
+              <div>{{ item.reportContent }}</div>
+            </div>
+            <div class="label">工作量分配:</div>
+            <div class="work-list">
+              <div
+                v-for="work in item.workload"
+                :key="work.id"
+                class="work-item"
+              >
+                {{ `(${work.workTime}小时)${work.projectName}` }}
+              </div>
             </div>
           </div>
         </div>
@@ -107,6 +116,26 @@ const onRefresh = async () => {
   await onLoad();
 };
 
+// 写一个函数判断本条和上一条是否是同一天
+const isSameDay = (data: any, index: number) => {
+  if (index == 0) return true;
+  const today = moment(data.fillingDate).format("YYYY-MM-DD").toString();
+  const lastDay = moment(list.value[index - 1].fillingDate)
+    .format("YYYY-MM-DD")
+    .toString();
+  if (today == lastDay) return false;
+  return true;
+};
+
+const timeFont = (date: string) => {
+  const currentDate = moment();
+  const givenDate = moment(date);
+  if (givenDate.isSame(currentDate, "day")) {
+    return moment(date).format("HH:mm");
+  }
+  return moment(date).format("MM月DD日 HH:mm");
+};
+
 // 查看详情
 const { push } = useRouter();
 const toDetail = (detail: any) => {
@@ -128,11 +157,25 @@ const toDetail = (detail: any) => {
   height: 100%;
   background-color: #f1f2f3;
   overflow: scroll;
+  padding-top: 15px;
+
   .log-card {
-    margin: 15px;
-    background-color: #fff;
-    border-radius: 10px;
-    padding: 10px 15px;
+    .time-box {
+      text-align: center;
+      .timer {
+        display: inline-block;
+        padding: 2px 15px;
+        background-color: #fff;
+        border-radius: 20px;
+        color: #838485;
+      }
+    }
+    .card-box {
+      margin: 15px;
+      background-color: #fff;
+      border-radius: 10px;
+      padding: 10px 15px;
+    }
     .title {
       font-size: 16px;
       font-weight: bold;

+ 14 - 0
zjugis-business/src/main/resources/templates/FlowContractInvoice/js/apply.js

@@ -139,6 +139,20 @@
 
 
     function submit(all, istransfer) {
+        var invoiceAmount = $('[name="contractInvoice$invoiceAmount"] input').val();
+        var contractBalance = $('[name="amount$contractBalance"] input').val();
+        if(!contractBalance){
+            contractBalance = $('[name="contract$contractAmount"] input').val();
+            if(!contractBalance){
+                contractBalance = 0;
+            }
+        }
+        if(invoiceAmount > contractBalance){
+            all({success: false, errorMsg: "开票金额超出合同余额!"});
+            return;
+        }
+
+
         var postData = z.ui.form.getFormFields("[name=flow-form]", {validatorRequired: istransfer});
         if (postData === false) {
             all({success: false});

+ 49 - 0
zjugis-module-infra/zjugis-module-infra-biz/src/main/java/com/zjugis/module/infra/dal/dataobject/msg/MsgSendRecordDO.java

@@ -0,0 +1,49 @@
+package com.zjugis.module.infra.dal.dataobject.msg;
+
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zjugis.module.infra.dal.dataobject.file.FileConfigDO;
+import lombok.*;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author ljy
+ * @version 1.0
+ * @date 2024/7/9 9:25
+ */
+@TableName("infra_msg_send_record")
+@KeySequence("infra_msg_send_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MsgSendRecordDO {
+
+
+    private Long id;
+
+    private String sendPersonId;
+
+    private String sendPerson;
+
+    private String sendMobile;
+
+    private Integer sendState;
+
+    private Integer sendType;
+
+    private LocalDateTime sendTime;
+
+    private String sendContent;
+
+    private String sendResult;
+
+    private String thirdId;
+
+    private String msgType;
+
+
+}

+ 14 - 0
zjugis-module-infra/zjugis-module-infra-biz/src/main/java/com/zjugis/module/infra/dal/mysql/msg/MsgSendRecordMapper.java

@@ -0,0 +1,14 @@
+package com.zjugis.module.infra.dal.mysql.msg;
+
+import com.zjugis.framework.mybatis.core.mapper.BaseMapperX;
+import com.zjugis.module.infra.dal.dataobject.msg.MsgSendRecordDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author ljy
+ * @version 1.0
+ * @date 2024/7/9 9:30
+ */
+@Mapper
+public interface MsgSendRecordMapper extends BaseMapperX<MsgSendRecordDO> {
+}

+ 17 - 0
zjugis-module-infra/zjugis-module-infra-biz/src/main/java/com/zjugis/module/infra/enums/msg/SendTypeEnum.java

@@ -0,0 +1,17 @@
+package com.zjugis.module.infra.enums.msg;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum SendTypeEnum {
+
+    /**
+     * 钉钉
+     */
+    DING(1);
+
+    private final Integer type;
+
+}

+ 32 - 0
zjugis-module-infra/zjugis-module-infra-biz/src/main/java/com/zjugis/module/infra/service/ding/DingServiceImpl.java

@@ -13,13 +13,21 @@ import com.dingtalk.api.response.OapiGettokenResponse;
 import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response;
 import com.dingtalk.api.response.OapiUserGetByMobileResponse;
 import com.taobao.api.ApiException;
+import com.zjugis.framework.common.pojo.CommonResult;
 import com.zjugis.module.infra.api.ding.dto.*;
+import com.zjugis.module.infra.dal.dataobject.msg.MsgSendRecordDO;
+import com.zjugis.module.infra.enums.msg.SendTypeEnum;
+import com.zjugis.module.infra.service.msg.MsgSendRecordService;
+import com.zjugis.module.system.api.user.AdminUserApi;
+import com.zjugis.module.system.api.user.dto.AdminUserRespDTO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -44,6 +52,12 @@ public class DingServiceImpl implements DingService {
     @Value("${zjugis.ding.appsecret}")
     private String appsecret;
 
+    @Autowired
+    private MsgSendRecordService msgSendRecordService;
+
+    @Autowired
+    private AdminUserApi adminUserApi;
+
     /**
      * @param mobile
      * @param
@@ -70,9 +84,27 @@ public class DingServiceImpl implements DingService {
         }
         request.setMsg(msg);
         OapiMessageCorpconversationAsyncsendV2Response rsp = client.execute(request, token);
+        saveLog(dingMessageDto,rsp,mobile);
         return rsp.toString();
     }
 
+    private void saveLog(DingMessageDto dingMessageDto, OapiMessageCorpconversationAsyncsendV2Response rsp, String mobile) {
+        MsgSendRecordDO record = new MsgSendRecordDO();
+        CommonResult<AdminUserRespDTO> userRes = adminUserApi.getUser(dingMessageDto.getUserId());
+        AdminUserRespDTO user = userRes.getCheckedData();
+        record.setSendPerson(user.getNickname());
+        record.setSendPersonId(dingMessageDto.getUserId());
+        record.setSendMobile(mobile);
+        record.setSendContent(dingMessageDto.getContent());
+        record.setSendType(SendTypeEnum.DING.getType());
+        record.setSendTime(LocalDateTime.now());
+        record.setMsgType(dingMessageDto.getMsgType().name());
+        record.setSendState(rsp.isSuccess()?1:0);
+        record.setSendResult(rsp.toString());
+        record.setThirdId(String.valueOf(rsp.getTaskId()));
+        msgSendRecordService.createMsgSendRecord(record);
+    }
+
     @Override
     public String createStaff(StaffDTO dto) throws ApiException {
         String accessToken = getDingTalkToken();

+ 22 - 0
zjugis-module-infra/zjugis-module-infra-biz/src/main/java/com/zjugis/module/infra/service/msg/MsgSendRecordService.java

@@ -0,0 +1,22 @@
+package com.zjugis.module.infra.service.msg;
+
+import com.zjugis.module.infra.controller.admin.file.vo.config.FileConfigCreateReqVO;
+import com.zjugis.module.infra.dal.dataobject.msg.MsgSendRecordDO;
+
+import javax.validation.Valid;
+
+/**
+ * @author ljy
+ * @version 1.0
+ * @date 2024/7/9 9:31
+ */
+public interface MsgSendRecordService {
+
+    /**
+     * 创建文件配置
+     *
+     * @param msgSendRecordDO 创建信息
+     * @return 编号
+     */
+    Long createMsgSendRecord(MsgSendRecordDO msgSendRecordDO);
+}

+ 25 - 0
zjugis-module-infra/zjugis-module-infra-biz/src/main/java/com/zjugis/module/infra/service/msg/MsgSendRecordServiceImpl.java

@@ -0,0 +1,25 @@
+package com.zjugis.module.infra.service.msg;
+
+import com.zjugis.module.infra.dal.dataobject.msg.MsgSendRecordDO;
+import com.zjugis.module.infra.dal.mysql.msg.MsgSendRecordMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author ljy
+ * @version 1.0
+ * @date 2024/7/9 9:32
+ */
+@Service
+public class MsgSendRecordServiceImpl implements MsgSendRecordService{
+
+    @Autowired
+    MsgSendRecordMapper msgSendRecordMapper;
+
+
+    @Override
+    public Long createMsgSendRecord(MsgSendRecordDO msgSendRecordDO) {
+        msgSendRecordMapper.insert(msgSendRecordDO);
+        return msgSendRecordDO.getId();
+    }
+}