OrdersServiceImpl.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. package cn.com.lzt.purchase.service.impl;
  2. import java.util.Date;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map.Entry;
  6. import java.util.UUID;
  7. import com.alibaba.druid.util.StringUtils;
  8. import org.jeecgframework.core.common.exception.BusinessException;
  9. import org.jeecgframework.core.common.service.impl.CommonServiceImpl;
  10. import org.jeecgframework.core.constant.Globals;
  11. import org.jeecgframework.core.util.MyBeanUtils;
  12. import org.jeecgframework.core.util.oConvertUtils;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Service;
  15. import org.springframework.transaction.annotation.Transactional;
  16. import cn.com.lzt.purchase.dao.POrderDao;
  17. import cn.com.lzt.purchase.dto.OrderToSupplierDto;
  18. import cn.com.lzt.common.util.StringUtil;
  19. import cn.com.lzt.purchase.entity.POrdersEntity;
  20. import cn.com.lzt.purchase.service.POrdersServiceI;
  21. import cn.com.lzt.purchasedetails.entity.OrderDetailsEntity;
  22. @Service("pOrdersService")
  23. @Transactional
  24. public class OrdersServiceImpl extends CommonServiceImpl implements POrdersServiceI {
  25. @Autowired
  26. private POrderDao porderDao;
  27. public <T> void delete(T entity) {
  28. super.delete(entity);
  29. //执行删除操作配置的sql增强
  30. this.doDelSql((POrdersEntity)entity);
  31. }
  32. public void addMain(POrdersEntity orders,
  33. List<OrderDetailsEntity> orderDetailsList){
  34. if(orders.getOrderDate() == null)
  35. orders.setOrderDate(new Date());
  36. if(orders.getAuto()==null) orders.setAuto(Integer.valueOf(Globals.NO));
  37. String sourceType = orders.getSourceType();
  38. orders.setReferenceTotalMoney(orders.getTotalMoney());
  39. //保存主信息
  40. this.save(orders);
  41. HashMap<String,Double> qgdCallbackValue = new HashMap<String,Double>();
  42. //申购单id
  43. // String qgdID = "";
  44. /**保存-采购商品*/
  45. for(OrderDetailsEntity orderDetails:orderDetailsList){
  46. if(orderDetails.getSourceBId()!=null && orderDetails.getSourceBId().length()>0)
  47. {
  48. qgdCallbackValue.put(orderDetails.getSourceBId(), orderDetails.getQuantity());
  49. // qgdID = orderDetails.getSourceId();
  50. }
  51. //外键设置
  52. orderDetails.setFkId(orders.getId());
  53. // 未到货数量为采购数量
  54. orderDetails.setQuantityNotArrived(orderDetails.getQuantity());
  55. orderDetails.setPayStatus(Integer.valueOf(Globals.NO));
  56. orderDetails.setReferencePurchasePrice(orderDetails.getPurchasePrice());
  57. orderDetails.setReferenceMoney(orderDetails.getMoney());
  58. if(StringUtils.equals(sourceType, "fixAsset") ||StringUtils.equals(sourceType, "fixAssetSelf")){//判断以前固定资产是否报销过
  59. String productId = orderDetails.getSourceBId();
  60. String findInner ="select d.id from t_b_order_fix_asset_products d " +
  61. "where d.id=? and " +
  62. " (d.fk_id in (SELECT request_id FROM t_b_activiti_cost_pay_inner_user_detail where source_type='fix_asset') " +
  63. " or find_in_set(d.id,(SELECT ifnull(group_concat(request_id),'') FROM t_b_activiti_cost_pay_tmp_company tmp where tmp.source_type='fix_asset')) >0 )" ;
  64. List<?> iList = findListbySql(findInner,productId);
  65. if(!iList.isEmpty()) {//固定资产报销过
  66. orderDetails.setPayStatus(Integer.valueOf(Globals.YES));
  67. }
  68. }
  69. this.save(orderDetails);
  70. }
  71. if(qgdCallbackValue.size()>0) {
  72. if(sourceType.indexOf("orders") > -1) {
  73. updateQGD(qgdCallbackValue);
  74. }else if(sourceType.indexOf("fixAsset") > -1 ) {
  75. updateFixAsset(qgdCallbackValue);
  76. }
  77. }
  78. //执行新增操作配置的sql增强
  79. this.doAddSql(orders);
  80. }
  81. @Override
  82. public List<OrderToSupplierDto> getOrderToSupplierDtoPage(String orderid){
  83. List<OrderToSupplierDto> list = porderDao.getOrderToSupplierDto(orderid);
  84. return list;
  85. }
  86. public void updateMain(POrdersEntity orders,
  87. List<OrderDetailsEntity> orderDetailsList) {
  88. if(orders.getOrderDate() == null)
  89. orders.setOrderDate(new Date());
  90. //保存主表信息
  91. this.saveOrUpdate(orders);
  92. //===================================================================================
  93. //获取参数
  94. Object id0 = orders.getId();
  95. //===================================================================================
  96. //1.查询出数据库的明细数据-采购商品
  97. String hql0 = "from OrderDetailsEntity where 1 = 1 AND fK_ID =? ";
  98. List<OrderDetailsEntity> orderDetailsOldList = this.findHql(hql0,id0);
  99. //2.筛选更新明细数据-采购商品
  100. if(orderDetailsList!=null&&orderDetailsList.size()>0){
  101. for(OrderDetailsEntity oldE:orderDetailsOldList){
  102. boolean isUpdate = false;
  103. for(OrderDetailsEntity sendE:orderDetailsList){
  104. //需要更新的明细数据-采购商品
  105. if(oldE.getId().equals(sendE.getId())){
  106. try {
  107. MyBeanUtils.copyBeanNotNull2Bean(sendE,oldE);
  108. if(oldE.getQuantityArrived() == null || oldE.getQuantityArrived() <=0){
  109. oldE.setQuantityNotArrived(oldE.getQuantity());
  110. }else{
  111. oldE.setQuantityNotArrived(oldE.getQuantity() - oldE.getQuantityArrived());
  112. }
  113. this.saveOrUpdate(oldE);
  114. } catch (Exception e) {
  115. e.printStackTrace();
  116. throw new BusinessException(e.getMessage());
  117. }
  118. isUpdate= true;
  119. break;
  120. }
  121. }
  122. if(!isUpdate){
  123. //如果数据库存在的明细,前台没有传递过来则是删除-采购商品
  124. super.delete(oldE);
  125. }
  126. }
  127. //3.持久化新增的数据-采购商品
  128. for(OrderDetailsEntity orderDetails:orderDetailsList){
  129. if(oConvertUtils.isEmpty(orderDetails.getId())){
  130. //外键设置
  131. orderDetails.setFkId(orders.getId());
  132. // 未到货数量为采购数量
  133. orderDetails.setQuantityNotArrived(orderDetails.getQuantity());
  134. this.save(orderDetails);
  135. }
  136. }
  137. }
  138. //执行更新操作配置的sql增强
  139. this.doUpdateSql(orders);
  140. //TODO 回写申购单采购数量
  141. //END 回写申购单采购数量
  142. }
  143. public void delMain(POrdersEntity orders) {
  144. //获取参数
  145. Object id0 = orders.getId();
  146. //===================================================================================
  147. //删除-采购商品
  148. String hql0 = "from OrderDetailsEntity where 1 = 1 AND fK_ID =? ";
  149. List<OrderDetailsEntity> orderDetailsOldList = this.findHql(hql0,id0);
  150. HashMap<String,Double> qgdCallbackValue = new HashMap<String,Double>();
  151. /**保存-采购商品*/
  152. //申购单id
  153. // String qgdID = "";
  154. for(OrderDetailsEntity orderDetails:orderDetailsOldList){
  155. if(orderDetails.getSourceBId()!= null&&orderDetails.getSourceBId().length()>0)
  156. {
  157. // qgdID = orderDetails.getSourceId();
  158. qgdCallbackValue.put(orderDetails.getSourceBId(), 0-orderDetails.getQuantity());
  159. }
  160. }
  161. //this.deleteAllEntitie(orderDetailsOldList);
  162. //更新主表状态,逻辑删除,用于取消此订单
  163. String sql = "update t_s_porders set order_status = 3 where id = ?";
  164. executeSql(sql, id0);
  165. //this.delete(orders);
  166. //===================================================================================
  167. // 更新申购单已经采购数量
  168. updateQGD(qgdCallbackValue);
  169. }
  170. /**
  171. * 默认按钮-sql增强-新增操作
  172. * @return
  173. */
  174. public boolean doAddSql(POrdersEntity t){
  175. return true;
  176. }
  177. /**
  178. * 默认按钮-sql增强-更新操作
  179. * @return
  180. */
  181. public boolean doUpdateSql(POrdersEntity t){
  182. return true;
  183. }
  184. /**
  185. * 默认按钮-sql增强-删除操作
  186. * @return
  187. */
  188. public boolean doDelSql(POrdersEntity t){
  189. return true;
  190. }
  191. /**
  192. * 替换sql中的变量
  193. * @param sql
  194. * @return
  195. */
  196. public String replaceVal(String sql,POrdersEntity t){
  197. sql = sql.replace("#{id}",String.valueOf(t.getId()));
  198. sql = sql.replace("#{create_name}",String.valueOf(t.getCreateName()));
  199. sql = sql.replace("#{create_by}",String.valueOf(t.getCreateBy()));
  200. sql = sql.replace("#{create_date}",String.valueOf(t.getCreateDate()));
  201. sql = sql.replace("#{update_name}",String.valueOf(t.getUpdateName()));
  202. sql = sql.replace("#{update_by}",String.valueOf(t.getUpdateBy()));
  203. sql = sql.replace("#{update_date}",String.valueOf(t.getUpdateDate()));
  204. sql = sql.replace("#{bpm_status}",String.valueOf(t.getBpmStatus()));
  205. sql = sql.replace("#{order_date}",String.valueOf(t.getOrderDate()));
  206. sql = sql.replace("#{order_onumber}",String.valueOf(t.getOrderOnumber()));
  207. sql = sql.replace("#{handler_person_id}",String.valueOf(t.getHandlerPersonId()));
  208. sql = sql.replace("#{handler_person_name}",String.valueOf(t.getHandlerPersonName()));
  209. sql = sql.replace("#{supplier_id}",String.valueOf(t.getSupplierId()));
  210. sql = sql.replace("#{supplier_name}",String.valueOf(t.getSupplierName()));
  211. sql = sql.replace("#{pay_account}",String.valueOf(t.getPayAccount()));
  212. sql = sql.replace("#{order_auditor}",String.valueOf(t.getOrderAuditor()));
  213. sql = sql.replace("#{total_money}",String.valueOf(t.getTotalMoney()));
  214. sql = sql.replace("#{discount_money}",String.valueOf(t.getDiscountMoney()));
  215. sql = sql.replace("#{amount_payable}",String.valueOf(t.getAmountPayable()));
  216. sql = sql.replace("#{order_status}",String.valueOf(t.getOrderStatus()));
  217. sql = sql.replace("#{warehouse_id}",String.valueOf(t.getWarehouseId()));
  218. sql = sql.replace("#{warehouse_name}",String.valueOf(t.getWarehouseName()));
  219. sql = sql.replace("#{audit_date}",String.valueOf(t.getAuditDate()));
  220. sql = sql.replace("#{prepaid_money}",String.valueOf(t.getPrepaidMoney()));
  221. sql = sql.replace("#{UUID}",UUID.randomUUID().toString());
  222. return sql;
  223. }
  224. private void updateQGD(HashMap<String,Double> idAndValues )
  225. {
  226. String productsUpdSql = "update t_b_order_products set quantity_arrived = ifnull(quantity_arrived ,0) + ?,quantity_not_arrived = ifnull(quantity_arrived ,0) -? where id = ?";
  227. for (Entry<String,Double> idAndValue: idAndValues.entrySet()) {
  228. executeSql(productsUpdSql, idAndValue.getValue(),idAndValue.getValue(),idAndValue.getKey());
  229. }
  230. // 一个订单最多只能参照一个申购单生成,所有更新一条order语句即可
  231. // String orderUpdSql = "update t_b_orders set order_status = 0 where not exists ( select fk_id from t_b_order_products where id = ? and ifnull(quantity_arrived,0) >= quantity)";
  232. // executeSql(orderUpdSql,orderid);
  233. }
  234. private void updateFixAsset(HashMap<String,Double> idAndValues )
  235. {
  236. String productsUpdSql = "update t_b_order_fix_asset_products set quantity_arrived = ifnull(quantity_arrived ,0) + ?,quantity_not_arrived = ifnull(quantity_arrived ,0) -? where id = ?";
  237. for (Entry<String,Double> idAndValue: idAndValues.entrySet()) {
  238. executeSql(productsUpdSql, idAndValue.getValue(),idAndValue.getValue(),idAndValue.getKey());
  239. }
  240. }
  241. }