Browse Source

Merge remote-tracking branch 'origin/dev' into dev

lijunping 3 years ago
parent
commit
089464103c
21 changed files with 381 additions and 124 deletions
  1. 5 3
      blade-service-api/blade-land-api/src/main/java/org/springblade/land/constant/LandConst.java
  2. 16 0
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/feign/IOrderCheckClient.java
  3. 18 1
      blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/enums/OrderTypeEnum.java
  4. 5 4
      blade-service/blade-check/src/main/java/org/springblade/check/controller/AuditProecessController.java
  5. 9 10
      blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditProecessServiceImpl.java
  6. 1 1
      blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsAttnServiceImpl.java
  7. 1 1
      blade-service/blade-client/src/main/java/org/springblade/client/land/service/impl/LandDriverServiceImpl.java
  8. 18 0
      blade-service/blade-client/src/main/java/org/springblade/client/serial/mapper/SerialMapper.java
  9. 13 0
      blade-service/blade-client/src/main/java/org/springblade/client/serial/mapper/SerialMapper.xml
  10. 1 1
      blade-service/blade-client/src/main/java/org/springblade/client/serial/service/impl/SerialServiceImpl.java
  11. 2 1
      blade-service/blade-land/src/main/java/org/springblade/land/controller/TrackLogController.java
  12. 2 1
      blade-service/blade-land/src/main/java/org/springblade/land/service/ITrackLogService.java
  13. 20 17
      blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderAddressServiceImpl.java
  14. 24 17
      blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderServiceImpl.java
  15. 14 6
      blade-service/blade-land/src/main/java/org/springblade/land/service/impl/TrackLogServiceImpl.java
  16. 21 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/AgencyOrderController.java
  17. 2 17
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/excel/OrderItemsExcel.java
  18. 12 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IOrderService.java
  19. 149 2
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java
  20. 41 33
      blade-service/trade-finance/src/main/java/org/springblade/finance/service/impl/SettlementServiceImpl.java
  21. 7 9
      blade-service/trade-purchase/src/main/java/com/trade/purchase/order/service/impl/PurchaseServiceImpl.java

+ 5 - 3
blade-service-api/blade-land-api/src/main/java/org/springblade/land/constant/LandConst.java

