wangzhuo 3 лет назад
Родитель
Сommit
0133b3a356
18 измененных файлов с 357 добавлено и 133 удалено
  1. 9 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/ICorpsAttnClient.java
  2. 32 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/IWechatClient.java
  3. 5 3
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/excel/SaleDeliveryExcel.java
  4. 2 2
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/BidingAgent.java
  5. 3 2
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/excel/SaleOrderExcel.java
  6. 1 1
      blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/extra/entity/Claim.java
  7. 5 0
      blade-service/blade-client/pom.xml
  8. 4 8
      blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsDescPartsController.java
  9. 11 10
      blade-service/blade-client/src/main/java/org/springblade/client/corps/feign/CorpsAttnClient.java
  10. 4 6
      blade-service/blade-client/src/main/java/org/springblade/client/wechat/controller/WechatController.java
  11. 146 0
      blade-service/blade-client/src/main/java/org/springblade/client/wechat/feign/WechatClient.java
  12. 53 13
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/DeliveryController.java
  13. 2 1
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/BidingItemsServiceImpl.java
  14. 41 1
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/BidingServiceImpl.java
  15. 18 82
      blade-service/trade-finance/src/main/java/org/springblade/finance/controller/AccController.java
  16. 3 2
      blade-service/trade-finance/src/main/java/org/springblade/finance/excel/ExpenseExcel.java
  17. 16 1
      blade-service/trade-purchase/src/main/java/com/trade/purchase/extra/service/impl/ClaimServiceImpl.java
  18. 2 1
      blade-service/trade-purchase/src/main/java/com/trade/purchase/order/service/impl/OrderServiceImpl.java

+ 9 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/ICorpsAttnClient.java

@@ -7,6 +7,8 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springblade.core.tool.api.R;
 
+import java.util.List;
+
 @FeignClient(
 	value = LauncherConstant.APPLICATION_CLIENT_NAME
 )
@@ -16,6 +18,7 @@ import org.springblade.core.tool.api.R;
 public interface ICorpsAttnClient {
 	String API_PREFIX = "/client";
 	String GET_USER = API_PREFIX + "/get_user";
+	String GET_ATTN = API_PREFIX + "/get_attn";
 
 	/**
 	 * 获取用户信息
@@ -24,4 +27,10 @@ public interface ICorpsAttnClient {
 	 */
 	@GetMapping(GET_USER)
 	CorpsAttn getUser(@RequestParam("userId") Long userId);
+
+	/**
+	 * 获取客户联系人
+	 */
+	@GetMapping(GET_ATTN)
+	List<CorpsAttn> getAttn(@RequestParam("corpId") Long corpId);
 }

+ 32 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/IWechatClient.java

@@ -0,0 +1,32 @@
+package org.springblade.client.feign;
+
+import org.springblade.common.constant.LauncherConstant;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@FeignClient(
+	value = LauncherConstant.APPLICATION_CLIENT_NAME
+)
+/**
+ * 微信授权对外访问API
+ */
+public interface IWechatClient {
+
+	String API_PREFIX = "/client";
+	String API_NEW_PUSH = "/newPush";
+
+	/**
+	 * 推送消息
+	 * @param openId
+	 * @param mblno
+	 * @param route
+	 * @param loadDate
+	 * @return
+	 */
+	@GetMapping(API_NEW_PUSH)
+	String newsPush(@RequestParam("openId") String openId,
+					@RequestParam("mblno") String mblno,
+					@RequestParam("route") String route,
+					@RequestParam("loadDate") String loadDate);
+}

+ 5 - 3
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/excel/SaleDeliveryExcel.java

@@ -6,6 +6,8 @@ import com.alibaba.excel.annotation.write.style.ContentRowHeight;
 import com.alibaba.excel.annotation.write.style.HeadRowHeight;
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  *  客户收货导出
  */