@@ -11,11 +11,13 @@ public interface LandConst {
 
 	String TRACK_TOKEN = "track:token:";
 
-	String TRACK_LOGIN_URL = "https://openapi-test.sinoiov.cn/save/apis/login";
+	String TRACK_URL = "https://zhiyunopenapi.95155.com/save/apis";
 
-	String TRACK_LOCATION_URL = "https://openapi-test.sinoiov.cn/save/apis/transTimeManage";
+	String TRACK_LOGIN_URL = TRACK_URL + "/login";
 
-	String TRACK_TRACK_URL = "https://openapi-test.sinoiov.cn/save/apis/routerPath";
+	String TRACK_LOCATION_URL = TRACK_URL + "/transTimeManage";
+
+	String TRACK_TRACK_URL = TRACK_URL + "/routerPath";
 
 	String TRACK_REQ_SUCCESS = "1001";
 

+ 16 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/feign/IOrderCheckClient.java

@@ -30,4 +30,20 @@ public interface IOrderCheckClient {
 
 	@PostMapping("order/underSpecialReview")
 	R underSpecialReview(@RequestParam("id") Long id);
+
+	/**
+	 * 平台订单审核通过
+	 * @param id
+	 * @return
+	 */
+	@PostMapping("/agencyOrder/approve")
+	R approve(@RequestParam("id") Long id);
+
+	/**
+	 * 平台订单审核驳回
+	 * @param id
+	 * @return
+	 */
+	@PostMapping("/agencyOrder/reject")
+	R reject(@RequestParam("id") Long id);
 }

+ 18 - 1
blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/enums/OrderTypeEnum.java

@@ -75,9 +75,26 @@ public enum OrderTypeEnum {
 	/**
 	 * 经销商
 	 */
-	DEALER("JXS")
+	DEALER("JXS"),
 
+	/**
+	 * 录入
+	 */
+	ENTERING("录入"),
+	/**
+	 * 提交审批
+	 */
+	SUBMIT("提交审批"),
 
+	/**
+	 * 审批中
+	 */
+	APPROVE("审批中"),
+
+	/**
+	 * 审批通过
+	 */
+	PASS("审批通过"),
 
 	;
 

+ 5 - 4
blade-service/blade-check/src/main/java/org/springblade/check/controller/AuditProecessController.java

@@ -226,16 +226,17 @@ public class AuditProecessController extends BladeController {
 		else if ("xsgz".equals(proecess.getCheckType()) || "czgz".equals(proecess.getCheckType()) || "gzgz".equals(proecess.getCheckType()) || "hqgz".equals(proecess.getCheckType())) {
 			auditProecessService.salaryCheck(auditProecess);
 		}
+		//平台代理订单审核
+		else if ("dldd".equals(proecess.getCheckType())) {
+				auditProecessService.agencyOrderProcess(auditProecess);
+		}
 		// 办公用品采购
 		else if ("ocg".equals(proecess.getCheckType()) || "oly".equals(proecess.getCheckType())) {
 			auditProecessService.officeCheck(auditProecess);
 		} else {
 			auditProecessService.commonCheck(auditProecess);
 		}
-		//平台代理订单审核
-		if ("dldd".equals(proecess.getCheckType())) {
-			auditProecessService.agencyOrderProcess(auditProecess);
-		}
+
 		return R.data(auditProecess);
 	}
 

+ 9 - 10
blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditProecessServiceImpl.java

@@ -1536,9 +1536,11 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class,timeoutMills = 12000000)
 	public void agencyOrderProcess(AuditProecess auditProecess) {
 		//查看最新操作记录,防止重复提交
-		/*AuditProecess proecessTemp = baseMapper.selectById(auditProecess.getId());
+		AuditProecess proecessTemp = baseMapper.selectById(auditProecess.getId());
 		if (proecessTemp == null) {
 			throw new SecurityException("未查到此审批记录,禁止操作");
 		}
@@ -1579,10 +1581,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 			if (operate == 1) {
 				//如果是第一级, 则修改状态为审批中
 				if (auditProecess.getLevelId() == 1) {
-					Settlement settlement = new Settlement();
-					settlement.setId(auditProecess.getSrcBillId());
-					settlement.setCheckStatus("审批中");
-					R submit = financeClient.submit(settlement);
+					R submit = orderCheckClient.underReview(auditProecess.getSrcBillId());
 					if (!submit.isSuccess()) {
 						throw new SecurityException("审批开始修改审核状态失败");
 					}
@@ -1651,9 +1650,9 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 			else if (operate == 2) {
 				auditProecess.setAuditStatus("B");
 				//todo 调用feign取消
-				R r = financeClient.passCancel(auditProecess.getSrcBillId());
+				R r = orderCheckClient.reject(auditProecess.getSrcBillId());
 				if (!r.isSuccess()) {
-					throw new SecurityException("修改财务数据失败");
+					throw new SecurityException("修改订单数据失败");
 				}
 
 				sendMessage.setMessageBody("您的代理订单审核未通过" + ",代理订单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
@@ -1670,7 +1669,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 			if (operate == 1) {
 				//todo 调用feign直接通过
 				auditProecess.setAuditStatus("A");
-				R r = financeClient.passCheck(auditProecess.getSrcBillId());
+				R r = orderCheckClient.approve(auditProecess.getSrcBillId());
 				if (!r.isSuccess()) {
 					throw new SecurityException("修改财务数据失败");
 				}
@@ -1685,7 +1684,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 			else if (operate == 2) {
 				//todo 调用feign取消
 				auditProecess.setAuditStatus("B");
-				R r = financeClient.passCancel(auditProecess.getSrcBillId());
+				R r = orderCheckClient.reject(auditProecess.getSrcBillId());
 				if (!r.isSuccess()) {
 					throw new SecurityException("修改财务数据失败");
 				}
@@ -1704,7 +1703,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 		//保存操作记录
 		auditProecess.setAuditMsg(auditProecess.getAuditMsg());
 		auditProecess.setAuditItem(new Date());
-		baseMapper.updateById(auditProecess);*/
+		baseMapper.updateById(auditProecess);
 	}
 
 	private void sendMsgToGroup(Message message, String group) {

+ 1 - 1
blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsAttnServiceImpl.java

@@ -91,7 +91,7 @@ public class CorpsAttnServiceImpl extends ServiceImpl<CorpsAttnMapper, CorpsAttn
 				throw new ServiceException(result.getMsg());
 			}
 
-			R<User> userTemp = userClient.userByAccount(AuthUtil.getTenantId(), attn.getCname());
+			R<User> userTemp = userClient.userByAccount(AuthUtil.getTenantId(), attn.getTel());
 			if (!userTemp.isSuccess()) {
 				throw new ServiceException(userTemp.getMsg());
 			}

+ 1 - 1
blade-service/blade-client/src/main/java/org/springblade/client/land/service/impl/LandDriverServiceImpl.java

@@ -197,7 +197,7 @@ public class LandDriverServiceImpl extends ServiceImpl<LandDriverMapper, LandDri
 				throw new ServiceException(result.getMsg());
 			}
 
-			R<User> userTemp = userClient.userByAccount(AuthUtil.getTenantId(), driver.getName());
+			R<User> userTemp = userClient.userByAccount(AuthUtil.getTenantId(), driver.getTel());
 			if (!userTemp.isSuccess()) {
 				throw new ServiceException(userTemp.getMsg());
 			}

+ 18 - 0
blade-service/blade-client/src/main/java/org/springblade/client/serial/mapper/SerialMapper.java

@@ -16,6 +16,8 @@
  */
 package org.springblade.client.serial.mapper;
 
+import com.baomidou.mybatisplus.annotation.SqlParser;
+import org.apache.ibatis.annotations.Param;
 import org.springblade.client.entity.Serial;
 import org.springblade.client.vo.SerialVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -39,4 +41,20 @@ public interface SerialMapper extends BaseMapper<Serial> {
 	 */
 	List<SerialVO> selectSerialPage(IPage page, SerialVO serial);
 
+	/**
+	 * 查询系统编号
+	 * @param billType 单据类型
+	 * @param tradeType  贸易类型(枚举:国内、进口、出口)
+	 * @param billPrefix 单据前缀
+	 * @param tenantId 租户id
+	 * @param serialType 模块类型
+	 * @return
+	 */
+	@SqlParser(filter=true)
+	Serial selectSerial(@Param("billType") String billType,
+						@Param("tradeType") String tradeType,
+						@Param("billPrefix") String billPrefix,
+						@Param("tenantId") String tenantId,
+						@Param("serialType") String serialType);
+
 }

+ 13 - 0
blade-service/blade-client/src/main/java/org/springblade/client/serial/mapper/SerialMapper.xml

@@ -25,5 +25,18 @@
     <select id="selectSerialPage" resultMap="serialResultMap">
         select * from basic_serial where is_deleted = 0
     </select>
+    <select id="selectSerial" resultMap="serialResultMap">
+        SELECT
+	        *
+        FROM
+	        basic_serial
+        WHERE
+	        is_deleted = 0
+	        AND bill_type = #{billType}
+	        AND bill_prefix = #{billPrefix}
+	        AND tenant_id = #{tenantId}
+	        AND trade_type = #{tradeType}
+	        AND serial_type = #{serialType}
+    </select>
 
 </mapper>

+ 1 - 1
blade-service/blade-client/src/main/java/org/springblade/client/serial/service/impl/SerialServiceImpl.java

@@ -121,7 +121,7 @@ public class SerialServiceImpl extends ServiceImpl<SerialMapper, Serial> impleme
 		billNoSerial.setTenantId(tenantId);
 		billNoSerial.setIsDeleted(0);
 		billNoSerial.setSerialType(serialType);