@@ -39,7 +41,7 @@ public class SaleDeliveryExcel {
 	 * 出库日期
 	 */
 	@ExcelProperty(value = "出库日期")
-	private String businessDate;
+	private Date businessDate;
 
 	/**
 	 * 出库数量
@@ -57,13 +59,13 @@ public class SaleDeliveryExcel {
 	 * 制单日期
 	 */
 	@ExcelProperty(value = "制单日期")
-	private String createTime;
+	private Date createTime;
 
 	/**
 	 * 到货日期
 	 */
 	@ExcelProperty(value = "到货日期")
-	private String arrivalTime;
+	private Date arrivalTime;
 
 	/**
 	 * 状态

+ 2 - 2
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/BidingAgent.java

@@ -75,9 +75,9 @@ public class BidingAgent implements Serializable {
 	private Integer isDeleted;
 
 	/**
-	 * 代理id
+	 * 代理客户id
 	 */
-	@ApiModelProperty(value = "代理id")
+	@ApiModelProperty(value = "代理客户id")
 	private Long agentId;
 
 	/**

+ 3 - 2
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/excel/SaleOrderExcel.java

@@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.alibaba.excel.annotation.write.style.ContentRowHeight;
 import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -131,13 +132,13 @@ public class SaleOrderExcel {
 	 * 确认收货日期
 	 */
 	@ExcelProperty(value = "确认收货日期")
-	private String receiptTime;
+	private Date receiptTime;
 
 	/**
 	 * 确认到货日期
 	 */
 	@ExcelProperty(value = "确认到货日期")
-	private String arrivalTime;
+	private Date arrivalTime;
 
 	/**
 	 * 备注

+ 1 - 1
blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/extra/entity/Claim.java

@@ -196,7 +196,7 @@ public class Claim implements Serializable {
 	/**
 	 * 状态(待补充)
 	 */
-	@ApiModelProperty(value = "状态(待补充)")
+	@ApiModelProperty(value = "状态 0暂存 1请核 2审核中 3审批通过 5报销完成")
 	private Integer status;
 	/**
 	 * 备注

+ 5 - 0
blade-service/blade-client/pom.xml

@@ -137,6 +137,11 @@
             <version>2.8.2.RELEASE</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-mp</artifactId>
+            <version>2.9.0</version>
+        </dependency>
     </dependencies>
 
 

+ 4 - 8
blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsDescPartsController.java

@@ -208,9 +208,6 @@ public class CorpsDescPartsController extends BladeController {
 		//平均客单产值
 		BigDecimal averageAmount = new BigDecimal("0.00");
 
-		//总金额
-		BigDecimal amount = new BigDecimal("0.00");
-
 		LambdaQueryWrapper<CorpsDesc> corpsDescQueryWrapper = new LambdaQueryWrapper<>();
 		corpsDescQueryWrapper.eq(CorpsDesc::getIsDeleted, 0).eq(CorpsDesc::getTenantId, AuthUtil.getTenantId()).eq(CorpsDesc::getCorpType, "KH");
 		//客户总数量
@@ -234,16 +231,15 @@ public class CorpsDescPartsController extends BladeController {
 		if (unsales > 0){
 			lossRate = lossRate.add(new BigDecimal(unsales).divide(new BigDecimal(corpsDescList.size()),MathContext.DECIMAL32));
 		}
-
-
-
 		Order order = new Order();
 		order.setBillType("XS");
 		order.setTradeType("YPJ");
 		List<Order> orderList = orderDescClient.getByBillNo(order);
-		amount = orderList.stream().map(Order::getDebitAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+
 		//平均客单产值
-		averageAmount = averageAmount.add(amount.divide(new BigDecimal(orderList.size()),MathContext.DECIMAL32));
+		if(orderList.size() != 0){
+			averageAmount = averageAmount.add(new BigDecimal(corpsDescList.size()/orderList.size(),MathContext.DECIMAL32));
+		}
 
 		map.put("sumNumber", corpsDescList.size());
 		map.put("coreCorp", coreCorp);

+ 11 - 10
blade-service/blade-client/src/main/java/org/springblade/client/corps/feign/CorpsAttnClient.java

@@ -1,25 +1,18 @@
 package org.springblade.client.corps.feign;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.ApiOperation;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.AllArgsConstructor;
 import org.springblade.client.corps.service.ICorpsAttnService;
-import org.springblade.client.corps.service.ICorpsDescService;
 import org.springblade.client.entity.CorpsAttn;
-import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.feign.ICorpsAttnClient;
-import org.springblade.client.vo.CorpListVo;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.core.tool.utils.ObjectUtil;
-import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
 
+import java.util.List;
+
 @NonDS
 @ApiIgnore()
 @RestController
@@ -41,4 +34,12 @@ public class CorpsAttnClient implements ICorpsAttnClient{
 		return corpsAttn;
 	}
 
+	/**
+	 * 获得客户联系人
+	 */
+	@Override
+	public List<CorpsAttn> getAttn(Long corpId){
+		return corpsAttnService.list(new QueryWrapper<CorpsAttn>().eq("pid", corpId).eq("is_deleted", 0).eq("tenant_id", AuthUtil.getTenantId()).eq("status", 0));
+	}
+
 }