-		Serial serial = baseMapper.selectOne(new QueryWrapper<Serial>().setEntity(billNoSerial));
+		Serial serial = baseMapper.selectSerial(type,tradeType,yyyyMM,tenantId,serialType);
 		if (tradeType.equals("CK")){
 			yyyyMM = DateFormatUtils.format(date, "yyMMdd");
 			if (serial != null) {

+ 2 - 1
blade-service/blade-land/src/main/java/org/springblade/land/controller/TrackLogController.java

@@ -34,6 +34,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 陆运订单轨迹表 控制器
@@ -77,7 +78,7 @@ public class TrackLogController extends BladeController {
 	@GetMapping("/location")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "陆运定位", notes = "传入trackLog")
-	public R<List<Double>> location(TrackLog trackLog) {
+	public R<Map<String, Object>> location(TrackLog trackLog) {
 		return R.data(trackLogService.location(trackLog));
 	}
 

+ 2 - 1
blade-service/blade-land/src/main/java/org/springblade/land/service/ITrackLogService.java

@@ -22,6 +22,7 @@ import org.springblade.land.entity.TrackLog;
 import org.springblade.land.vo.TrackLogVO;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 陆运轨迹日志表 服务类
@@ -46,7 +47,7 @@ public interface ITrackLogService extends IService<TrackLog> {
 	 * @param trackLog
 	 * @return
 	 */
-	List<Double> location(TrackLog trackLog);
+	Map<String, Object> location(TrackLog trackLog);
 
 	/**
 	 * 获取轨迹

+ 20 - 17
blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderAddressServiceImpl.java

@@ -69,25 +69,28 @@ public class OrderAddressServiceImpl extends ServiceImpl<OrderAddressMapper, Ord
 			int i = 1;
 			StringBuilder addressDetail = new StringBuilder();
 			for (OrderAddress address : addressList) {
-				if (ObjectUtil.isNotEmpty(address.getCorpId()) && StringUtil.isNotBlank(address.getCorpName())) {
-					addressDetail.append(i).append(".").append(address.getCorpName()).append("(");
-				} else {
-					addressDetail.append(i).append(".").append("(");
-				}
+				if (ObjectUtil.isNotEmpty(address.getCorpId()) || StringUtil.isNotBlank(address.getContacts())
+					|| StringUtil.isNotBlank(address.getTel()) || StringUtil.isNotBlank(address.getAddress())) {
+					if (ObjectUtil.isNotEmpty(address.getCorpId()) && StringUtil.isNotBlank(address.getCorpName())) {
+						addressDetail.append(i).append(".").append(address.getCorpName()).append("(");
+					} else {
+						addressDetail.append(i).append(".").append("(");
+					}
 
-				if (StringUtil.isNotBlank(address.getContacts())) {
-					addressDetail.append(address.getContacts());
-				}
-				if (StringUtil.isNotBlank(address.getTel())) {
-					addressDetail.append(" ").append(address.getTel());
-				}
-				if (StringUtil.isNotBlank(address.getAddress())) {
-					addressDetail.append(") ").append(address.getAddress()).append("\n");
-				} else {
-					addressDetail.append(") ").append("\n");
-				}
+					if (StringUtil.isNotBlank(address.getContacts())) {
+						addressDetail.append(address.getContacts());
+					}
+					if (StringUtil.isNotBlank(address.getTel())) {
+						addressDetail.append(" ").append(address.getTel());
+					}
+					if (StringUtil.isNotBlank(address.getAddress())) {
+						addressDetail.append(") ").append(address.getAddress()).append("\n");
+					} else {
+						addressDetail.append(") ").append("\n");
+					}
 
-				i++;
+					i++;
+				}
 			}
 
 			Order order = new Order();

+ 24 - 17
blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderServiceImpl.java

@@ -571,6 +571,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		StringBuilder addressDetail = new StringBuilder();
 		dealExtraInfo(order, addressDetail);
 
+		if (CollectionUtil.isNotEmpty(itemList)) {
+			order.setArrivalTime(itemList.get(0).getArrivalTime());
+		}
+
 		order.setFreight(freight);
 		if (addressDetail.length() > 0) {
 			order.setAddressDetail(addressDetail.deleteCharAt(addressDetail.lastIndexOf("\n")).toString());
@@ -797,25 +801,28 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				orderAddressMapper.updateById(address);
 			}
 
-			if (ObjectUtil.isNotEmpty(address.getCorpId()) && StringUtil.isNotBlank(address.getCorpName())) {
-				addressDetail.append(i).append(".").append(address.getCorpName()).append("(");
-			} else {
-				addressDetail.append(i).append(".").append("(");
-			}
+			if (ObjectUtil.isNotEmpty(address.getCorpId()) || StringUtil.isNotBlank(address.getContacts())
+				|| StringUtil.isNotBlank(address.getTel()) || StringUtil.isNotBlank(address.getAddress())) {
+				if (ObjectUtil.isNotEmpty(address.getCorpId()) && StringUtil.isNotBlank(address.getCorpName())) {
+					addressDetail.append(i).append(".").append(address.getCorpName()).append("(");
+				} else {
+					addressDetail.append(i).append(".").append("(");
+				}
 
-			if (StringUtil.isNotBlank(address.getContacts())) {
-				addressDetail.append(address.getContacts());
-			}
-			if (StringUtil.isNotBlank(address.getTel())) {
-				addressDetail.append(" ").append(address.getTel());
-			}
-			if (StringUtil.isNotBlank(address.getAddress())) {
-				addressDetail.append(") ").append(address.getAddress()).append("\n");
-			} else {
-				addressDetail.append(") ").append("\n");
-			}
+				if (StringUtil.isNotBlank(address.getContacts())) {
+					addressDetail.append(address.getContacts());
+				}
+				if (StringUtil.isNotBlank(address.getTel())) {
+					addressDetail.append(" ").append(address.getTel());
+				}
+				if (StringUtil.isNotBlank(address.getAddress())) {
+					addressDetail.append(") ").append(address.getAddress()).append("\n");
+				} else {
+					addressDetail.append(") ").append("\n");
+				}
 
-			i++;
+				i++;
+			}
 		}
 
 		List<CommonFile> fileList = order.getFileList();

+ 14 - 6
blade-service/blade-land/src/main/java/org/springblade/land/service/impl/TrackLogServiceImpl.java

@@ -56,13 +56,13 @@ public class TrackLogServiceImpl extends ServiceImpl<TrackLogMapper, TrackLog> i
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public List<Double> location(TrackLog trackLog) {
-		TrackKey key = CacheUtil.get(LandConst.LAND_CACHE, LandConst.TRACK_TOKEN, AuthUtil.getTenantId(), TrackKey.class, false);
+	public Map<String, Object> location(TrackLog trackLog) {
+		TrackKey key = CacheUtil.get(LandConst.LAND_CACHE, LandConst.TRACK_TOKEN, trackLog.getTenantId(), TrackKey.class, false);
 		if (ObjectUtil.isEmpty(key)) {
 			throw new RuntimeException("获取请求token失败");
 		}
 
-		List<Double> data = new ArrayList<>();
+		Map<String, Object> data = new HashMap<>();
 		try {
 			Map<String, String> map = new HashMap<>(5);
 			map.put("token", key.getToken());
@@ -79,11 +79,19 @@ public class TrackLogServiceImpl extends ServiceImpl<TrackLogMapper, TrackLog> i
 			JSONObject result = getData(res);
 			// 处理数据
 			JSONObject temp = result.getJSONObject("result");
+
 			BigDecimal divisor = new BigDecimal("600000");
 			BigDecimal longitude = new BigDecimal(temp.getString("lon")).divide(divisor, 6, RoundingMode.HALF_UP);
 			BigDecimal latitude = new BigDecimal(temp.getString("lat")).divide(divisor, 6, RoundingMode.HALF_UP);
-			data.add(longitude.doubleValue());
-			data.add(latitude.doubleValue());
+			List<Double> location = new ArrayList<>();
+			location.add(longitude.doubleValue());
+			location.add(latitude.doubleValue());
+
+			data.put("location", location);
+			data.put("address", temp.getString("adr"));
+			data.put("time", temp.getString("utc"));
+			data.put("speed", temp.getString("spd"));
+			data.put("mileage", temp.getString("mil"));
 		} catch (Exception e) {
 			throw new RuntimeException("获取数据失败:" + e.getMessage());
 		}
@@ -98,7 +106,7 @@ public class TrackLogServiceImpl extends ServiceImpl<TrackLogMapper, TrackLog> i
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public List<List<Double>> track(TrackLog trackLog) {
-		TrackKey key = CacheUtil.get(LandConst.LAND_CACHE, LandConst.TRACK_TOKEN, AuthUtil.getTenantId(), TrackKey.class, false);
+		TrackKey key = CacheUtil.get(LandConst.LAND_CACHE, LandConst.TRACK_TOKEN, trackLog.getTenantId(), TrackKey.class, false);
 		if (ObjectUtil.isEmpty(key)) {
 			throw new RuntimeException("获取请求token失败");
 		}

+ 21 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/AgencyOrderController.java

@@ -8,6 +8,7 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import com.trade.purchase.order.enums.OrderTypeEnum;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
 import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.feign.ICorpsDescClient;
@@ -203,4 +204,24 @@ public class AgencyOrderController extends BladeController {
 		order.setTradeType(OrderTypeEnum.DOMESTIC.getType());
 		return orderService.saveOrderMessage(order);
 	}
+	/**
+	 * 平台订单 审核通过
+	 */
+	@PostMapping("/approve")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "Feign-审核通过", notes = "订单主表id")
+	public R approve(@ApiParam(value = "订单主表id", required = true) @RequestParam Long id) {
+		orderService.approve(id);
+		return R.success("操作成功");
+	}
+	/**
+	 * 平台订单审核不通过
+	 */
+	@PostMapping("/reject")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "Feign-审核不通过", notes = "订单主表id")
+	public R reject(@ApiParam(value = "订单主表id", required = true) @RequestParam Long id) {
+		orderService.reject(id);
+		return R.success("操作成功");
+	}
 }

+ 2 - 17
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/excel/OrderItemsExcel.java

@@ -24,26 +24,11 @@ public class OrderItemsExcel   implements Serializable {
 	/**
 	 * 商品编码
 	 */
-	@ExcelProperty(value = "大字")
+	@ExcelProperty(value = "大字(必填)")
 	private String code;
 	/**
-	 * 花纹
-	 */
-	@ExcelProperty("花纹")
-	private String brandItem;
-	/**
-	 * 规格型号
-	 */
-	@ExcelProperty("规格型号")
-	private String typeno;
-	/**
-	 * 库存数量
-	 */
-	@ExcelProperty("库存")
-	private BigDecimal storageQuantity;
-	/**
 	 * 订货数量
 	 */
-	@ExcelProperty(value = "数量")
+	@ExcelProperty(value = "数量(必填)")
 	private BigDecimal orderQuantity;
 }

+ 12 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IOrderService.java

@@ -147,4 +147,16 @@ public interface IOrderService extends IService<Order> {
 	 * @return
 	 */
 	MonthSales monthSales(OrderVO Order);
+
+	/**
+	 * 平台订单审核通过
+	 * @param id
+	 */
+	void approve(Long id);
+
+	/**
+	 * 平台订单审核驳回
+	 * @param id
+	 */
+	void reject(Long id);
 }

+ 149 - 2
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -41,6 +41,7 @@ import org.springblade.common.utils.NumToWords;
 import org.springblade.core.secure.utils.AuthUtil;
 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.ObjectUtil;
 import org.springblade.finance.dto.ApplyDTO;
 import org.springblade.finance.feign.IFinanceClient;
@@ -1260,9 +1261,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				if (stock.getData() == null) {
 					throw new RuntimeException("未查到库存");
 				}
-				if (stock.getData() != null && stock.getData().getBalanceQuantity().compareTo(item.getOrderQuantity()) < 0) {
+				if (stock.getData() != null && stock.getData().getSurplusRouteQuantity().compareTo(item.getOrderQuantity()) < 0) {
 					R<GoodsDescVO> goodsMessage = goodsDescClient.selectGoodsMessage(item.getItemId());
-					throw new RuntimeException("商品" + goodsMessage.getData().getCname() + "库存不足,可出售库存为:" + stock.getData().getBalanceQuantity());
+					throw new RuntimeException("商品" + goodsMessage.getData().getCname() + "库存不足,可出售库存为:" + stock.getData().getSurplusRouteQuantity());
 				}
 				// 更改库存
 				StockGoodsVO data = stock.getData();
@@ -1351,6 +1352,152 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		return monthSales;
 	}
 
+	@Override
+	public void approve(Long id) {
+		LambdaQueryWrapper<Order> orderLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		orderLambdaQueryWrapper
+			.eq(Order::getId, id)
+			.eq(Order::getTenantId, AuthUtil.getTenantId());
+		Order order = baseMapper.selectOne(orderLambdaQueryWrapper);
+		if (order == null) {
+			throw new SecurityException("审批通过失败");
+		}
+		if (order.getStatus() == 3) {
+			throw new SecurityException("订单已审批通过请勿重复审批");
+		}
+		if (order.getGenerate() == 1){
+			throw new SecurityException("订单已生成销售订单请勿重复审批");
+		}
+		//修改采购合同信息
+		Order purchase = new Order();
+		purchase.setId(order.getSrcId());
+		purchase.setOrderStatus("平台审核通过");
+		baseMapper.updateById(purchase);
+		//生成平台销售订单
+		Order market = new Order();
+		BeanUtil.copy(order,market);
+		market.setId(null);//id置为空
+		market.setSrcId(order.getId());//来源id
+		market.setSrcOrderNo(order.getOrderNo());//来源单号
+		market.setCreateUser(SecureUtil.getUserId());
+		market.setCreateTime(new Date());
+		market.setUpdateTime(null);
+		market.setUpdateUser(null);
+		market.setOrderStatus(OrderStatusEnum.ENTERING.getType());//订单状态
+		market.setStatus(0);//订单状态
+		market.setGenerate(0);
+		market.setBillType(OrderTypeEnum.SALES.getType());//订单类型
+		market.setTradeType(OrderTypeEnum.DOMESTIC.getType());//贸易类型
+		// 获取系统编号
+		R billNo = serialClient.getBillNo(market.getBillType(), market.getTradeType(), market.getBillType());
+		if (billNo.getCode() != 200) {
+			throw new SecurityException("生成系统编号失败");
+		}
+		market.setSysNo(billNo.getData().toString());//系统编号
+		R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(market.getCorpId());
+		if (corpMessage.isSuccess()) {
+			R clientBillNo = serialClient.getBillNo(corpMessage.getData().getCode(), market.getTradeType(), market.getBillType());
+			if (!clientBillNo.isSuccess()) {
+				throw new SecurityException("生成订单编号失败");
+			}
+			market.setOrderNo((String) clientBillNo.getData());//销售订单号
+			market.setOrgOrderNo((String) clientBillNo.getData());
+		}
+		//保存销售订单信息
+		baseMapper.insert(market);
+		//保存销售订单明细信息
+		LambdaQueryWrapper<OrderItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(OrderItems::getPid,order.getId());
+		lambdaQueryWrapper.eq(OrderItems::getIsDeleted,0);
+		lambdaQueryWrapper.eq(OrderItems::getTenantId,order.getTenantId());
+		List<OrderItems> orderItemsList = orderItemsMapper.selectList(lambdaQueryWrapper);
+		if (CollectionUtils.isNotEmpty(orderItemsList)){
+			orderItemsList.stream().forEach(item ->{
+				item.setId(null);
+				item.setStatus(0);
+				item.setPid(market.getId());
+				item.setCreateTime(new Date());
+				item.setCreateUser(SecureUtil.getUserId());
+				item.setUpdateUser(SecureUtil.getUserId());
+				item.setUpdateTime(new Date());
+				orderItemsMapper.insert(item);
+			});
+		}
+
+		// 生成毛利润 毛利额
+		List<OrderItems> list = orderItemsService.list(new QueryWrapper<OrderItems>().eq("pid", market.getId()).eq("good_type",0).eq("is_deleted", 0));
+		Order orderMessage = new Order();
+		orderMessage.setId(market.getId());
+		if (CollectionUtils.isNotEmpty(list)) {
+			// 采购金额求和
+			BigDecimal reduce = list.stream().reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getPurchaseAmount().multiply(y.getOrderQuantity())), BigDecimal::add);
+			// 金额求和
+			BigDecimal amount = list.stream().map(OrderItems::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			//毛利额 = 销售金额-采购金额-预计海运费-本次使用返利+应收费用(除包装费)
+			BigDecimal grossProfit = amount.subtract(reduce.add(order.getPredictOceanFreight())).subtract(order.getCreateProfit() == null ? BigDecimal.ZERO : order.getCreateProfit());
+			//国内主表需要总重量总体积
+			//总重量求和
+			BigDecimal cntrVolumn = list.stream().reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getCntrVolumn().multiply(y.getOrderQuantity())), BigDecimal::add);
+			//总体积求和
+			BigDecimal cartonWeight = list.stream().reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getCartonWeight().multiply(y.getOrderQuantity())), BigDecimal::add);
+			// 毛利额添加应收费用(除包装费)
+			Long feeId = 0L;
+			R<FeesDesc> fees = feesDescClient.getFeesByName("包装费");
+			if (fees.isSuccess() && ObjectUtil.isNotEmpty(fees.getData())) {
+				feeId = fees.getData().getId();
+			}
+			List<OrderFees> feeList = orderFeesService.list(new LambdaQueryWrapper<OrderFees>().eq(OrderFees::getPid, order.getId()).ne(OrderFees::getItemId, feeId).eq(OrderFees::getIsDeleted, 0));
+			BigDecimal totalFee = feeList.stream().map(OrderFees::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			grossProfit = grossProfit.add(totalFee);
+
+			BigDecimal grossProfitRate = new BigDecimal(BigInteger.ZERO);
+			if (amount.compareTo(BigDecimal.ZERO) > 0) {
+				grossProfitRate = (grossProfit.divide(amount, RoundingMode.CEILING)).multiply(new BigDecimal(100));
+			}
+			// 毛利额
+			orderMessage.setGrossProfit(grossProfit);
+			// 毛利率
+			orderMessage.setGrossProfitRate(grossProfitRate);
+			//总重量
+			orderMessage.setCntrVolumn(cntrVolumn);
+			//总提价
+			orderMessage.setCartonWeight(cartonWeight);
+		}
+		baseMapper.updateById(orderMessage);
+		//修改代理订单信息
+		order.setStatus(3);
+		order.setGenerate(1);
+		order.setOrderStatus(OrderStatusEnum.PASS.getType());
+		baseMapper.updateById(order);
+
+	}
+
+	@Override
+	public void reject(Long id) {
+		LambdaQueryWrapper<Order> orderLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		orderLambdaQueryWrapper
+			.eq(Order::getId, id)
+			.eq(Order::getTenantId, AuthUtil.getTenantId());
+		Order order = baseMapper.selectOne(orderLambdaQueryWrapper);
+		if (order == null) {
+			throw new SecurityException("未找到单据");
+		}
+		if (order.getStatus() == 0) {
+			throw new SecurityException("订单已驳回或未提交审批,请勿重复操作");
+		}
+		//修改代理订单信息
+		order.setStatus(0);
+		order.setIsDeleted(1);
+		order.setOrderStatus(OrderStatusEnum.ENTERING.getType());
+		baseMapper.updateById(order);
+		//修改采购合同信息
+		Order indent = new Order();
+		indent.setId(order.getSrcId());
+		indent.setOrderStatus("平台拒绝接单");
+		indent.setGenerate(0);//平台拒绝,代理商可以再次提交采购合同
+		baseMapper.updateById(indent);
+	}
+
 	/**
 	 * 转换金额为英文大写
 	 *

+ 41 - 33
blade-service/trade-finance/src/main/java/org/springblade/finance/service/impl/SettlementServiceImpl.java

@@ -240,41 +240,49 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 
 		//测试账套-保存凭证
 		if ("681169".equals(settlement.getTenantId())) {
-			//查询原始订单的类型,销售 还是 采购
-			if (StringUtils.isNotBlank(settlement.getSrcOrderno())) {
-				Order mode = new Order();
-				mode.setOrderNo(settlement.getSrcOrderno());
-				Order order = orderDescClient.getByOrder(mode);
-				if (order == null) {
-					throw new SecurityException("原始单据不存在 或者 已被删除");
-				} else {
-					//销售
-					if ("XS".equals(order.getBillType())) {
-						//销售收款-保存凭证
-						if (settlement.getSettlementType() == 1 && "收费".equals(settlement.getBillType())) {
-							try {
-								String accountName = settlement.getBelongCompany();
-								//测试账套-销售保存凭证
-								this.testSaleCollectionSaveVoucher(settlement, accountName, corpsName, settlement.getAmount().toString());
-								//更新绑定
-								baseMapper.updateById(settlement);
-							} catch (Exception exception) {
-								throw new SecurityException(exception.getMessage());
+			//获取来源订单号
+			LambdaQueryWrapper<Items> itemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			itemsLambdaQueryWrapper.eq(Items::getPid, settlement.getId()).eq(Items::getIsDeleted, 0);
+			List<Items> list = itemsMapper.selectList(itemsLambdaQueryWrapper);
+			if (CollectionUtils.isNotEmpty(list)){
+				//获取来源订单号
+				List<String> stringList = list.stream().filter(e -> StringUtils.isNotBlank(e.getSrcOrderno())).map(Items::getSrcOrderno).collect(Collectors.toList());
+				for (String s : stringList) {
+					Order mode = new Order();
+					mode.setOrderNo(s);
+					//查询原始订单的类型,销售 还是 采购
+					Order order = orderDescClient.getByOrder(mode);
+					if (order == null) {
+						throw new SecurityException("原始单据不存在 或者 已被删除");
+					} else {
+						//销售
+						if ("XS".equals(order.getBillType())) {
+							//销售收款-保存凭证
+							if (settlement.getSettlementType() == 1 && "收费".equals(settlement.getBillType())) {
+								try {
+									String accountName = settlement.getBelongCompany();
+									//测试账套-销售保存凭证
+									this.testSaleCollectionSaveVoucher(settlement, accountName, corpsName, settlement.getAmount().toString());
+									//更新绑定
+									baseMapper.updateById(settlement);
+								} catch (Exception exception) {
+									throw new SecurityException(exception.getMessage());
+								}
 							}
 						}
-					}
-					//采购
-					else if ("CG".equals(order.getBillType())) {
-						//采购付款-保存凭证
-						if (settlement.getSettlementType() == 1 && "付费".equals(settlement.getBillType())) {
-							try {
-								String accountName = settlement.getBelongCompany();
-								//测试账套-销售保存凭证
-								this.testPurchaseSaveVoucher(settlement, accountName, createUser, corpsName, settlement.getAmount().toString());
-								//更新绑定
-								baseMapper.updateById(settlement);
-							} catch (Exception exception) {
-								throw new SecurityException(exception.getMessage());
+						//采购
+						else if ("CG".equals(order.getBillType())) {
+							//采购付款-保存凭证
+							if (settlement.getSettlementType() == 1 && "付费".equals(settlement.getBillType())) {
+								try {
+									String accountName = settlement.getBelongCompany();
+									//测试账套-销售保存凭证
+									this.testPurchaseSaveVoucher(settlement, accountName, createUser, corpsName, settlement.getAmount().toString());
+									//更新绑定
+									baseMapper.updateById(settlement);
+								} catch (Exception exception) {
+									throw new SecurityException(exception.getMessage());
+								}
 							}
 						}
 					}

+ 7 - 9
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/service/impl/PurchaseServiceImpl.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.trade.purchase.office.service.IStockService;
 import com.trade.purchase.order.entity.Order;
 import com.trade.purchase.order.entity.OrderItems;
 import com.trade.purchase.order.enums.OrderTypeEnum;
@@ -28,7 +27,6 @@ import org.springblade.client.vo.GoodsDescVO;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
-import org.springblade.mocha.entity.SalesPolicyItem;
 import org.springblade.mocha.feign.ISalesPolicyClient;
 import org.springblade.mocha.vo.SalesPolicyItemVO;
 import org.springblade.stock.feign.IStockGoodsClient;
@@ -36,7 +34,6 @@ import org.springblade.system.entity.Tenant;
 import org.springblade.system.feign.ITenantClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.math.BigDecimal;
 import java.util.*;
@@ -120,6 +117,7 @@ public class PurchaseServiceImpl extends ServiceImpl<OrderMapper, Order> impleme
 		CorpsDesc supplier = corpsDescList.get(0);//供应商/生成工厂
 		//生成平台代理商订单
 		Order purchase = new Order();
+		purchase.setBelongToCorpId(corpsDesc.getId());//所属公司
 		purchase.setBillType(order.getBillType());//代理订单
 		purchase.setTradeType(order.getTradeType());//国内订单
 		purchase.setTenantId(tenant.getTerrace());//代理商对应的平台的租户id
@@ -138,7 +136,8 @@ public class PurchaseServiceImpl extends ServiceImpl<OrderMapper, Order> impleme
 		purchase.setBanksAccountName(corpsDesc.getAccountName());//公司户头
 		purchase.setAccountBank(corpsDesc.getAccountBank());//开户银行
 		purchase.setShippingAddress(supplier.getStorageAddr());//发货地址
-		purchase.setStatus(1);
+		purchase.setStatus(1);//审批状态
+		purchase.setOrderStatus(OrderTypeEnum.SUBMIT.getType());
 		purchase.setArrivalAddress(agentCode.getStorageAddr());//到货地址
 		//生成系统编号
 		R billNo = serialClient.getNo(purchase.getBillType(), purchase.getTradeType(), purchase.getBillType(),tenant.getTerrace());
@@ -153,7 +152,6 @@ public class PurchaseServiceImpl extends ServiceImpl<OrderMapper, Order> impleme
 		}
 		purchase.setOrderNo((String) clientBillNo.getData());//销售单号
 		purchase.setMorderNo(order.getOrderNo());//主订单号
-		purchase.setOrderStatus("录入");
 		orderMapper.insert(purchase);
 		//生成平台代理商订单明细
 		if (CollectionUtils.isNotEmpty(orderItemsList)){
@@ -277,12 +275,12 @@ public class PurchaseServiceImpl extends ServiceImpl<OrderMapper, Order> impleme
 		//获取平台销售政策  需将平台编码转成代理商编码
 		List<SalesPolicyItemVO> salesPolicy = salesPolicyClient.getSalesPolicy(tenant.getCorpCode(), tenant.getTerrace());
 		if (CollectionUtils.isNotEmpty(salesPolicy)){
-			salesPolicy.stream().forEach(item ->{
-				//获取代理商商品信息
+			for (SalesPolicyItemVO item : salesPolicy) {
+				//获取代理商商品信息  找到转换为代理商商品名称编码,未找到跳过机选下一个
 				OrderItemsVO orderItemsVO = new OrderItemsVO();
 				GoodsDesc terraceCode = goodsDescClient.getTerraceCode(item.getCode(), SecureUtil.getTenantId());
 				if (terraceCode == null){
-					throw new SecurityException("未找到商品"+item.getCode());
+					continue;
 				}
 				orderItemsVO.setCode(terraceCode.getCode());
 				orderItemsVO.setCname(terraceCode.getCname());
@@ -320,7 +318,7 @@ public class PurchaseServiceImpl extends ServiceImpl<OrderMapper, Order> impleme
 				}
 
 				list.add(orderItemsVO);
-			});
+			}
 		}
 		//政策不为空,按销量倒叙排序
 		if (CollectionUtils.isNotEmpty(list)){