+ 4 - 6
blade-service/blade-client/src/main/java/org/springblade/client/wechat/WechatController.java → blade-service/blade-client/src/main/java/org/springblade/client/wechat/controller/WechatController.java

@@ -1,13 +1,10 @@
-package org.springblade.client.wechat;
+package org.springblade.client.wechat.controller;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
-import okhttp3.OkHttpClient;
-import okhttp3.Request;
-import okhttp3.RequestBody;
-import okhttp3.Response;
+import okhttp3.*;
 import org.apache.http.HttpEntity;
 import org.apache.http.client.config.RequestConfig;
 import org.apache.http.client.methods.CloseableHttpResponse;
@@ -28,6 +25,7 @@ import org.springframework.web.bind.annotation.RestController;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * 与微信产生交换的控制器
@@ -42,7 +40,7 @@ public class WechatController {
 	/**
 	 * 微信授权登录
 	 *
-	 * @param code
+	 * @param loginCode
 	 * @return 结果
 	 */
 	@GetMapping("programLogin")

+ 146 - 0
blade-service/blade-client/src/main/java/org/springblade/client/wechat/feign/WechatClient.java

@@ -0,0 +1,146 @@
+package org.springblade.client.wechat.feign;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
+import okhttp3.*;
+import org.springblade.client.feign.IWechatClient;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@NonDS
+@ApiIgnore()
+@RestController
+@AllArgsConstructor
+@Slf4j
+public class WechatClient implements IWechatClient {
+
+	/**
+	 * 发送模板消息
+	 *
+	 * @param openId  接收此消息的openId
+	 * @param loadingTime 装柜时间
+	 * @param details     发送详情
+	 * @param number  件数
+	 * @return 结果
+	 */
+	/*@Override
+	public String newsPush(String openId, String loadingTime, String details, String number) {
+
+		log.info("进来了!!!!!!!!!!!!!!!!!!!!!!!!");
+		String token = null;
+		String result = null;
+
+		OkHttpClient client = new OkHttpClient();
+		//获得token
+		Request request = new Request.Builder().url("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx0a0feca24b695636&secret=b3efb530f9ef97626e2ec31fc7a3af56").build();
+		try {
+
+			Response responseToken = client.newCall(request).execute();
+			//如果请求成功,解析数据
+			if (responseToken.isSuccessful()) {
+				String body = responseToken.body().string();
+				//得到一个JSON对象
+				JSONObject object = JSON.parseObject(body);
+				String accessToken = object.getString("access_token");
+				if (ObjectUtil.isNotEmpty(accessToken)) {
+					log.info("通过code获取token异常:" + object.toJSONString());
+					token = accessToken;
+				} else {
+					throw new RuntimeException("access_token获取失败");
+				}
+			}
+		} catch (IOException e) {
+			e.printStackTrace();
+			log.info("用户获取token异常:" + e);
+		}
+		//整体参数map
+		Map<String, Object> paramMap = new HashMap<>();
+		//消息主题显示map
+		Map<String, Object> dataMap = new HashMap<>();
+
+		dataMap.put("date1", loadingTime);
+		dataMap.put("thing2", details);
+		dataMap.put("number3", number);
+		paramMap.put("touser", openId);
+		paramMap.put("template_id", "GGYopU4NGV055HSSY5SeeaAGKGjP1fXFV3Vag0O7POM");
+		paramMap.put("data", dataMap);
+
+		try {
+			// 构建Request请求对象
+			log.info("JSON====="+JSON.toJSONString(paramMap));
+			RequestBody body = RequestBody.create(MediaType.parse("application/xml;charset=utf-8"), JSON.toJSONString(paramMap));
+			Request requestTwo = new Request.Builder().url("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + token).post(body).build();
+			// 请求接口,拿到token信息
+			Response response = client.newCall(requestTwo).execute();
+			System.out.println("拿到结果了:" + body);
+			// 判断成功与否
+			if (response.isSuccessful()) {
+				// 拿到相应结果
+				result = response.body().string();
+				//得到一个JSON对象
+				JSONObject object = JSON.parseObject(result);
+				log.info("返回信息====="+object);
+				if (object.getString("errcode").equals("40003")) {
+					throw new RuntimeException("touser字段 openid 为空或者不正确");
+				} else if (object.getString("errcode").equals("40037")) {
+					throw new RuntimeException("订阅模板 id 为空不正确");
+				}else if (object.getString("errcode").equals("47003")) {
+					throw new RuntimeException("模板参数不准确,可能为空或者不满足规则" + object.get("errmsg"));
+				}else {
+					throw new RuntimeException("不合法的telCode(telCode不存在、已过期或者使用过)");
+				}
+			}
+		} catch (Exception e) {
+			throw new SecurityException("发送失败" + e.getMessage());
+		}
+		return result;
+	}*/
+
+		@Override
+		public String newsPush(String openId, String loadingTime, String details, String number) {
+		//1,配置
+		WxMpInMemoryConfigStorage wxStorage = new WxMpInMemoryConfigStorage();
+		wxStorage.setAppId("wxf077390a6ec17f23");
+		wxStorage.setSecret("50e84930675a0c06057d45a6d64ec548");
+		WxMpService wxMpService = new WxMpServiceImpl();
+		wxMpService.setWxMpConfigStorage(wxStorage);
+
+		List<WxMpTemplateData> data = Arrays.asList(
+			new WxMpTemplateData("date1", loadingTime),
+			new WxMpTemplateData("thing2", details),
+			new WxMpTemplateData("number3", number)
+		);
+		//2,推送消息
+		WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
+			//.toUser(openId)//要推送的用户openid
+			.toUser("oyHoI6kh6AMgN2F8WHIp6YPdqvAI")//要推送的用户openid
+			.templateId("GGYopU4NGV055HSSY5SeeaAGKGjP1fXFV3Vag0O7POM")//模版id
+			.url("https://www.baidu.com/")//点击模版消息要访问的网址
+			.data(data)
+			.build();
+		try {
+			wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
+		} catch (Exception e) {
+			System.out.println("推送失败:" + e.getMessage());
+			e.printStackTrace();
+		}
+
+		return null;
+	}
+
+}

+ 53 - 13
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/DeliveryController.java

@@ -31,7 +31,9 @@ import javax.validation.Valid;
 
 import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.entity.StorageDesc;
+import org.springblade.client.entity.StorageType;
 import org.springblade.client.feign.ICorpsDescClient;
+import org.springblade.client.feign.IRedisClient;
 import org.springblade.client.feign.IStorageClient;
 import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
@@ -41,6 +43,7 @@ import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.deliver.goods.entity.DeliveryItems;
 import org.springblade.deliver.goods.enums.DeliveryEnum;
 import org.springblade.deliver.goods.enums.DeliveryStatusEnum;
@@ -53,6 +56,7 @@ import org.springblade.purchase.sales.vo.OrderVO;
 import org.springblade.purchase.sales.vo.SalesDetailsVo;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.deliver.goods.entity.Delivery;
@@ -60,6 +64,7 @@ import org.springblade.deliver.goods.vo.DeliveryVO;
 import org.springblade.deliver.goods.service.IDeliveryService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -82,6 +87,8 @@ public class DeliveryController extends BladeController {
 	private final IDeliveryItemsService deliveryItemsService;
 	private final IDeliveryFeesService deliveryFeesService;
 	private final IDeliveryFilesService deliveryFilesService;
+	private final RedisTemplate<String, Object> redisTemplate;
+	private final IRedisClient redisClient;//redis缓存处理
 	/**
 	 * 详情
 	 */
@@ -125,28 +132,40 @@ public class DeliveryController extends BladeController {
 		lambdaQueryWrapper.le(Func.isNotEmpty(delivery.getArrivalEndTime()),Delivery::getArrivalTime,delivery.getArrivalEndTime());//确认到货日期结束
 		lambdaQueryWrapper.orderByDesc(Delivery::getId);
 		IPage<Delivery> pages = deliveryService.page(Condition.getPage(query), lambdaQueryWrapper);
+
+		redisClient.basicData("all");
+		List<CorpsDesc> corpsDescList = castToList(redisTemplate.opsForValue().get("corps"), CorpsDesc.class);
+		List<User> userList = castToList(redisTemplate.opsForValue().get("user"), User.class);
+
 		if (CollectionUtils.isNotEmpty(pages.getRecords())){
 			pages.getRecords().forEach(item ->{
 				if (item.getCorpId() != null){
-					R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(item.getCorpId());
-					if (corpMessage.isSuccess() && corpMessage.getData() != null){
-						item.setCorpsName(corpMessage.getData().getCname());
+					CorpsDesc corpMessage = corpsDescList.stream().filter(corps -> corps.getId().equals(item.getCorpId())).findFirst().orElse(null);
+					/*R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(item.getCorpId());*/
+					if (ObjectUtil.isNotEmpty(corpMessage)){
+						item.setCorpsName(corpMessage.getCname());
 					}
 				}
 				if (item.getSalesCompany() != null){
-					R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(item.getSalesCompany());
-					if (corpMessage.isSuccess() && corpMessage.getData() != null){
-						item.setSalesCompanyName(corpMessage.getData().getCname());
+					CorpsDesc corpMessage = corpsDescList.stream().filter(corps -> corps.getId().equals(item.getSalesCompany())).findFirst().orElse(null);
+					/*R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(item.getSalesCompany());*/
+					if (ObjectUtil.isNotEmpty(corpMessage)){
+						item.setSalesCompanyName(corpMessage.getCname());
 					}
 				}
-				R<User> user = iUserClient.userInfoById(item.getCreateUser());
-				if (user.isSuccess() && user.getData() != null){
-					item.setCreateUserName(user.getData().getName());
+				if (item.getCreateUser() != null){
+					User user = userList.stream().filter(e -> e.getId().equals(item.getCreateUser())).findFirst().orElse(null);
+					/*R<User> user = iUserClient.userInfoById(item.getCreateUser());*/
+					if (ObjectUtil.isNotEmpty(user)){
+						item.setCreateUserName(user.getName());
+					}
 				}
-
-				R<User> user1 = iUserClient.userInfoById(item.getUpdateUser());
-				if (user1.isSuccess() && user1.getData() != null){
-					item.setUpdateUserName(user1.getData().getName());
+				if (item.getUpdateUser() != null){
+					User user1 = userList.stream().filter(e -> e.getId().equals(item.getUpdateUser())).findFirst().orElse(null);
+					/*R<User> user1 = iUserClient.userInfoById(item.getUpdateUser());*/
+					if (ObjectUtil.isNotEmpty(user1)){
+						item.setUpdateUserName(user1.getName());
+					}
 				}
 				//仓库信息
 				StorageDesc storageDesc = iStorageClient.findById(item.getStorageId());
@@ -381,4 +400,25 @@ public class DeliveryController extends BladeController {
 		return R.data(delivery);
 	}
 
+	/**
+	 * 将Object转换成List类型
+	 *
+	 * @param obj   Object对象
+	 * @param clazz 数据类型
+	 * @param <T>   泛型类型
+	 * @return List类型
+	 */
+	public static <T> List<T> castToList(Object obj, Class<T> clazz) {
+		List<T> resList = new ArrayList<>();
+		// 如果不是List<?>对象,是没有办法转换的
+		if (obj instanceof List<?>) {
+			for (Object o : (List<?>) obj) {
+				// 将对应的元素进行类型转换
+				resList.add(clazz.cast(o));
+			}
+			return resList;
+		}
+		return resList;
+	}
+
 }

+ 2 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/BidingItemsServiceImpl.java

@@ -72,9 +72,10 @@ public class BidingItemsServiceImpl extends ServiceImpl<BidingItemsMapper, Bidin
 					throw new SecurityException("投标信息只允许修改一次");
 				}
 			}
-			bidingAgent.setStatus(5);
+
 			if (ObjectUtil.isNotEmpty(bidingAgent)){
 				//更新代理明细信息
+				bidingAgent.setStatus(5);
 				bidingAgentMapper.updateById(bidingAgent);
 			}
 		}

+ 41 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/BidingServiceImpl.java

@@ -1,6 +1,9 @@
 package org.springblade.purchase.sales.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import io.seata.common.util.CollectionUtils;
@@ -12,7 +15,10 @@ import org.springblade.check.entity.AuditPathsLevels;
 import org.springblade.check.feign.ICheckClient;
 import org.springblade.client.entity.CorpsAttn;
 import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.feign.ICorpsAttnClient;
+import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.ISerialClient;
+import org.springblade.client.feign.IWechatClient;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.AuthUtil;
@@ -26,6 +32,8 @@ import org.springblade.purchase.sales.entity.BidingAgent;
 import org.springblade.purchase.sales.entity.BidingItems;
 import org.springblade.purchase.sales.mapper.BidingMapper;
 import org.springblade.purchase.sales.service.IBidingService;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
@@ -48,6 +56,10 @@ public class BidingServiceImpl extends ServiceImpl<BidingMapper, Biding> impleme
 	private final BidingAgentServiceImpl bidingAgentService;//代理信息
 	private ISerialClient serialClient;//生成系统编号
 	private final ICheckClient iCheckClient;//审批
+	private final ICorpsDescClient corpsDescClient;//获得客户信息
+	private final IUserClient userClient;//获得用户信息
+	private ICorpsAttnClient corpsAttnClient;//客户联系人
+	private final IWechatClient wechatClient;//微信
 
 	/**
 	 * 获得标书详情
@@ -242,6 +254,7 @@ public class BidingServiceImpl extends ServiceImpl<BidingMapper, Biding> impleme
 	 * @return
 	 */
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public void release(Biding biding){
 		Biding salesBiding = baseMapper.selectById(biding.getId());
 		if (salesBiding == null){
@@ -254,7 +267,34 @@ public class BidingServiceImpl extends ServiceImpl<BidingMapper, Biding> impleme
 			throw new SecurityException("订单已作废");
 		}
 
-		salesBiding.setStatus(4);
+		//装柜日期
+		String loadingTime = salesBiding.getLoadingTime().toString();
+		//发送详情
+		String details = salesBiding.getDepartureHarbor() + "-->" + salesBiding.getObjectiveHarbor();
+		//件数
+		String number = salesBiding.getNumber().toString();
+
+		//根据代理客户的客户联系人进行消息推送
+		//获得所有代理客户
+		/*List<BidingAgent> agentList = bidingAgentService.getBidingAgent(salesBiding);;
+		agentList.forEach(e -> {
+			//获得客户
+			CorpsDesc corpsDesc = corpsDescClient.getCorpId(e.getAgentId());
+			//获得客户的所有客户联系人
+			List<CorpsAttn> attnList = corpsAttnClient.getAttn(corpsDesc.getId());
+			attnList.forEach(corpsAttn -> {
+				//获得用户信息
+				R<User> user = userClient.userInfoById(corpsAttn.getUserId());
+				if (ObjectUtil.isNotEmpty(user)){
+					if (ObjectUtil.isNotEmpty(user.getData().getOpenId())){
+						String msg = wechatClient.newsPush(user.getData().getOpenId(), loadingTime, details, number);
+						System.out.println("msg====="+msg);
+					}
+				}
+			});
+		});*/
+
+		//salesBiding.setStatus(4);
 		baseMapper.updateById(salesBiding);
 	}
 

+ 18 - 82
blade-service/trade-finance/src/main/java/org/springblade/finance/controller/AccController.java

@@ -123,10 +123,24 @@ public class AccController extends BladeController {
 	public R<IPage<Acc>> list(Acc acc, Query query) {
 		LambdaQueryWrapper<Acc> accLambdaQueryWrapper = new LambdaQueryWrapper<>();
 
-		if (acc.getFlag() != null && acc.getFlag() == 1) {
-			accLambdaQueryWrapper.apply(" Amount > Settlement_Amount");
-		} else if (acc.getFlag() != null && acc.getFlag() == 2) {
-			accLambdaQueryWrapper.apply(" Amount > Invoice_Amount");
+		if (ObjectUtil.isNotEmpty(acc.getSrcParentId())){
+			if (acc.getFlag() != null && acc.getFlag() == 1) {
+				accLambdaQueryWrapper.apply(" Amount >= Settlement_Amount");
+			} else if (acc.getFlag() != null && acc.getFlag() == 2) {
+				accLambdaQueryWrapper.apply(" Amount >= Invoice_Amount");
+			}
+		}else if (ObjectUtil.isNotEmpty(acc.getCorpId())){
+			if (acc.getFlag() != null && acc.getFlag() == 1) {
+				accLambdaQueryWrapper.apply(" Amount > Settlement_Amount");
+			} else if (acc.getFlag() != null && acc.getFlag() == 2) {
+				accLambdaQueryWrapper.apply(" Amount > Invoice_Amount");
+			}
+		}else {
+			if (acc.getFlag() != null && acc.getFlag() == 1) {
+				accLambdaQueryWrapper.apply(" Amount >= Settlement_Amount");
+			} else if (acc.getFlag() != null && acc.getFlag() == 2) {
+				accLambdaQueryWrapper.apply(" Amount >= Invoice_Amount");
+			}
 		}
 
 		accLambdaQueryWrapper.between(StringUtils.isNotBlank(acc.getCreateStartDate()) && StringUtils.isNotBlank(acc.getCreateEndDate()), Acc::getCreateTime, acc.getCreateStartDate(), acc.getCreateEndDate())
@@ -505,84 +519,6 @@ public class AccController extends BladeController {
 	}
 
 	/**
-	 * 分页 销售账单处理显示
-	 */
-	@GetMapping("/billList")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "分页", notes = "传入acc")
-	public R<IPage<Acc>> billList(Acc acc, Query query) {
-		LambdaQueryWrapper<Acc> accLambdaQueryWrapper = new LambdaQueryWrapper<>();
-
-		if (acc.getFlag() != null && acc.getFlag() == 1) {
-			accLambdaQueryWrapper.apply(" Amount >= Settlement_Amount");
-		} else if (acc.getFlag() != null && acc.getFlag() == 2) {
-			accLambdaQueryWrapper.apply(" Amount >= Invoice_Amount");
-		}
-
-		accLambdaQueryWrapper.between(StringUtils.isNotBlank(acc.getCreateStartDate()) && StringUtils.isNotBlank(acc.getCreateEndDate()), Acc::getCreateTime, acc.getCreateStartDate(), acc.getCreateEndDate())
-			.like(StringUtils.isNotBlank(acc.getBillType()), Acc::getBillType, acc.getBillType())
-			.like(StringUtils.isNotBlank(acc.getAccSysNo()), Acc::getAccSysNo, acc.getAccSysNo())
-			.like(StringUtils.isNotBlank(acc.getSrcBillNo()), Acc::getSrcBillNo, acc.getSrcBillNo())
-			.eq(acc.getCorpId() != null, Acc::getCorpId, acc.getCorpId())
-			.eq(StringUtils.isNotBlank(acc.getItemType()), Acc::getItemType, acc.getItemType())
-			.eq(StringUtils.isNotBlank(acc.getCostType()), Acc::getCostType, acc.getCostType())
-			.eq(acc.getCreateUser() != null, Acc::getCreateUser, acc.getCreateUser())
-			.eq(acc.getSrcParentId() != null, Acc::getSrcParentId, acc.getSrcParentId())
-			.eq(StringUtils.isNotBlank(acc.getDc()), Acc::getDc, acc.getDc());
-		accLambdaQueryWrapper.gt(acc.getCheckStatus() != null && acc.getCheckStatus() == 1, Acc::getCheckAmount, 0)
-			.eq(acc.getCheckStatus() != null && acc.getCheckStatus() == 2, Acc::getCheckAmount, 0)
-			.gt(acc.getCheckStatus() != null && acc.getCheckStatus() == 1, Acc::getSettlementAmount, 0)
-			.eq(acc.getCheckStatus() != null && acc.getCheckStatus() == 2, Acc::getSettlementAmount, 0)
-			.gt(acc.getCheckStatus() != null && acc.getCheckStatus() == 1, Acc::getInvoiceAmount, 0)
-			.eq(acc.getCheckStatus() != null && acc.getCheckStatus() == 2, Acc::getInvoiceAmount, 0);
-
-		accLambdaQueryWrapper.eq(Acc::getTenantId, SecureUtil.getTenantId())
-			.eq(Acc::getIsDeleted, 0);
-		if (acc.getSettlementStatus() != null && acc.getSettlementStatus() == 1) {
-			accLambdaQueryWrapper.apply("Amount = Settlement_Amount");
-		} else if (acc.getSettlementStatus() != null && acc.getSettlementStatus() == 2) {
-			accLambdaQueryWrapper.apply("Amount != Settlement_Amount");
-		}
-		if ("673511".equals(AuthUtil.getTenantId())) {
-			accLambdaQueryWrapper.ge(ObjectUtils.isNotNull(acc.getCreateStartDate()), Acc::getSrcDate, acc.getCreateStartDate())
-				.le(ObjectUtils.isNotNull(acc.getCreateEndDate()), Acc::getSrcDate, acc.getCreateEndDate());
-		}
-		accLambdaQueryWrapper.eq(Acc::getStatus, 0);
-		accLambdaQueryWrapper.orderByDesc(Acc::getCreateTime);
-		IPage<Acc> pages = accService.page(Condition.getPage(query), accLambdaQueryWrapper);
-		String corpIds = "";
-		for (Acc accOne : pages.getRecords()) {
-			if (ObjectUtil.isNotEmpty(accOne.getCorpId())) {
-				corpIds = corpIds + accOne.getCorpId() + ",";
-			}
-		}
-		List<CorpsDesc> corpsDescList = corpsDescClient.selectByCorpIds(corpIds);
-		pages.getRecords().forEach(e -> {
-			//录入人
-			e.setCreateUserName(iUserClient.userInfoById(e.getCreateUser()).getData().getRealName());
-			//费用名称
-			if (StringUtils.isNotBlank(e.getCostType())) {
-				R<FeesDesc> detail = iFeesDescClient.detail(Long.valueOf(e.getCostType()));
-				if (detail.isSuccess() && detail.getData() != null) {
-					e.setItemName(detail.getData().getCname());
-				}
-			}
-			//客户名称
-			if (e.getCorpId() != null) {
-				if (ObjectUtil.isNotEmpty(corpsDescList)) {
-					CorpsDesc corpsDesc = corpsDescList.stream().filter(d -> d.getId().equals(e.getCorpId())).findFirst().orElse(null);
-					if (ObjectUtils.isNotNull(corpsDesc)) {
-						e.setCorpName(corpsDesc.getCname());
-					}
-				}
-			}
-			e.setOutstandingAmount(e.getAmount().subtract(e.getSettlementAmount()));
-		});
-		return R.data(pages);
-	}
-
-
-	/**
 	 * 查询账单详情(通过单据id)
 	 */
 	@GetMapping("/selectBySrcId")

+ 3 - 2
blade-service/trade-finance/src/main/java/org/springblade/finance/excel/ExpenseExcel.java

@@ -7,6 +7,7 @@ import com.alibaba.excel.annotation.write.style.HeadRowHeight;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.Date;
 
 /**
  * 付费收费导出
@@ -47,7 +48,7 @@ public class ExpenseExcel implements Serializable {
 	 * 结算日期
 	 */
 	@ExcelProperty(value = "结算日期")
-	private String settlementDate;
+	private Date settlementDate;
 
 	/**
 	 * 银行名称
@@ -77,5 +78,5 @@ public class ExpenseExcel implements Serializable {
 	 * 单据完成日期
 	 */
 	@ExcelProperty(value = "单据完成日期")
-	private String completionTime;
+	private Date completionTime;
 }

+ 16 - 1
blade-service/trade-purchase/src/main/java/com/trade/purchase/extra/service/impl/ClaimServiceImpl.java

@@ -130,10 +130,25 @@ public class ClaimServiceImpl extends ServiceImpl<ClaimMapper, Claim> implements
 			.between(StringUtil.isNotBlank(claim.getBeginClaimDate()) && StringUtil.isNotBlank(claim.getEndClaimDate()),
 				Claim::getClaimDate, claim.getBeginClaimDate(), claim.getEndClaimDate())
 			.eq(ObjectUtil.isNotEmpty(claim.getUserId()), Claim::getUserId, claim.getUserId())
+			.eq(ObjectUtil.isNotEmpty(claim.getBelongToCorpId()), Claim::getBelongToCorpId, claim.getBelongToCorpId())
+			.eq(ObjectUtil.isNotEmpty(claim.getStatus()),Claim::getStatus, claim.getStatus())
 			.eq(Claim::getTenantId, AuthUtil.getTenantId())
 			.eq(Claim::getIsDeleted, 0)
 			.orderByDesc(Claim::getCreateTime);
-		return baseMapper.selectPage(Condition.getPage(query), leadsQueryWrapper);
+
+		IPage<Claim> page = baseMapper.selectPage(Condition.getPage(query), leadsQueryWrapper);
+
+		if (ObjectUtil.isNotEmpty(page)){
+			page.getRecords().forEach(e -> {
+				//获得所属公司名称
+				R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(e.getBelongToCorpId());
+				if (corpMessage.isSuccess() && corpMessage.getData() != null) {
+					e.setBelongToCorpName(corpMessage.getData().getCname());
+				}
+			});
+		}
+
+		return page;
 	}
 
 	@Override

+ 2 - 1
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/service/impl/OrderServiceImpl.java

@@ -813,7 +813,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		List<StorageDesc> storageDescList = castToList(redisTemplate.opsForValue().get("storageDesc"), StorageDesc.class);
 		// 查询订单明细信息
 		List<OrderItems> orderItemsList = orderItemsService.list(Wrappers.<OrderItems>lambdaQuery()
-			.eq(OrderItems::getPid, orderId).eq(OrderItems::getTenantId, SecureUtil.getTenantId())
+			.eq(OrderItems::getPid, orderId)
+			.eq(OrderItems::getTenantId, SecureUtil.getTenantId())
 //			.eq(OrderItems::getIsDeleted, 0).eq(Func.isNotEmpty(createId), OrderItems::getCreateUser, createId).orderByAsc(OrderItems::getSort));
 			.eq(OrderItems::getIsDeleted, 0).orderByAsc(OrderItems::getSort));
 		// 获取商品id、名称用于匹配明细汉字